为了连接多个音频文件并将它们输出为一个 ogg(和/或 mp3),我需要哪些命令行工具?
如果您可以提供完整的命令来连接并输出到 ogg,那就太棒了。
编辑:输入文件(就我的情况而言,目前)是wma
格式,但理想情况下它应该足够灵活以支持各种流行的格式。
編輯2:澄清一下,我不想合并全部 wma
在某个目录中,我只想将 2 个或 3 个文件连接成一个。
感谢您提出的解决方案,但它们似乎都需要创建临时文件,如果可能的话,我想避免这种情况。
答案1
这是我的建议:使用mplayer 和 oggenc与命名管道连接。
用于
mplayer
解码音频。它可以播放多种音频(和视频)格式,也可以播放多个文件。用于
oggenc
将音频编码为 Ogg Vorbis。为了消除对临时文件的需要,请使用命名管道 在编码器和解码器之间传输数据。
将其放入脚本中:
#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "$@" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"
解释:
- 从第一个命令行参数中获取目标文件名。
- 删除第一个命令行参数,只保留源文件名。
- 为 oggenc 读取的管道创建一个名称。
- 为 mplayer 写入的管道创建名称
- 创建管道。
- 使用 cat 不断将写入管道转储到读取管道(这有助于避免 mplayer 可能终止的问题,但会阻止 oggenc 在发生这种情况时认为它已经完成)
- 使用 mplayer 解码源文件中的音频。
-really-quiet -slave -nolirc
有选项可以禁用消息并使其不读取键盘或遥控器。-vc null -vo null
有选项可以禁用视频编码和输出。该-ao
选项指示它将 WAV 格式的音频输出到命名的写入管道。 - 在上一个命令运行时,同时使用 oggenc 从命名读取管道编码到 Ogg。
- 删除命名管道。
尚待改进的地方:如果其中一个命令失败则提前终止脚本(使用set -e
),但仍然正确清理 fifo(捕获必要的信号)。
答案2
答案3
我会用ffmpeg。要将 wma 转换为 ogg vorbis,请尝试:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
或 mp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
您需要安装 lame 来进行 mp3 转换。sudo apt-get install lame libmp3lame0
Cat,然后转换似乎效果不佳,尽管您可以在网上找到很多参考资料,说您可以做类似的事情cat *.wma | ffmpeg -i - -acodec ...
- 这在我的计算机上不起作用 - 仅处理第一个文件。ffmpeg 有一个“复制”编解码器,但没什么区别。
首先使用 ffmpeg 进行转换,然后 cat *.ogg > output.ogg 对我有用。