Autor Tópico: Controle do ffmpeg via script shell ou comando em programa .c [RESOLVIDO]  (Lida 3586 vezes)

Offline ataias

  • Usuário Ubuntu
  • *
  • Mensagens: 145
  • Ubuntu 10.10
    • Ver perfil
Tenho seguinte problema: gravar vídeos com tempo variável. O meu objetivo é fazer um programa que grave um vídeo, que tenha como um limite um valor como 3min e possa ser parado antes por um usuário que esteja usando o terminal (não o terminal do linux, um computador com touch-screen com um programa que grave o vídeo para posterior transmissão via TV na minha universidade).
A ideia é que o programa seja feito em gtk, programado em c e o mais que for necessário.
Meu problema é na gravação do vídeo, justamente...

Eu tentei no ffmpeg:

Código: [Selecionar]
ffmpeg tralala -t (tempo em segundos ) bla bla
Eu tive problemas com a limitação do vídeo, no meu notebook o vídeo chegou a ficar verde várias verdes e ainda sem áudio.
Eu também tentei limitar o vídeo com -r (frames por segundo) e depois -vframes (total de frames) mas no final os frames ainda estavam variando e o tempo limite acabaria ficando variável, ...

Daí pensei em executar o programa, no programa escrito em C ele chamaria um shell script que chamaria o ffmpeg. O shell script seria de fácil edição sem precisar compilar sempre, aí fica melhor ficar fora do binário. Eu tentei fazer algo como:

Código: [Selecionar]
ffmpeg -f alsa -ac 2 -i pulse -f video4linux2 -s vga -r 30 -i /dev/video0 -vcodec mpeg4 -acodec -vframes 375 libmp3lame -ab 328k -sameq -y out.avi &

Aí ele gravava o vídeo, e ainda ia para o background. Mas... eu tentei dar um comando, para trazer para o foreground e depois um [q] para tentar parar a gravação.

Código: [Selecionar]
fg 1 && q
Mas não finalizou o ffmpeg, e ainda deu comando não reconhecido "q". Enfim, quero parar a gravação do vídeo do ffmpeg via um comando com shell, sem uma pessoa, sem teclados. Só haverá um botão no touch-screen, se for apertado, a gravação deve ser parada. Caso contrário, parada quando chegar num tempo limite que for definido. Como fazer isso?
« Última modificação: 13 de Maio de 2011, 19:34 por ataias »
Dell Inspiron 15R - Intel Core i5
RAM 4Gb - HD 500Gb
Ubuntu Linux 10.10 64bits!!!! A melhor parte!

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Controle do ffmpeg via script shell ou comando em programa .c
« Resposta #1 Online: 11 de Maio de 2011, 16:38 »
$! guarda o identificador do ultimo processo colocado em segundo plano.

----

"q"? Matar é aceitável? O que realmente precisa de explicação, não tem.
« Última modificação: 11 de Maio de 2011, 16:56 por irtigor »

Offline ataias

  • Usuário Ubuntu
  • *
  • Mensagens: 145
  • Ubuntu 10.10
    • Ver perfil
Re: Controle do ffmpeg via script shell ou comando em programa .c
« Resposta #2 Online: 11 de Maio de 2011, 20:56 »
Não entendi seu comentário. É que no ffmpeg está escrito "aperte [q] para parar a gravação" (em inglês). Logo, eu imaginei (erroneamente) que pudesse ser dado o comando:
Código: [Selecionar]
fg 1 && q , sendo o último para parar a gravação depois que saísse para o foreground. Não sei se matar seria aceitável, se o arquivo de vídeo não ficar corrompido e não houver problemas na gravação, seria uma opção. No caso, só haveria um processo em segundo plano, mas achei interessante o $!, pode ser bem útil. Obrigado.
Mais sugestões?
Dell Inspiron 15R - Intel Core i5
RAM 4Gb - HD 500Gb
Ubuntu Linux 10.10 64bits!!!! A melhor parte!

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Controle do ffmpeg via script shell ou comando em programa .c
« Resposta #3 Online: 12 de Maio de 2011, 07:11 »
O xdotool pode ser usado pra simular a entrada padrão, mas isso só vai servir se existir um terminal com ffmpeg em primeiro plano, caso contrário, vai ser necessário ler a api para criar um encoder.

Offline ataias

  • Usuário Ubuntu
  • *
  • Mensagens: 145
  • Ubuntu 10.10
    • Ver perfil
Re: Controle do ffmpeg via script shell ou comando em programa .c
« Resposta #4 Online: 13 de Maio de 2011, 19:34 »
Já rolou, tivemos de usar programação paralela, ficou show.

Obrigado pela ajuda! Até mais!
Dell Inspiron 15R - Intel Core i5
RAM 4Gb - HD 500Gb
Ubuntu Linux 10.10 64bits!!!! A melhor parte!