如何並行運行即時 ffmpeg(管道)轉換?

如何並行運行即時 ffmpeg(管道)轉換?

我想做以下轉換:

for f in *.m4a; do 
    (  ffmpeg -i "$f" -f wav - | opusenc --bitrate 38 - "${f%.m4a}.opus" ) & 
done

我知道我可以使用ffmpeg直接轉換為作品,但我想使用奧普森克在這種情況下,因為它是較新的版本。

當我在 ffmpeg 之後運行 opusenc 時,它工作正常,但是當我嘗試運行上面的內容時,我只是得到一堆Stopped,但沒有任何反應。

答案1

如果您使用 GNU Parallel 那麼這有效:

parallel 'ffmpeg -i {} -f wav - | opusenc --bitrate 38 - {.}.opus' ::: *m4a

也許這已經夠好了?

它還有一個額外的好處,即每個 cpu 線程只運行 1 個作業,因此如果您有 1000 個文件,您的機器不會過載。

答案2

我想出了這個結構(... &),但我不確定為什麼它有效:

for f in R*.mp3
do
  (time ffmpeg -loglevel 0 -i "$f" -ac 1 -y "${f%mp3}new.mp3" && date && ls -l "$f" &)
done

有 4 個文件:

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

最大的文件最後結束。我有time一個bash- list。但如果沒有 (...&) 我也會得到「停止」的作業(有未展開的變數)。

相關內容