1

У меня есть 2 видео файла (FLV). У одного есть видео, а у другого - аудио. Я написал скрипт, используя ffmpeg, который извлекает аудио в формате mp3, а затем объединяет его с видео flv. Это работает, за исключением того, что мои аудио и видео не синхронизированы, потому что аудио длиннее, чем видео. Они начали записывать аудио встречи перед видео.

Для полноты вот две мои команды:

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

Это заставило меня задуматься, ffmpeg объединяет 2 файла вместе в начале каждого файла. Есть ли способ, которым я могу сказать, что это совпадает с конца, и игнорировать лишние в начале?

Я знаю, что могу отредактировать каждый файл, чтобы получить их одинакового размера, но я бы хотел сделать это как можно более автоматизированным.

1 ответ1

2

если вы просто выполните ffmpeg -i inputfile он выдаст вам информационный вывод, включая длину потока (есть также команда ffprobe которая может быть, а может и нет), которая делает то же самое, и может иметь больший контроль вывода).

% 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

Поэтому вам нужно проанализировать этот вывод, чтобы узнать длину каждого исходного файла, а затем использовать опцию -itsoffset с тем, что вы изучили.

   -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.

так что в итоге вы получите что-то вроде (не проверено):

ffmpeg -i foo.mp3 -itsoffset 60 -i blah.mpeg -acodec copy -vcodec copy -copyts out.mkv

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .