выполните команду 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"