выполните команду ffmpeg в цикле
У меня 3 .wav-файлы в моей папке, и я хочу их преобразовать .mp3 с ffmpeg Я написал этот сценарий bash, который будет следующим, но когда я его выполню, только первый будет преобразован в mp3 что мне делать, чтобы скрипт продолжал проходить через мои файлы
этот скрипт :
#!/bin/bash
find ./ -name "*.wav" -print | while read f
do
name=${f:2:${#f}-6}
cmd='ffmpeg -i "$name.wav" -ab 320k -ac 2 "$name.mp3"'
eval $cmd<br>
done
3 ответов
Если вам нужен find
(для поиска в подкаталогах или выполнения более расширенной фильтрации) попробуйте следующее:
find ./ -name "*.wav" -exec ffmpeg -i "{}" -ab 320k -ac 2 '$(basename {} wav)'.mp3 \;
трубопровод выход find
до while
loop имеет два недостатка:
- он терпит неудачу в (возможно, редкой) ситуации, когда совпадающее имя файла содержит символ новой строки.
-
ffmpeg
, по какой-то неизвестной мне причине, будет считываться со стандартного ввода, который мешает
использовать -nostdin
флаг в командной строке ffmpeg
ffmpeg -nostdin -i "$name.wav" -ab 320k -ac 2 "$name.mp3"