答案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
。但如果没有 (...&) 我也会得到“停止”的作业(带有未展开的变量)。