Я использую ffmpeg для преобразования многих видео в avi с этим кодом.
ffmpeg -i input.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output.avi
Есть ли какой-либо способ, которым я могу применить это к 6 видео одновременно?
можно использовать одну команду, если Вы предпочитаете:
ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -i video4.mp4 -i video5.mp4 -i video6.mp4 \
-map 0 -c:v mpeg4 -q:v 1 -aspect 16:9 video1.avi \
-map 1 -c:v mpeg4 -q:v 1 -aspect 16:9 video2.avi \
-map 2 -c:v mpeg4 -q:v 1 -aspect 16:9 video3.avi \
-map 3 -c:v mpeg4 -q:v 1 -aspect 16:9 video4.avi \
-map 4 -c:v mpeg4 -q:v 1 -aspect 16:9 video5.avi \
-map 5 -c:v mpeg4 -q:v 1 -aspect 16:9 video6.avi
Или использование удар для цикла для кодирования "пакета", которое является тем, что я сделал бы, потому что это меньше вводит. Это не кодирует их внезапно, но один за другим.
for f in *.mp4; do ffmpeg -i "$f" -c:v mpeg4 -q:v 1 -aspect 16:9 "${f%.*}.avi"; done
Что касается кодирования скорости, с mpeg4
, самый быстрый метод является ответом вероятного zx485. Мои два примера должны быть о той же скорости друг как друг, но она может зависеть от Ваших аппаратных средств, количества исходных данных, и т.д.
Простой подход выполнение их всех одновременно должен был бы назвать их как фоновые процессы:
#!/bin/bash
ffmpeg -i input1.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output1.avi &
ffmpeg -i input2.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output2.avi &
ffmpeg -i input3.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output3.avi &
ffmpeg -i input4.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output4.avi &
ffmpeg -i input5.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output5.avi &
ffmpeg -i input6.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output6.avi &
&
в конце каждой командной строки определяет команды как фоновые процессы.
, Но знать, что эти процессы "борются" за ресурсы процессора.
Можно использовать эту команду для кодирования целых видео под cwd рекурсивно.
find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"
И если Вы хотите закодировать параллельно, можно использовать эту команду.
find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"
-P
опция xargs означает количество процессов. Возможно, ffmpeg
команда, как предполагается, использует поток для компиляции видео параллельно. как упоминания других, они обрабатывают также "борьбу" за ресурс процессора.