通过命令行将立体声音频文件转换为左声道输出

3
假设我有一堆mp3文件。如何使用音频软件命令行工具完全降低音频文件(右侧)的音量,使音频文件左侧保持完整?然后,我想将此文件保存为新的mp3文件。这需要完全在命令行中完成。
另一种方法是,是否可以使用命令行音频文件工具将立体声mp3文件转换为单声道,然后将此单声道文件与长度相同的“静音”轨道合并,从而创建一个带有声音的左耳机轨道和一个带有沉默的右耳机轨道?
在这个SO问题中,似乎有很多方法可以实现一个相当古怪的目标。在第一种可能的解决方案中,我只想降低右侧的音量。在第二种可能的解决方案中,我想结合一些更常见的步骤来实现相同的最终结果。
问题在于:
- 我找不到一个好的命令行工具来修改音频文件,即使是进行第二种应该是更常见的请求。 - 我预计我首先需要将mp3文件转换为wav,使用类似或第二个工具 - 这个查询很奇特,所以网络上没有太多相关链接。
感谢任何帮助。通常Audacity是我的首选,但它似乎只能使用GUI。

欢迎来到StackOverflow。当你遇到难题(例如可复现的问题)时,在这里发问。尝试下载适用于Linux的FFmpeg(获取静态构建/应用程序,而不是C++代码库)。有许多音频编辑教程(包括静音一个通道)。 - VC.One
2个回答

6

SoX 很容易地让你做到这一点。
第一个情况,右声道静音:

sox test.mp3 test-rmuted.mp3 remix 1 0

第二种情况,左声道上的单声道总和:
sox test.mp3 test-lmono.mp3 remix 1,2 0

要批量处理,您可以使用简单的for循环。
静音右声道:
for f in *.mp3
do
  basename="${f%.*}"
  echo "$basename"
  sox "$f" -t wav - remix 1 0 | \
    lame --preset standard - "00-${basename}-rmute".mp3
done

仅左声道上的总和单声道:

for f in *.mp3
do
  basename="${f%.*}"
  echo "$basename"
  sox "$f" -t wav - remix 1,2 0 | \
    lame --preset standard - "00-${basename}-lmono".mp3
done

你可以放弃使用LAME,像前两个例子一样使用SoX进行编码,但我发现这种方法更简单、更灵活。

1

如评论中建议的那样,您可以使用FFmpeg处理音频文件。直接删除一个声道会产生与先转换为单声道不同的结果。但是,我认为两种方式都可以通过FFMpeg中的pan滤镜来实现。

https://trac.ffmpeg.org/wiki/AudioChannelManipulation

https://ffmpeg.org/ffmpeg-filters.html#pan

一个声道的衰减

  • 将mp3文件解码为wav文件
  • 使用平移滤镜100%应用到一个声道,创建一个新的立体声wav文件
  • 将生成的wav文件编码为mp3文件

将两个声道均匀混合到一个声道中,然后衰减另一个声道

  • 将mp3文件解码为wav文件
  • 使用平移滤镜,在一个声道上50%左声道和50%右声道,另一个声道增益为0,创建一个新的wav文件
  • 将生成的wav文件编码为mp3文件

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接