Разделить видео на сегменты равной продолжительности

В настоящее время я использую ffmpeg для разделения видео на 10сегменты секунд. Я использовал два подхода, но ни один из них не дал желаемых результатов. Подход номер один заключается в использовании базового разрезания с параметрами -t и -ss для получения сегментов. Это дает почти точные сегменты, но имеет некоторые проблемы с кадрами в конце некоторых видео. Второй вариант — использовать сегмент: отличный и быстрый, но он дает сегменты разной продолжительности. Любая идея, как получить сегменты одинаковой продолжительности и без проблем в кадрах? Другими словами, если я воспроизведу их в списке, он должен воспроизводиться плавно.

Общий путь

ffmpeg – i input.mp4  -ss <start> -t <duration> -vcodec copy -acodec copy output%03d.mp4

Использование сегмента

ffmpeg -i input.mp4 -c copy -map 0 -segment_time 8 -f segment output%03d.mp4
Вы нашли какое-либо решение или причину?

Ответы (1)

Проблема с кадрами, скорее всего, результат использования h264, а не перекодирования видео. h264 обычно не имеет отдельных кадров (если они не закодированы с помощью внутреннего профиля), а группы кадров (GOP), ffmpeg будет обрезать позицию ключевого кадра, т.е. в конце или начале GOP. Или не в случае вашего первого подхода, что дает вам проблемы с затронутыми GOP.

Проблема должна быть решена путем повторного кодирования (-vcodec libx264 -preset slow) или, если это также приводит к ошибкам, перекодируйте в кодек без потерь, такой как jpeg2000 ( -vcodec libopenjpeg), обрежьте ваше видео, а затем снова закодируйте в h264 (или любой другой кодек, который вы предпочитаете) .

Как насчет использования параметра -g?! (установить размер GOP)
Это не поможет вам с точностью до кадра. Проблема в том, что есть GOP. если вы разделите видео внутри GOP, вы уничтожите кадры в конце вашего клипа.
Что вы имеете в виду под "вы будете уничтожать кадры в конце вашего клипа"?!
Кадрам внутри GOP нужны все остальные кадры в GOP, поэтому, если вы вырезаете GOP, оставшиеся кадры не содержат всей необходимой информации. Технически вы можете перекодировать только последнюю GOP, но я не думаю, что есть инструмент, который сделает это за вас.