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)
在终端中,首先使用 浏览到包含所有音乐的文件夹,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设置默认值