Estoy usando ffmpeg para convertir muchos videos en avi con este código.
ffmpeg -i input.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output.avi
¿Hay alguna manera puedo aplicar esto a 6 videos al mismo tiempo?
Estoy usando ffmpeg para convertir muchos videos en avi con este código.
ffmpeg -i input.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output.avi
¿Hay alguna manera puedo aplicar esto a 6 videos al mismo tiempo?
Un enfoque simple de ellos funcionando al mismo tiempo sería llamarlos como procesos en segundo plano:
#!/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 &
El &
al final de cada línea de comando señala los comandos como procesos en segundo plano.
Pero ten en cuenta que estos procesos "luchan" por recursos del procesador.
Puede utilizar un comando si se prefiere:
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
O utilizar una fiesta para el bucle de "lote" de la codificación, que es lo que yo haría, porque es escribir menos. No codificar todos a la vez, pero uno por uno.
for f in *.mp4; do ffmpeg -i "$f" -c:v mpeg4 -q:v 1 -aspect 16:9 "${f%.*}.avi"; done
Como para la velocidad de codificación, con mpeg4
, el método más rápido es probable que zx485 la respuesta. Mis dos ejemplos debe ser aproximadamente la misma velocidad que la otra, pero puede depender de su hardware, el número de entradas, etc.
Puede utilizar este comando para codificar los vídeos enteros en forma recursiva de cwd.
find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"
Y si quieres codificar en paralelo, se puede utilizar este comando.
find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"
-P
opción de xargs significa el número de procesos.
Tal vez, ffmpeg
comando se supone que utiliza hilo para compilar video en paralelo como otros menciona, estos procesos también «luchar» para recursos de procesador.
EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.