FFMPEG: Как небольшая разница во временных метках вызывает разницу в два кадра при обрезке видео

Как точно обрезать видео с использованием FFmpeg: практическое руководство

В данной статье мы рассмотрим, как правильно обрезать видеозаписи с помощью FFmpeg, особенно в ситуациях, когда необходимо получить определенное количество кадров. Мы проанализируем сложные ситуации, которые возникают при обрезке видео, и предложим решения для избежания распространенных ошибок.

Проблемы с обрезкой видео

При работе с программно сгенерированным сложным фильтром для составления видео из множества входных данных могут возникать небольшие ошибки, которые накапливаются со временем. Это особенно актуально, когда требуется точная обрезка видео. Например, предположим, что вам нужно извлечь 44 кадра из связанного видео с частотой кадров 30 FPS, начиная с определенного кадра.

При использовании FFmpeg для обрезки можно столкнуться с неожиданными результатами. Например, при выполнении двух последовательных попыток для извлечения определенных кадров можно обнаружить, что первая команда выдает 43 кадра, а вторая — 45, несмотря на минимальную разницу всего в 0,0001 секунды между временными отметками.

Примеры попыток обрезки

Вот две попытки, сделанные с использованием FFmpeg версии 6.1.1:

Попытка 1:

ffmpeg -i input.mp4 -vf "trim=start=3.2666666666666666:end=4.7333,setpts=PTS-STARTPTS" -an output.mp4

Попытка 2:

ffmpeg -i input.mp4 -vf "trim=start=3.2666666666666666:end=4.7334,setpts=PTS-STARTPTS" -an output.mp4

Анализ получаемого результата

Как выясняется, обе команды могут давать разные количества кадров. Так, первая команда возвращает 43 кадра, а вторая — 45, даже если разница между end временными метками незначительна. Это приводит к вопросу: как можно предсказуемо обрезать необходимое количество кадров?

Для определения количества кадров в выходном файле можно использовать команду:

ffprobe -show_frames output.mp4 | grep FRAME | wc -l

Это важно учитывать, так как результат может варьироваться в зависимости от версии FFmpeg и используемого фильтра.

Решение проблемы с обрезкой

Недавние тесты показали, что между разными версиями FFmpeg существуют различия в обработке команд. В частности, в версии 7.1 ваша команда может успешно выдавать 44 кадра, а в версии 4.4.5 — 45 кадров. Активизация параметра -fps_mode passthrough также может решить проблему:

ffmpeg -y -i input.mp4 -fps_mode passthrough -vf "trim=start=3.2666666666666666:end=4.7334,setpts=PTS-STARTPTS" -an output.mp4

Выводы и перспективы

В заключение, стоит отметить, что проблема, сопутствующая фильтру обрезки в FFmpeg, может зависеть от используемой версии программы. Использование параметра -fps_mode passthrough может помочь в получении предсказуемого количества кадров. Однако рекомендуется всегда тестировать команды на вашей версии FFmpeg, чтобы удостовериться, что они работают корректно и дают желаемый результат.

Это руководство поможет вам разобраться в нюансах работы с FFmpeg и повысить точность обрезки видео, избегая распространенных ошибок и недоразумений.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *