将WMA曲目库转换为MP3?


28

我知道有一些选项,例如Sound Converter,可以一次将它们放在一个轨道或目录中,但是是否有任何工具可以递归地浏览目录的子目录并将所有WMA转换为MP3?

我基本上想让它在我的〜/ Music上松散,并让它完成它的工作,而无需我手动一次给它一个子目录。


值得注意的是,如果任何WMA文件上都带有DRM,则任何Linux应用程序都无法对其解密。
出生

Answers:


17

MPlayer可能已经安装。还请确保您有la脚:

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的许多子目录散布的。
Mike Crittenden

您可以轻松地扩展脚本来执行递归文件搜寻-我可能会使用find重做第一个脚本,并将输出传递到mplayer。
罗里·阿尔索普

这个答案在2013年不适用于我。但是这个答案有效:askubuntu.com/a/55469/36661
MountainX

1
如果您将替换为-ao pcm -waveheader,则该快捷版本仍可在2016年(14.04版)上使用-ao pcm:waveheader
m00am,2013年

1
好的脚本解决方案。于2019年9月在xubuntu 19.04上不做任何修改。
Balu

40

安装Soundconverter 安装声音转换器

Soundconverter从启动器或终端运行

在此处输入图片说明

默认的转换是.ogg改变这mp3edit-> preferences根据类型的结果。Format到MP3,如下所示:

在此处输入图片说明

单击添加文件夹,然后选择您的音乐文件夹。您可以在单击“转换”之前,在上述首选项配置中选择输出文件夹。

希望这将通过两次单击来完成:)


2
这当然是简单的指向和点击。从我+1 :-)
罗里·阿尔索普

这种解决方案的问题在于,一次添加两百多首歌曲时,SoundConverter的执行速度非常慢,或者完全冻结,而我的音乐库大约只有5k。
Mike Crittenden

5k?wooo很多;)无论如何,这取决于您的计算机性能。可能是您必须分开这些文件。我个人转换了几百首歌曲,没有任何冻结:)
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

看起来它确实可以满足您的要求。请记住,您可能想要摆弄the脚的标志,以确保获得所需的质量水平。


3
这在2013
MountainX

@David Futhcher,提及参考是好习惯:-),谢谢!
AjayKumarBasuthkar '18

2

安装Perl音频转换器(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

我知道这有点旧,但是我修改了David Futcher展示的脚本。更改为:

  • 使用/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}" 这将显着提高处理速度,因为缺少rm的另一个exec。
AjayKumarBasuthkar '18

1

对于那些正在寻找能够选择某些文件类型的GUI版本的用户:KDE工具soundKonverter https://github.com/HessiJames/soundkonverter询问应将哪些文件类型添加到对话队列中。

我庞大的包含mp3 / ogg / wma文件的有声读物收藏的最佳解决方案。


1

这是我使用ffmpeg编写的Marko Haapala脚本版本:

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.