ffmpeg разрезать одно и то же видео на несколько частей

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

ffmpeg -i input.mp4 -vf scale="w=640:h=-2",drawtext="fontfile=/usr/share/fonts/truetype/msttcorefonts/verdana.ttf: textfile='1.txt': fontcolor=white: fontsize=20: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w)/2: y=((h-text_h)/2)+90:" -ss 00:00:45.674 -to 00:00:50.093 -async 1 ./out/1.mp4

ffmpeg -i input.mp4 -vf scale="w=640:h=-2",drawtext="fontfile=/usr/share/fonts/truetype/msttcorefonts/verdana.ttf: textfile='2.txt': fontcolor=white: fontsize=20: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w)/2: y=((h-text_h)/2)+90:" -ss 00:00:49.344 -to 00:00:52.971 -async 1 ./out/2.mp4

но это быстро в первый раз (начало) входного файла, оно становится медленнее, если я хочу начать поиск с середины или ближе к концу ввода. Таким образом, получается почти 7-8 минут на 22 минуты входного файла...

ffmpeg -i input.mp4 -vf scale="w=640:h=-2",drawtext="fontfile=/usr/share/fonts/truetype/msttcorefonts/verdana.ttf: textfile='226.txt': fontcolor=white: fontsize=20: box=1: boxcolor=black@0.5: boxborderw=5: x=(w-text_w)/2: y=((h-text_h)/2)+90:" -ss 00:22:23.345 -to 00:22:25.846 -async 1 ./out/226.mp4

Кто-нибудь знает лучший способ сделать это? Могу ли я сделать это без поиска файла каждый раз? (Потому что мне кажется, что это проблема поиска....)

Ответы (1)

Используйте ss/to в качестве параметров ввода. Это ищет на этапе демультиплексора, что намного быстрее.

ffmpeg -ss 00:22:23.345 -to 00:22:25.846 -i input.mp4 ...

Вам понадобится самая последняя сборка ffmpeg (> 19 ноября 2017 г.)

У меня уже есть, я должен переместить их перед входным файлом в качестве параметра для исполняемого файла?
-ss должен быть перед входным файлом, который будет применяться на этапе чтения, как показано в примере.
Попробую собрать с последними исходниками... Текущий ffmpeg под ubuntu так не принимает.
-ssпоскольку опция демультиплексора устарела, но -toне была реализована до указанной даты.
не может заставить его работать с ffmpe3 Параметр (время остановки записи или перекодирования) не может быть применен к входному URL-адресу input.mp4 - вы пытаетесь применить параметр ввода к выходному файлу или наоборот. Переместите этот параметр перед файлом, которому он принадлежит. Ошибка анализа параметров входного файла input.mp4. Ошибка при открытии входных файлов: неверный аргумент
Используйте версию git с сайта johnvansickle.com/ffmpeg.