В настоящее время я использую 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
Проблема с кадрами, скорее всего, результат использования h264, а не перекодирования видео. h264 обычно не имеет отдельных кадров (если они не закодированы с помощью внутреннего профиля), а группы кадров (GOP), ffmpeg будет обрезать позицию ключевого кадра, т.е. в конце или начале GOP. Или не в случае вашего первого подхода, что дает вам проблемы с затронутыми GOP.
Проблема должна быть решена путем повторного кодирования (-vcodec libx264 -preset slow) или, если это также приводит к ошибкам, перекодируйте в кодек без потерь, такой как jpeg2000 ( -vcodec libopenjpeg
), обрежьте ваше видео, а затем снова закодируйте в h264 (или любой другой кодек, который вы предпочитаете) .
Доктор Джеки