Как правильно разделить и объединить видео с ffmpeg с учетом точки входа / выхода
Я учусь разделять и объединять видео с ffmpeg
, В настоящее время я тренируюсь на 799 КБ MP4, one_through_ten-timestamped.mp4
где каждый кадр имеет записанный "номер кадра" (до кадра 40, записанный номер опережает только каждый второй кадр).
Команда, которую я использую:
ffmpeg -f concat -i one_through_ten_edit_list.txt -c copy one_through_ten_edited.mp4
куда one_through_ten_edit_list.txt
является:
file one_through_ten-timestamped.mp4
inpoint 00:00:01.500
outpoint 00:00:05.000
file one_through_ten-timestamped.mp4
inpoint 00:00:09.500
outpoint 00:00:13.000
Когда я выполняю эту команду в ffmpeg
у выходного видео есть несколько проблем:
- Выход начинается с начала исходного видео, а не через 1,5 с.
- Звук после объединения второго входного видео задерживается (при воспроизведении в QuickTime Player.
ffplay
).
Когда я выполняю те же правки в MPEG Streamclip, результирующее видео воспроизводится, как и ожидалось. Вот некоторые табличные результаты из ffprobe
на one_through_ten-timestamped.mp4
который показывает, где видео ffmpeg и MPEG Streamclip отличаются по своим точкам объединения:
Обратите внимание, что оба ffmpeg
и MPEG Streamclip обрабатывают второй сегмент примерно одинаково, однако ffmpeg
не уважает inpoint
в первом входном видео. Обратите внимание, что в моем MP4 есть один пакет на кадр.
ffmpeg
вел себя так с версии 2.8 (возможно, до) до 3.3.3. Я пропускаю опцию командной строки или списка редактирования? Конечно, другие успешно использовали ffmpeg
разделять и объединять видео (без повторного сжатия).
1 ответ
Вы можете попробовать добавить-async 1
ffmpeg -f concat -async 1 -safe 0 -i one_through_ten_edit_list.txt -c copy one_through_ten_edited.mp4