ffmpeg combinam vídeo e áudio separados de diferentes comprimentos

1

Eu tenho 2 arquivos de vídeo (flv). Um tem o vídeo e o outro tem o áudio. Eu escrevi um script usando o ffmpeg que extrai o áudio como mp3 e depois o mescla com o flv do vídeo. Funciona, exceto que meu áudio e vídeo estão fora de sincronia porque o áudio é maior que o vídeo. Eles começaram a gravar o áudio da reunião antes do vídeo.

Para completar, aqui estão os meus 2 comandos:

msg "Extracting Audio"
./ffmpeg -loglevel panic -i cameraVoip*.flv -vn -acodec mp3 output_audio.mp3

msg "Merging Audio with Video"
./ffmpeg -loglevel panic -i output_audio.mp3 -i screenshare*.flv -acodec copy -vcodec copy output_video.flv

Isso me faz pensar, o ffmpeg está combinando os 2 arquivos juntos desde o começo de cada arquivo. Existe uma maneira que eu possa dizer que combina do final e ignorar extra no começo?

Sei que posso editar cada arquivo para obtê-los no mesmo tamanho, mas gostaria de fazer isso da forma mais automática possível.

    
por jj. 06.09.2013 / 21:08

1 resposta

2

se você acabou de fazer ffmpeg -i inputfile , ele fornecerá a saída informativa, incluindo o comprimento do fluxo (também há um comando ffprobe que você pode ou não ter que faz a mesma coisa e pode ter mais controle de saída ).

% ffmpeg -i foo.mkv
ffmpeg version 1.0.git-79133fd Copyright (c) 2000-2012 the FFmpeg developers
[...]
Input #0, matroska,webm, from 'foo.mkv':
  Metadata:
    creation_time   : 2009-11-08 16:11:10
  Duration: 00:43:16.71, start: 0.000000, bitrate: 2435 kb/s
    Stream #0:0(eng): Video: h264 (High), yuv420p, 720x480 [SAR 32:27 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Stream #0:1(eng): Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s (default)
    Stream #0:2(eng): Subtitle: subrip
At least one output file must be specified

Portanto, você precisará analisar essa saída para obter o tamanho de cada arquivo original e, em seguida, usar a opção -itsoffset com o que aprender.

   -itsoffset offset (input)
       Set the input time offset in seconds.  "[-]hh:mm:ss[.xxx]" syntax
       is also supported.  The offset is added to the timestamps of the
       input files.  Specifying a positive offset means that the
       corresponding streams are delayed by offset seconds.

para que você acabe com algo como (não testado):

ffmpeg -i foo.mp3 -itsoffset 60 -i blah.mpeg -acodec copy -vcodec copy -copyts out.mkv
    
por 06.09.2013 / 22:15