![Como executo uma conversão instantânea de ffmpeg (pipe) em paralelo?](https://rvso.com/image/154453/Como%20executo%20uma%20convers%C3%A3o%20instant%C3%A2nea%20de%20ffmpeg%20(pipe)%20em%20paralelo%3F.png)
Quero fazer a seguinte conversão:
for f in *.m4a; do
( ffmpeg -i "$f" -f wav - | opusenc --bitrate 38 - "${f%.m4a}.opus" ) &
done
Eu sei que poderia usarffmpegdiretamente para converter para opus, mas quero usaropusencneste caso, por se tratar de uma versão mais recente.
Quando executo o opusenc após o ffmpeg, ele funciona bem, mas quando tento executar o acima, recebo um monte de Stopped
e nada acontece.
Responder1
Se você usa GNU Parallel, isso funciona:
parallel 'ffmpeg -i {} -f wav - | opusenc --bitrate 38 - {.}.opus' ::: *m4a
Talvez isso seja bom o suficiente?
Ele tem o benefício adicional de executar apenas 1 trabalho por thread da CPU; portanto, se você tiver 1.000 arquivos, não sobrecarregará sua máquina.
Responder2
Eu criei essa construção (... &)
, mas não sei por que funciona:
for f in R*.mp3
do
(time ffmpeg -loglevel 0 -i "$f" -ac 1 -y "${f%mp3}new.mp3" && date && ls -l "$f" &)
done
Com 4 arquivos:
real 0m0.784s
user 0m0.795s
sys 0m0.048s
So 10 Sep 2023 16:36:43 UTC
-rw-r--r-- 1 root root 1363436 10.Sep 10:04 REC-005.mp3
real 0m1.037s
user 0m1.064s
sys 0m0.040s
So 10 Sep 2023 16:36:43 UTC
-rw-r--r-- 1 root root 1540076 10.Sep 10:04 REC-003.mp3
real 0m1.822s
user 0m1.882s
sys 0m0.055s
So 10 Sep 2023 16:36:44 UTC
-rw-r--r-- 1 root root 2948588 10.Sep 10:04 REC-002.mp3
real 0m2.196s
user 0m2.253s
sys 0m0.061s
So 10 Sep 2023 16:36:44 UTC
-rw-r--r-- 1 root root 3402476 10.Sep 10:04 REC-004.mp3
O arquivo maior termina por último. Eu tenho time
e uma festa list
. Mas sem (...&) também recebo trabalhos "interrompidos" (com variáveis não expandidas).