Во время поиска в U&L я заметил довольно много вопросов о том, как создать скрипт для генерации ffmpeg
командных строк, подобных этим:
ffmpeg -i video.mp4 -ss 00:00:00 -t 00:10:00 -c copy 01.mp4
ffmpeg -i video.mp4 -ss 00:10:00 -t 00:10:00 -c copy 02.mp4
ffmpeg -i video.mp4 -ss 00:20:00 -t 00:10:00 -c copy 03.mp4
В поисках решения этой проблемы я наткнулся на этот тикет в ffmpeg
системе отслеживания ошибок под названием:Разделить входное видео на несколько выходных видеофрагментов.
В этом тикете описывается патч, который позволит вам наконец-то предоставить список временных точек для разрезания видео на более мелкие фрагменты с помощью одной командной строки, например такой:
$ ffmpeg -i input.avi -f segment -segment_times 10,20,40,50,90,120,180 \
-vcodec copy output02%d.avi
Судя по всему, исправление было выпущено в этой версии репозитория кода:
commit 2058b52cf8a4eea9bf046f72b98e89fe9b36d3e3
Author: Stefano Sabatini <[email protected]>
Date: Sat Jan 28 22:36:38 2012 +0100
lavf/segment: add -segment_times option
Address trac ticket #1504.
Я скачал эту статически собранную версию ffmpeg
,ffmpeg.static.64bit.2013-10-05.tar.gzизсайт ffmpeg, но, по-видимому, этот переключатель не был предусмотрен.
$ ./ffmpeg --help |& grep segment
$
Кто-нибудь смог заставить работать этот новый переключатель?
решение1
Это потому, что пропал без вести?-map
вариант, который назначает входные потоки в качестве источника для выходного файла. Я использую ffmpeg 2.6.1 и могу разделить видео с помощью -segment_times
:
ffmpeg -i foo.mp4 -segment_times 10,20,30,40 -c copy -map 0 -f segment %03d.mp4
Если вам нужно более сложное разделение, вы можете использовать OpenCV для чтения исходного видео и записи нужного кадра в новое разделение. Проверьте это:«Создание видео с помощью OpenCV»и«Разделить видео на несколько фрагментов в соответствии с несколькими начальными и конечными индексами кадров»