У меня есть папка, в которой каждый файл mp4 требует обрезания первых 10 минут. Я использую следующее для индивидуальной обрезки, но это занимает слишком много времени, чтобы делать это по одному
ffmpeg -i "untrimmed.mp4" -ss 00:10:00 -c copy "trimmmed.mp4"
Есть ли простой способ обрезать несколько видеофайлов одновременно?
Редактировать - с тех пор я нашел обходной путь в PowerShell - пример с использованием 11 минут
Get-ChildItem -Filter *.mp4 | ForEach -Process { ffmpeg -i $_ -ss 00:11:00 -c copy ($_.BaseName + '_Trimmed.mp4')}
решение1
Эта концепция называется пакетной обработкой, а метод зависит от системы, поскольку ffmpeg сам по себе не обладает такой возможностью.
В Windows вы можете использовать , ForFiles
чтобы найти файлы, соответствующие шаблону (например, *.mp4
), и /C
переключатель, чтобы запустить команду ffmpeg для результатов.
В Linux и MacOS командная строка find
делает то же самое с помощью переключателя -exec
.
В любом случае вы можете использовать циклы, но они слишком усложняют задачу, когда это все, что вам нужно.
Для примера Linux эта команда будет искать в текущей папке .
файлы с именами, соответствующими *.mp4
шаблону, затем выполнять ffmpeg для каждого результата {}
, выводя eg untrimmed.mp4_trim.mp4
(вы же можете с этим работать, верно?). Экранирование ;
в конце закрывает -exec
переключатель:
find . -iname '*.mp4' -exec ffmpeg -i '{}' -ss 00:10:00 -c copy '{}_trim.mp4' \;