Как правильно разделить и объединить видео с 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. Выход начинается с начала исходного видео, а не через 1,5 с.
  2. Звук после объединения второго входного видео задерживается (при воспроизведении в 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
Другие вопросы по тегам