Преобразование *.wma в *.mp3 SHELL-скриптом с помощью mplayer, lame и find

Я хочу преобразовать свои старые файлы *.wma в *.mp3. Для этой цели я нашел короткий скрипт для конвертации с помощью mplayer + lame (найден здесь: https://askubuntu.com/questions/508625/python-v2-7-requires-to-install-plugins-to-play-media-files-of-the-following-t).

Это отлично работает в одном каталоге. Теперь я хотел улучшить его таким образом, чтобы он мог работать с «найти». Он предназначен для поиска *.wma-файла и последующего вызова скрипта для преобразования этого файла в *.mp3.

Вот сценарий:

FILENAME=$1
FILEPATH="$(dirname $1)"
BASENAME="$(basename $1)"

mplayer -vo null -vc dummy -af resample=44100 -ao pcm:waveheader "$FILENAME"
lame -m j -h --vbr-new -b 320 audiodump.wav -o "`basename "$FILENAME" .wma`.mp3"
echo "Path: $FILEPATH" # just to see if its correct
echo "File: $BASENAME" # just to see if its correct
rm -f audiodump.wav
rm -f "$FILENAME"

На данный момент я занимаюсь проблемой, что скрипт помещает конвертированный *.mp3 в каталог, с которым работает консоль (например, /home/user/ вместо /home/user/files/, где *.wma происходит от).

Что я могу сделать, чтобы сценарий поместил новый *.mp3 в тот же каталог, что и *.wma? Если я хочу использовать «mv» в сценарии, у меня возникнут проблемы со встроенными пробелами в именах файлов *.wma.

Спасибо за любые подсказки. Я думал о том, чтобы установить для IFS значение табуляции или новой строки, но меня больше беспокоит, есть ли лучший способ справиться с этим.


person lshw    schedule 05.01.2016    source источник


Ответы (2)


Проблема в том, что basename удаляет как расширение .wma, и путь, ведущий к файлу. И тебе нужна только .wma раздевание.

Таким образом, ответ заключается в том, чтобы не использовать basename, а вместо этого просто выполнить .wma зачистку самостоятельно (с помощью Расширение параметра).

outfile=${FILENAME%.wma}
lame -m j -h --vbr-new -b 320 audiodump.wav -o "$outfile.mp3"

(Обратите внимание, что я использовал строчные буквы $outfile. Обычно переменные $ALL_CAPS зарезервированы для оболочки/терминала/среды, и их следует избегать в сценариях.)

person Etan Reisner    schedule 05.01.2016

Вот что-то, что использует ffmpeg для преобразования (после использования ffprobe для выяснения того, каким должен быть бит_рейт). Он основан на том, что я нашел в (https://askubuntu.com/questions/508278/how-to-use-ffmpeg-to-convert-wma-to-mp3-recursively-importing-from-txt-file). Но у меня не было доступа к avprobe, поэтому пришлось искать альтернативу.

Сначала перейдите в каталог со всеми вашими файлами и запустите в своей оболочке следующее:

find . -type f | grep wma$ > wma-files.txt

Как только это будет сделано, вы можете поместить это в скрипт и запустить его:

#!/usr/bin/env bash

readarray -t files < wma-files.txt

ffprobe=<your_path_here>/ffprobe
ffmpeg=<your_path_here>/ffmpeg
for file in "${files[@]}"; do
    out=${file%.wma}.mp3
    bit_rate=`$ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$file"`
    $ffmpeg -i "$file" -vn -ar 44100 -ac 2 -ab "$bit_rate" -f mp3 "$out"
done

Это сохранит файлы mp3 вместе с файлами wma.

person Rajiv Bharadwaja    schedule 23.06.2017