2014-02-07 1 views
1

Мне нужно разбить многоканальный wav-файл и закодировать каждый канал в mp3-файлы.gstreamer разделяет многоканальный wav-файл на отдельные каналы и кодирует каждый канал как mp3, alac и т. Д. И сохраняет файл

Я знаю об обратном перемещении плагина для gtresamer, но я не уверен, как его использовать для wav-файла и как кодировать поток канала.

Я предпочитаю решение на основе gtreamer (или ffmpeg), поскольку мне нужно ограничить ввод-вывод. I.e, я не хочу, чтобы промежуточные одноканальные 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 файл, но это был только шум.

ответ

1

Знаете ли вы количество каналов заранее? Если вы используете GST-старт вы можете купольное что-то вроде:

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" 

и так далее. Если вы заранее не знаете количество каналов, вам нужно будет написать код.

0

Возможно, FFmpeg выполнит то, что вы просите.

0

Вам не обязательно знать, сколько каналов имеет 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, в зависимости от распределения вы работаете.

 Смежные вопросы

  • Нет связанных вопросов^_^