Convertire la libreria di brani WMA in MP3?


28

So che ci sono opzioni come Sound Converter per farle una traccia o una directory alla volta, ma ci sono strumenti che possono ricorrere in modo ricorsivo alle sottodirectory di una directory e convertire tutti i WMA in MP3?

Fondamentalmente vorrei lasciarlo perdere sul mio ~ / Music e lasciarlo fare la sua cosa senza che io debba dargli manualmente una sottodirectory alla volta.


Ad ogni modo, se qualche file WMA ha DRM su di essi, nessuna applicazione Linux sarà in grado di decodificarli.
Broam

Risposte:


17

È probabile che MPlayer sia già installato. Assicurati anche di avere zoppo:

sudo apt-get install mplayer lame

Quindi ci sono due modi per farlo, una versione di facile lettura e uno script breve e sporco per farlo:

Tutti i wma dovrebbero essere nella tua directory corrente. Crea un file chiamato wmamp3 nella tua home directory (~ /) contenente:

#!/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 per renderlo eseguibile

sudo cp ~/wmamp3 /usr/bin per farlo apparire in qualche posto utile sul tuo percorso

Digita "wmamp3" per eseguire la conversione.


La versione corta e sporca (fa esattamente come sopra):

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

Grazie, ma ne ho bisogno di uno che ricorre ricorsivamente alle directory, poiché sono sparse in molte sottodirectory di ~ / Music.
Mike Crittenden,

Puoi facilmente espandere lo script per fare una caccia ai file ricorsiva - probabilmente rifarei quel primo script usando find, reindirizzando l'output a mplayer.
Rory Alsop,

Questa risposta non funziona per me nel 2013. Tuttavia questa risposta funziona: askubuntu.com/a/55469/36661
MountainX

1
La versione più veloce funziona ancora nel 2016 (il 14.04) se si sostituisce -ao pcm -waveheadercon -ao pcm:waveheader.
m00am

1
Buona soluzione con script. Funziona senza modifiche a settembre 2019 su xubuntu 19.04.
Balu,

40

Installa SoundConverter Installa il convertitore audio

ed esegui Soundconverterdal programma di avvio o dal terminale

inserisci qui la descrizione dell'immagine

La conversione predefinita è .oggcambiarla in mp3andando edit-> preferencessotto il tipo di risultati. Formatin MP3 come segue:

inserisci qui la descrizione dell'immagine

Fare clic su Aggiungi cartella e quindi selezionare la cartella della musica. È possibile selezionare la cartella di output nella configurazione delle preferenze sopra prima di fare clic su Converti.

Spero che ciò avvenga con due clic :)


2
Questo è certamente semplice punta e clicca. +1 da parte mia :-)
Rory Alsop,

Il problema con questa soluzione è che SoundConverter si comporta in modo estremamente lento o si blocca completamente quando vengono aggiunte più di duecento canzoni contemporaneamente e la mia libreria ha circa 5k.
Mike Crittenden,

5k? che è molto;) comunque dipende dalle prestazioni del tuo computer. potrebbe essere necessario separare quei file. personale ho convertito un paio di centinaia di canzoni senza alcun blocco :)
Achu

13

Mplayer e lame devono prima essere installati:

sudo apt-get install mplayer lame

Quindi creare lo script ( pagina di riferimento ) ed eseguirlo:

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

Sembra che faccia esattamente quello che vuoi. Tieni presente che potresti voler giocherellare con le bandiere zoppo per assicurarti di ottenere il livello di qualità desiderato.


3
Funziona ancora bene nel 2013
MountainX

@ David Futhcher, menzionare il riferimento è una bella abitudine :-), grazie!
AjayKumarBasuthkar,

2

Installa Perl Audio Converter (pacpl): sudo apt-get install pacpl

Questo comando converte tutti i file wma in una determinata directory in file mp3 (lasciando intatti gli originali):

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

Se ti senti rischioso puoi aggiungere l' --deleteopzione per rimuovere anche gli originali:

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


2

So che è un po 'vecchio ma ho modificato la sceneggiatura mostrata da David Futcher. Le modifiche sono:

  • Usa /tmpinvece della cartella corrente per il file wav temporaneo (questo ha dato una grande velocità quando l'ho usato per convertire i file su una chiavetta USB).

  • Rimuovere i file wma dopo che sono stati (si spera con successo) convertiti.

Ecco qui:

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

le ultime due righe possono essere unite :-) -o "${wma_file}".mp3 && rm "${wma_file}" "${tmp_file}" questo aumenterebbe leggermente la velocità di elaborazione in quanto un altro dirigente per rm è assente.
AjayKumarBasuthkar,

1

Per coloro che sono alla ricerca di una versione della GUI in grado di selezionare determinati tipi di file: lo strumento KDE soundKonverter https://github.com/HessiJames/soundkonverter chiede quali tipi di file devono essere aggiunti alla coda di conversazione.

La migliore soluzione per la mia vasta collezione di audiolibri contenente file mp3 / ogg / wma.


1

Ecco la mia edizione dello 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

Preferisco ffmpeg, perché non cambia la frequenza di campionamento e non ha bisogno di un file temporaneo intermedio


0

Soundcoverter mostra un errore relativo al modulo Windows Media e Python 2.7

Avconv ha funzionato bene: avconv -i ./song.wma song.mp3


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.