V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
beryl
V2EX  ›  程序员

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

  •  
  •   beryl · 2019-09-03 21:05:04 +08:00 · 3399 次点击
    这是一个创建于 1908 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个需求是: 需要将含有两个 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 - 需要每天机器都要安装

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

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

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

    要么就是 JNI / JNA
    wnpllrzodiac
        14
    wnpllrzodiac  
       2019-09-04 09:44:56 +08:00 via Android
    wav 自己处理下,应该很快。私信我有偿帮搞下
    jamesliu96
        15
    jamesliu96  
       2019-09-04 10:26:49 +08:00 via Android
    用 sox 和用 ffmpeg 都行,纯 pcm 的话原生都行,用第三方的话调用没问题啊,带个二进制包就行,不用“需要每台机器都要安装”的,很多视频网站都在采用这种解决方案
    kitten23
        16
    kitten23  
       2019-09-04 11:46:48 +08:00
    正在重写 jcodec 的路过……
    ffmpeg 就是最好的轮子。如果有重来的机会,我肯定写 jni 调 ffmepg 而不是找 jcodec 这种方的轮子。
    你要自己造轮子的话,wav 头拿掉,pcm 数据读出来然后手动分一下写 2 个 wav 文件就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:12 · PVG 04:12 · LAX 12:12 · JFK 15:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.