Конвертировать библиотеку треков WMA в MP3?


28

Я знаю, что есть опции, такие как Sound Converter, для выполнения одной дорожки или каталога за раз, но есть ли инструменты, которые будут рекурсивно сканировать подкаталоги каталога и конвертировать все WMA в MP3?

Я в основном хотел бы освободить его от моей ~ / Music и позволить ему делать свое дело без необходимости вручную предоставлять мне один подкаталог за раз.


Следует отметить, что если в файлах WMA есть DRM, ни одно из приложений Linux не сможет их расшифровать.
Broam

Ответы:


17

MPlayer, вероятно, уже установлен. Также убедитесь, что у вас есть хромать:

sudo apt-get install mplayer lame

Тогда есть два способа сделать это: простая для чтения версия и короткий и грязный скрипт для этого:

Все wma должны быть в вашем текущем каталоге. Создайте файл с именем wmamp3 в вашем домашнем каталоге (~ /), содержащий:

#!/bin/bash

current_directory=$( pwd )

#remove spaces
for i in *.wma; do mv "$i" `echo $i | tr ' ' '_'`; done

#remove uppercase
for i in *.[Ww][Mm][Aa]; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done

#Rip with Mplayer / encode with LAME
for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -ao pcm:waveheader $i && lame -m s audiodump.wav -o $i; done

#convert file names
for i in *.wma; do mv "$i" "`basename "$i" .wma`.mp3"; done

#cleanup
rm audiodump.wav

chmod +x ~/wmamp3 сделать его исполняемым

sudo cp ~/wmamp3 /usr/bin чтобы вставить это где-нибудь полезное на вашем пути

Введите "wmamp3", чтобы запустить преобразование.


Короткая и грязная версия (делает то же самое, что и выше):

for i in *.wma ; do mplayer -vo null -vc dummy -af resample=44100 -ao pcm -ao pcm:waveheader "$i" && lame -m j -h --vbr-new -b 160 audiodump.wav -o "`basename "$i" .wma`.mp3"; done; rm -f audiodump.wav

Спасибо, но мне нужен один, который рекурсивно просматривает каталоги, поскольку они распределены по многим подкаталогам ~ / Music.
Майк Криттенден,

Вы можете легко развернуть скрипт, чтобы выполнить рекурсивную поиск файлов - я бы, вероятно, переделал этот первый скрипт, используя find, передавая вывод в mplayer.
Рори Олсоп

Этот ответ не работает для меня в 2013 году. Однако этот ответ работает: askubuntu.com/a/55469/36661
MountainX

1
Быстрая и грязная версия все еще работает в 2016 году (14.04), если вы замените -ao pcm -waveheaderна -ao pcm:waveheader.
m00am

1
Хорошее скриптовое решение. Работает без изменений в сентябре 2019 года на xubuntu 19.04.
Балу

40

Установите Soundconverter Установите звуковой преобразователь

и запустить Soundconverterиз пусковой установки или терминала

введите описание изображения здесь

Преобразование по умолчанию - .oggизменить это на mp3переход к edit-> preferencesтипу результатов. Formatв MP3 следующим образом:

введите описание изображения здесь

Нажмите добавить папку, а затем выберите свою музыкальную папку. Вы можете выбрать выходную папку в вышеупомянутой конфигурации предпочтений, прежде чем нажимать на конвертировать.

Надеюсь, что это будет сделано в два клика :)


2
Это, безусловно, простая точка и нажмите. +1 от меня :-)
Рори Олсоп

Проблема с этим решением заключается в том, что SoundConverter работает очень медленно или просто зависает, когда добавляется более двухсот песен одновременно, а моя библиотека имеет около 5 КБ.
Майк Криттенден

5k? это очень много;) в любом случае, это зависит от производительности вашего компьютера. может быть, вы должны разделить эти файлы. Лично я конвертировал пару сотен песен без каких-либо зависаний :)
Achu

13

Mplayer и lame должны быть установлены первыми:

sudo apt-get install mplayer lame

Затем создайте скрипт ( справочную страницу ) и выполните его:

