如何使用 Ffmpeg 递归地将 wma 转换为 mp3,从 txt 文件导入?

CaR*_*oXo 11 command-line convert ffmpeg mp3 wma

我尝试了论坛中的不同选项,但其中大多数都已过时(ffmpeg 告诉我有关它的信息,例如使用 -sameq 选项)。我试图理解文档,但我不能。

我想知道如何使用 ffmpeg 递归地将 wma 转换为 mp3,例如输出中的最大比特率为 192kbps(但如果原始比特率为 128kbps,则不是 192)

我有除非 14K wma 文件分布在许多目录中。所以,我不想移动它们。只需转换它们,保留文件名和元数据,然后删除它们,如果可以读取要从我可以创建的 txt 文件转换的文件列表,每行一个文件。有了这个,我将设法进行递归搜索,粘贴进去。

谢谢你的帮助。更感谢您对 Ffmpeg 的任何解释。

卡罗素

PS:Soundconverter 曾经很好,但速度很慢。现在两者都不是。在许多情况下,在 14.04 中不起作用,就像我的一样。我正在使用 Soundkonverter,但速度很慢。所以,这一切都是为了防止这个建议。而且我想学习使用这个强大的ffmpeg!和 CLI

注意:下面的脚本在第一次转换中工作。但是出于我无法解释的任何原因,突然删除了转换中的wma,而没有留下mp3。因此,我再次更改为“未解决”(以防止其他人偶尔出现问题)。问题似乎来自 avconv “应用程序在流 0 中向多路复用器提供了无效的、非单调递增的 dts:23606 >= 21720”(如果有人对开发此错误感兴趣,则在评论中有粘贴箱)。所以,未来没有avconv。

小智 26

这是我在 brew 没有 avconv 的 Mac 上用于 ffmpeg 当前目录中的所有文件的命令(如果名称中有空格则有效):

for file in *.wma; do ffmpeg -i "${file}"  -acodec libmp3lame -ab 192k "${file/.wma/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)


The*_*hwa 9

在终端中,首先使用 浏览到包含所有音乐的文件夹,cd例如:

cd /home/username/music/wma-to-convert
Run Code Online (Sandbox Code Playgroud)

以下将列出当前文件夹中的所有文件以及以“wma”结尾的所有子文件夹,并将该列表存储在名为 的文本文档中wma-files.txt

find . -type f | grep wma$ > wma-files.txt
Run Code Online (Sandbox Code Playgroud)

或者您可以根据需要手动创建文本文件。然后在文本编辑器中键入以下内容并将其保存在 的同一目录中wma-files.txt,例如将其命名为conv-script

cd /home/username/music/wma-to-convert
Run Code Online (Sandbox Code Playgroud)

您可能必须在脚本上设置可执行位:

chmod +x conv-script

然后运行它:

./conv-script
Run Code Online (Sandbox Code Playgroud)

您还可以选择将其添加到ffmpeg行尾,但要小心:

 && rm "$file"
Run Code Online (Sandbox Code Playgroud)

对于那些无法访问 avprobe 的人,您可以使用 ffprobe,它可以执行等效操作(即获取 bit_rate)。要做到这一点:

代替:

probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:bit_rate=\([0-9]\+\)[0-9]\{3\}:\1:" | head -1`
Run Code Online (Sandbox Code Playgroud)

和:

rate=`ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$file"`
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您的所有文件都应开始转换,wma 原件应被删除!这对我将 flac 文件转换为 mp3 非常有用。不幸的是,我没有任何 wma 可以测试,但我希望它对那些也应该很好。

注意:虽然我没有预见到任何问题,但最好将一些文件复制到一个新目录并在它们上进行测试。

如果您打算经常将 Wma 转换为 mp3,下面的脚本会自动转换并删除作为参数给出的文件夹中的所有内容,它对上述内容有所改进。另外,ffmpeg 命令与第一个建议的有点不同,如果第一个不起作用,请使用下面的一个。

find . -type f | grep wma$ > wma-files.txt
Run Code Online (Sandbox Code Playgroud)

然后,您只需在终端中键入以下内容即可调用它:

./convScript /home/username/music
Run Code Online (Sandbox Code Playgroud)

因此,所有音乐文件夹及其子文件夹都将自动将其 wma 音乐转换为 mp3。

和以前一样,您可以将此添加到ffmpeg行尾以删除文件:

&& rm "$file"
Run Code Online (Sandbox Code Playgroud)

编辑(2017/06/23):不要rm设置默认值