答え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
。ただし、(...&) が存在しない場合は、(拡張されていない変数がある)「停止」操作も発生します。