![Как запустить параллельное преобразование ffmpeg (pipe) «на лету»?](https://rvso.com/image/154453/%D0%9A%D0%B0%D0%BA%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20ffmpeg%20(pipe)%20%C2%AB%D0%BD%D0%B0%20%D0%BB%D0%B5%D1%82%D1%83%C2%BB%3F.png)
Я хочу сделать следующее преобразование:
for f in *.m4a; do
( ffmpeg -i "$f" -f wav - | opusenc --bitrate 38 - "${f%.m4a}.opus" ) &
done
Я знаю, что мне бы это пригодилось.ffmpegнапрямую преобразовать в opus, но я хочу использоватьopusencв данном случае, так как это более новая версия.
Когда я запускаю opusenc после ffmpeg, все работает нормально, но когда я пытаюсь запустить вышеуказанное, я получаю кучу ошибок Stopped
и ничего не происходит.
решение1
Если вы используете GNU Parallel, то это работает:
parallel 'ffmpeg -i {} -f wav - | opusenc --bitrate 38 - {.}.opus' ::: *m4a
Может быть, этого достаточно?
Дополнительным преимуществом является то, что он выполняет только 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
. Но без (...&) я также получаю "Остановленные" задания (с нераскрывающимися переменными).