Você pode editar vários vídeos ao mesmo tempo usando o ffmpeg?

1

Estou usando o ffmpeg para converter muitos vídeos em avi com esse código.

ffmpeg -i input.mp4 -vcodec mpeg4 -qscale:v 1 -aspect 16:9 output.avi

Existe alguma maneira de aplicar isso a 6 vídeos ao mesmo tempo?

    
por paulST 25.11.2016 / 22:12

3 respostas

1

Um grande comando

Você pode usar um comando se preferir:

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

loop de bash

Ou use um bash para loop para codificação "batch", que é o que eu faria porque é menos digitação. Ele não codifica todos de uma vez, mas um por um.

for f in *.mp4; do ffmpeg -i "$f" -c:v mpeg4 -q:v 1 -aspect 16:9 "${f%.*}.avi"; done

Velocidade

Quanto à velocidade de codificação, com mpeg4 , o método mais rápido é provavelmente a resposta do zx485. Meus dois exemplos devem ter a mesma velocidade que os outros, mas isso pode depender do seu hardware, número de entradas, etc.

    
por LordNeckbeard 26.11.2016 / 00:39
4

Uma abordagem simples de executá-los todos ao mesmo tempo seria chamá-los como processos em 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 &

O & no final de cada linha de comando designa os comandos como processos em segundo plano.

Mas esteja ciente de que esses processos "lutam" por recursos do processador.

    
por zx485 25.11.2016 / 22:20
0

Você pode usar este comando para codificar vídeos inteiros em cwd recursivamente.

find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"

E se você quiser codificar em paralelo, você pode usar este comando.

find -name '*.avi' | sed 's/\.avi$//g' | xargs --replace ffmpeg -i "{}.mp4" -c:v mpeg4 -q:v 1 -aspect 16:9 "{}.avi"
A opção

-P de xargs significa o número de processos. Talvez, o comando ffmpeg deva usar o thread para compilar o vídeo em paralelo. como outros mencionam, esses processos também "lutam" pelo recurso do processador.

    
por Takuya Sawada 26.11.2016 / 04:30