【问题标题】:gstreamer split multi-channel wav file into separate channels and encode each channel as mp3, alac etc and save to filegstreamer 将多通道 wav 文件拆分为单独的通道并将每个通道编码为 mp3、alac 等并保存到文件
【发布时间】:2014-02-07 05:02:13
【问题描述】:

我需要拆分一个多声道的wav文件,并将每个声道编码成mp3文件。

我知道 gtresamer 的 deinterleave 插件,但我不确定如何将它用于 wav 文件以及如何对频道流进行编码。

我更喜欢基于 gtreamer(或 ffmpeg)的解决方案,因为我需要限制 I/O。即,我不希望将中间单通道 wav 文件写入存储。

ffmpeg 可用于this way。但是,ubuntu ffmpeg 中没有这两个开关。

snsonic 的解决方案抛出以下错误:

(gst-launch-0.10:2218): GStreamer-WARNING **: Failed to load plugin '/usr/lib/gstreamer-0.10/libgstpng.so': libpng12.so.0: cannot open shared object file: No such file or directory

Setting pipeline to PAUSED ...

Pipeline is PREROLLING ...

ERROR: from element /GstPipeline:pipeline0/GstWavParse:wavparse0: Internal data flow error.

Additional debug info:

gstwavparse.c(1982): gst_wavparse_loop (): /GstPipeline:pipeline0/GstWavParse:wavparse0:

streaming task paused, reason not-linked (-1)

ERROR: pipeline doesn't want to preroll.

Setting pipeline to NULL ...

Freeing pipeline ...



    (gst-launch-0.10:2218): GStreamer-CRITICAL **: gst_caps_unref: assertion `GST_CAPS_REFCOUNT_VALUE (caps) > 0' failed    

当我使用没有去交错的单通道 wav 文件进行测试时,创建了 mp3 文件但它只有噪音。

【问题讨论】:

    标签: audio mp3 wav gstreamer


    【解决方案1】:

    你提前知道频道的数量吗? 如果你使用 gst-launch,你可以做类似的事情:

    gst-launch-1.0 filesrc location="xx.wav" ! wavparse ! deinterleave name=d \
      d.src_01 ! <encoder> ! filesink location="out1.mp3" \
      d.src_02 ! <encoder> ! filesink location="out2.mp3"
    

    等等。如果事先不知道通道数,则需要编写一些代码。

    【讨论】:

      【解决方案2】:

      FFmpeg 可能会满足您的要求。

      【讨论】:

        【解决方案3】:

        您不必事先知道 wav 文件有多少个频道。 您需要安装 sox

        #!/bin/bash
        INPUT=$1
        
        fbname=$(basename "$INPUT" .wav)
        
        N=`soxi -c $INPUT`
        
        for i in $(seq 1 $N)
        do
            sox ${INPUT} "${fbname}-${i}.wav" remix $i
            avconv -i "${fbname}-${i}.wav" -f mp2 "${fbname}-${i}.mp3"
            rm ${fbname}-${i}.wav
        
        done
        

        您可能希望将 avconv 替换为 ffmpeg,具体取决于您正在处理的发行版。

        【讨论】:

          猜你喜欢
          • 2012-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-30
          • 1970-01-01
          • 2017-08-30
          • 1970-01-01
          相关资源
          最近更新 更多