Для проекта, над которым я работаю, мне нужно вырезать некоторые части одного и того же видео с некоторыми субтитрами. Поэтому я сделал файл 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
Кто-нибудь знает лучший способ сделать это? Могу ли я сделать это без поиска файла каждый раз? (Потому что мне кажется, что это проблема поиска....)
Используйте ss/to в качестве параметров ввода. Это ищет на этапе демультиплексора, что намного быстрее.
ffmpeg -ss 00:22:23.345 -to 00:22:25.846 -i input.mp4 ...
Вам понадобится самая последняя сборка ffmpeg (> 19 ноября 2017 г.)
танайдин
себикс
танайдин
Гьян
-ss
поскольку опция демультиплексора устарела, но-to
не была реализована до указанной даты.танайдин
Гьян