2

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

У меня есть видео с принудительными ключевыми кадрами каждые 2 секунды. В идеале я надеялся, что смогу получить срезы с идеальным кадром без перекодирования. Например:

ffmpeg -ss 00:00:00 -i original.mp4 -t 2 -c copy slices_0.mp4
ffmpeg -ss 00:00:02 -i original.mp4 -t 2 -c copy slices_1.mp4
ffmpeg -ss 00:00:04 -i original.mp4 -t 2 -c copy slices_2.mp4
...

Это не совсем похоже на работу.

Если углубиться в это, похоже, что первый срез выполнен с точностью до кадра, но все, что после этого имеет небольшое смещение (у него могут быть другие проблемы, но я сейчас просто сосредоточусь на этом). Первый кадр выглядит нормально:

# same output
ffmpeg -ss 00:00:03 -i original.mp4 -vframes 1 o.png && md5 o.png
ffmpeg -ss 00:00:00 -i slices_1.mp4 -vframes 1 1.png && md5 1.png

Но все после этого выключено

# not the same output
ffmpeg -ss 00:00:04 -i original.mp4 -vframes 1 o.png && md5 o.png
ffmpeg -ss 00:00:01 -i slices_1.mp4 -vframes 1 1.png && md5 1.png

Что бы я ни делал, я получаю тот же результат. Если я посмотрю на PTS для оригинального кадра 60, я получу 2.002000 (вместо 2). Но, даже если я использую это для своего среза, я получаю такое же смещение.

В чем дело?

(Вероятно, не реализовано, но мне также любопытно, почему первый кадр 0_slices.mp4 имеет смещение PST/DST, хотя оригинал не имеет)

1 ответ1

0

Если вы хотите осуществлять поиск с точностью до кадра, попробуйте поставить флаг -ss после входного файла.

Так что-то вроде этого:

ffmpeg -i original.mp4 -ss 00:00:04 -vframes 1 -f image2 0.png .

Установка флага ss перед входным файлом будет «грубой догадкой» с точки зрения PTS, но для работы она должна быть привязана к I-кадру. Это происходит намного быстрее, чем установка флага ss после входного файла, но за счет того, что он менее точен.

Когда вы ставите флаг ss после входного файла, FFmpeg будет декодировать с начала файла до самого начала времени -ss . Затем он сбрасывает всю информацию до времени ss ... Так что это займет гораздо больше времени, но должно быть точным.

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