#!/bin/bash
# By Marko Haapala
# converts wma to mp3 recursively. does not delete any static files, so 
# cleanup and renaming is needed afterwards. 
#
# requirements:
# lame    - http://lame.sourceforge.net/download.php
# mplayer - apt-get install mplayer or http://www.mplayerhq.hu/design7/dload.html


current_directory=$(pwd)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
IFS=$'\n' 
for wma_file in ${wma_files}; do 
    mplayer -vo null -vc dummy -af resample=44100 \
    -ao pcm -ao pcm:waveheader "${wma_file}" && lame -m s \
    audiodump.wav -o "${wma_file}".mp3
    rm audiodump.wav
done

Похоже, он делает именно то, что вы хотите. Имейте в виду, что вы можете поиграть с хромыми флагами, чтобы получить желаемый уровень качества.


3
Это все еще хорошо работает в 2013 году
MountainX

@ Дэвид Футчер, упоминание упоминания - хорошая привычка :-), спасибо!
AjayKumarBasuthkar

2

Установите Perl Audio Converter (pacpl): sudo apt-get install pacpl

Эта команда преобразует все файлы wma в данном каталоге в файлы mp3 (оставляя оригиналы без изменений):

pacpl -r -to mp3 -only wma <directory name>

Если вы чувствуете себя рискованно, вы можете добавить --deleteопцию удаления оригиналов:

pacpl -r --delete -to mp3 -only wma <directory name>я


2

Я знаю, что это немного устарело, но я изменил сценарий, показанный Дэвидом Фатчером. Изменения:

  • Используйте /tmpвместо текущей папки для временного файла WAV (это дало большое ускорение, когда я использовал это для преобразования файлов на USB-накопитель).

  • Удалите файлы wma после того, как они (надеюсь, успешно) были преобразованы.

Вот:

#!/bin/bash
# By Marko Haapala
# converts wma to mp3 recursively. does not delete any static files, so
# cleanup and renaming is needed afterwards.
#
# Modified by V10lator
# to delete the wma files and to use /tmp for temporary files
#
# requirements:
# lame    - http://lame.sourceforge.net/download.php
# mplayer - apt-get install mplayer or http://www.mplayerhq.hu/design7/dload.html


current_directory=$(pwd)
tmp_file=$(mktemp -t -u --suffix=.wav)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
IFS=$'\n' 
for wma_file in ${wma_files}; do 
    mplayer -vo null -vc dummy -af resample=44100 \
    -ao pcm -ao pcm:waveheader -ao pcm:file="${tmp_file}" \
    "${wma_file}" && lame -m s "${tmp_file}" \
    -o "${wma_file}".mp3 && rm "${wma_file}"
    rm "${tmp_file}"
done

последние две строки можно объединить :-) -o "${wma_file}".mp3 && rm "${wma_file}" "${tmp_file}" это немного увеличит скорость обработки, так как отсутствует другой exec для rm.
AjayKumarBasuthkar

1

Для тех, кто ищет версию графического интерфейса, которая может выбирать определенные типы файлов: инструмент KDE soundKonverter https://github.com/HessiJames/soundkonverter спрашивает, какие типы файлов должны быть добавлены в очередь бесед.

Лучшее решение для моей огромной коллекции Audiobook, содержащей файлы mp3 / ogg / wma.


1

Вот моя редакция сценария Марко Хаапала с использованием ffmpeg:

current_directory=$(pwd)
wma_files=$(find "${current_directory}" -type f -iname "*.wma")
# Need to change IFS or files with filenames containing spaces will not
# be handled correctly by for loop
# Also, it must be run as root to correctly handle spaces on Ubuntu 16
IFS=$'\n'
for wma_file in ${wma_files}; do
 ffmpeg -i "${wma_file}" -q:a 0 "${wma_file}".mp3
 #uncomment rm below to delete original wma's
 #rm "${wma_file}"
done

Я предпочитаю ffmpeg, потому что он не меняет частоту дискретизации и ему не нужен промежуточный временный файл


0

Soundcoverter показывает ошибку что-то о модуле Windows Media и Python 2.7

Avconv работал нормально: avconv -i ./song.wma song.mp3


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.