¿Convertir biblioteca de pistas WMA a MP3?

28

Sé que hay opciones como Sound Converter para hacer una pista o directorio a la vez, pero ¿hay alguna herramienta que rastree recursivamente los subdirectorios de un directorio y convierta todos los WMA a MP3?

Básicamente, me gustaría soltarlo en mi ~ / Música y dejar que haga lo suyo sin que tenga que darle manualmente un subdirectorio a la vez.

Mike Crittenden
fuente
Como nota, si algún archivo WMA tiene DRM, ninguna aplicación de Linux podrá descifrarlo.
Broam

Respuestas:

17

Es probable que MPlayer ya esté instalado. También asegúrese de tener cojo:

sudo apt-get install mplayer lame

Luego hay dos formas de hacerlo, una versión fácil de leer y un script corto y sucio para hacerlo:

Todos los wma deben estar en su directorio actual. Cree un archivo llamado wmamp3 en su directorio de inicio (~ /) que contenga:

#!/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 para hacerlo ejecutable

sudo cp ~/wmamp3 /usr/bin para que aparezca en algún lugar útil en tu camino

Escriba "wmamp3" para ejecutar su conversión.


La versión corta y sucia (hace exactamente lo mismo que arriba):

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
Rory Alsop
fuente
Gracias, pero necesito uno que revise los directorios de forma recursiva, ya que están distribuidos en muchos subdirectorios de ~ / Music.
Mike Crittenden
Puede expandir fácilmente el script para hacer una búsqueda recursiva de archivos; probablemente rehacería ese primer script usando find, canalizando la salida a mplayer.
Rory Alsop
Esta respuesta no me funciona en 2013. Sin embargo, esta respuesta funciona: askubuntu.com/a/55469/36661
MountainX
1
La versión rápida y sucia todavía funciona en 2016 (en 14.04) si la reemplaza -ao pcm -waveheadercon -ao pcm:waveheader.
m00am
1
Buena solución con guión. Funciona sin modificaciones en septiembre de 2019 en xubuntu 19.04.
Balu
40

Instalar Soundconverter Instalar convertidor de sonido

y correr Soundconverterdesde el lanzador o terminal

ingrese la descripción de la imagen aquí

La conversión predeterminada es .oggcambiar esto para mp3ir edit-> preferencesdebajo del tipo de resultados. Formata MP3 de la siguiente manera:

ingrese la descripción de la imagen aquí

Haga clic en agregar carpeta y luego seleccione su carpeta de música. Puede seleccionar la carpeta de salida en la configuración de preferencias anterior antes de hacer clic en convertir.

Espero que esto se haga con dos clics :)

Achu
fuente
2
Esto es ciertamente simple señalar y hacer clic. +1 de mi parte :-)
Rory Alsop
El problema con esta solución es que SoundConverter funciona extremadamente lento o simplemente se congela por completo cuando se agregan más de un par de cientos de canciones a la vez, y mi biblioteca tiene alrededor de 5k.
Mike Crittenden
5k? wooo eso es mucho;) de todos modos depende del rendimiento de su computadora. puede ser que tengas que separar esos archivos. personal, convertí un par de cientos de canciones sin congelaciones :)
Achu
13

Mplayer y lame deben instalarse primero:

sudo apt-get install mplayer lame

Luego cree el script ( página de referencia ) y ejecútelo:

#!/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

Parece que hace exactamente lo que quieres. Tenga en cuenta que es posible que desee jugar con las banderas poco convincentes para asegurarse de obtener el nivel de calidad deseado.

David Futcher
fuente
3
Esto todavía funciona bien en 2013
MountainX
@David Futhcher, mencionar la referencia es un buen hábito :-), ¡gracias!
AjayKumarBasuthkar
2

Instale el convertidor de audio Perl (pacpl): sudo apt-get install pacpl

Este comando convertirá todos los archivos wma en un directorio dado a archivos mp3 (dejando los originales intactos):

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

Si se siente arriesgado, puede agregar la --deleteopción de eliminar también los originales:

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

Eric Mathison
fuente
2

Sé que esto es un poco viejo, pero modifiqué el script que muestra David Futcher. Los cambios son:

  • Use en /tmplugar de la carpeta actual para el archivo wav temporal (esto dio una gran velocidad cuando lo usé para convertir archivos en una memoria USB).

  • Elimine los archivos wma después de que se hayan convertido (con suerte).

Aquí está:

#!/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
V10lator
fuente
se pueden combinar las dos últimas líneas :-) -o "${wma_file}".mp3 && rm "${wma_file}" "${tmp_file}" esto aumentaría ligeramente la velocidad de procesamiento ya que falta otro ejecutivo para rm.
AjayKumarBasuthkar
1

Para aquellos que buscan una versión GUI que sea capaz de seleccionar ciertos tipos de archivos: la herramienta KDE soundKonverter https://github.com/HessiJames/soundkonverter pregunta qué tipos de archivos deben agregarse a la cola de conversación.

La mejor solución para mi enorme colección de audiolibros que contiene archivos mp3 / ogg / wma.

tuxflo
fuente
1

Aquí está mi edición del script Marko Haapala, usando 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

Prefiero ffmpeg, porque no cambia la frecuencia de muestreo y no necesita un archivo temporal intermedio

Slavik
fuente
0

Soundcoverter muestra un error relacionado con el módulo de Windows Media y Python 2.7

Avconv funcionó bien: avconv -i ./song.wma song.mp3

mapcuk
fuente