У меня есть несколько 100 видео, которые мне нужно удалить первые 20 секунд и последние 30 секунд.
Очевидно, не практично делать это по одному. Можно ли как-нибудь автоматизировать это, может быть, в сценарии OS X Automator?
источник
У меня есть несколько 100 видео, которые мне нужно удалить первые 20 секунд и последние 30 секунд.
Очевидно, не практично делать это по одному. Можно ли как-нибудь автоматизировать это, может быть, в сценарии OS X Automator?
Предполагая, что вы запускаете * nix и Bash, скачать статическую сборку ffmpeg для вашей операционной системы. Затем возьмите ffmpeg
файл и скопировать его в /usr/bin/ffmpeg
,
sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
sudo chmod +x /usr/bin/ffmpeg
Теперь вы можете запустить этот скрипт оболочки в Bash - должно быть достаточно, чтобы скопировать и вставить его в папку, где находятся видео.
for f in *.mp4; do
duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
trim_start=20
trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done
Замечания: Удалить echo
заявление на самом деле выполнять команды. Было бы хорошо сначала проверить сгенерированные команды на точность. Это будет генерировать что-то вроде:
ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4
Сценарий выполнит вычисление общего времени выполнения ввода, вычтет время начала и время, которое вы хотите удалить из конца, а затем скажет ffmpeg сделать потоковую копию с указанного вами времени начала до вновь рассчитанного конца время. Это никак не повлияет на качество видео и звука. Он должен работать менее чем за несколько секунд даже для больших файлов.
Чтобы уточнить, -ss
устанавливает время начала и -c copy -map 0
скопирует все потоки видео, аудио и субтитров из оригинала в урезанную версию. -t
устанавливает время окончания. Увидеть эта статья на FFmpeg Wiki для получения дополнительной информации о поиске.
Если вам удобно с командной строкой, я бы порекомендовал FFmpeg
ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4
Другой вариант - небольшой сценарий оболочки, который просматривает ваши файлы и запускает однофайловое задание FFmpeg для каждого из них. Опять же, я никогда не использовал оболочку Mac :)
for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done
Надеюсь, это поможет немного.
%d
поддерживается только для изображений (более конкретно image2 demuxer ).