Java 音频处理,立体声转单声道

2019-09-03 21:05:04 +08:00
 beryl

现在有个需求是: 需要将含有两个 channel 的 wav 文件转为两个单声道文件。使用 ffmpeg 是 ok 的。类似这种命令。

ffmpeg -i test.wav -map_channel 0.0.0 left.wav -map_channel 0.0.1 right.wav

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

但是在 java 里面不知道如何实现,也查了几种方式:

  1. jni 调用 ffmpeg - 成本太大,排除
  2. 调用 ffmpeg - 需要每天机器都要安装

有没有其他方式实现了,没有过多接触过音频处理相关资料

3203 次点击
所在节点    程序员
16 条回复
fgodt
2019-09-03 21:18:11 +08:00
看下 wav 格式就行了,标准的 wav 就解个容器而已
beryl
2019-09-03 21:25:35 +08:00
@fgodt 试了一下不知道为什么,一直失败。
cigarzh
2019-09-03 21:33:01 +08:00
有兴趣就自己造轮子,没兴趣就找个轮子调一调
FrankHB
2019-09-03 21:37:37 +08:00
…… JNI 调用了啥,比命令行调用开销还大?
beryl
2019-09-03 21:42:46 +08:00
@cigarzh 主要是项目需要,暂时没有造轮子需要。 也没找到合适的轮子
beryl
2019-09-03 21:44:03 +08:00
@FrankHB 不是这个意思,是说 1.2 这两个目前都不是太想采用。
jni 是没怎么用过, 命令行是需要每台机器都要安装,因此就排除了
cigarzh
2019-09-03 21:47:04 +08:00
@beryl #5 介不一找一大堆么 https://github.com/sintrb/WaveAccess/ 😂
luozic
2019-09-04 01:24:30 +08:00
ffmpeg 应该有包装好的啊,GitHub 上搜一下。
MMMMMMMMMMMMMMMM
2019-09-04 01:25:23 +08:00
如果场景面向 web

可以在 client 浏览器端跑 js 版的 ffmpeg 来转
lloovve
2019-09-04 07:20:17 +08:00
Pcm 混音啊,简单
beryl
2019-09-04 09:26:04 +08:00
@luozic 确实有不少,但是大多实现都是 jni 或者调用命令行。而且 jni 方式的功能短缺
beryl
2019-09-04 09:26:14 +08:00
@lloovve 请问,怎么个简单呢
lff0305
2019-09-04 09:41:00 +08:00
老早以前做过类似的
记得 WAV 就是 PCM 加上自己的文件头
楼主可以看下 WAV 的格式,记得挺简单的

要么就是 JNI / JNA
wnpllrzodiac
2019-09-04 09:44:56 +08:00
wav 自己处理下,应该很快。私信我有偿帮搞下
jamesliu96
2019-09-04 10:26:49 +08:00
用 sox 和用 ffmpeg 都行,纯 pcm 的话原生都行,用第三方的话调用没问题啊,带个二进制包就行,不用“需要每台机器都要安装”的,很多视频网站都在采用这种解决方案
kitten23
2019-09-04 11:46:48 +08:00
正在重写 jcodec 的路过……
ffmpeg 就是最好的轮子。如果有重来的机会,我肯定写 jni 调 ffmepg 而不是找 jcodec 这种方的轮子。
你要自己造轮子的话,wav 头拿掉,pcm 数据读出来然后手动分一下写 2 个 wav 文件就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX