使用ffenc编码音频文件

我正在尝试使用gstreamer对音频文件进行编码。 我正在使用该命令

gst launch filesrc location=s.pcm ! audio/x-raw-int, rate=4000, channels=2, endianness=1234, width=16, depth=16, signed=true ! ffenc_aac ! filesink location=file.wav

我收到一条错误消息: -

将管道设置为PAUSED ...管道正在PREROLLING ...错误:来自元素/ GstPipeline:pipeline0 / GstFileSrc:filesrc0:内部数据流错误。 其他调试信息:gstbasesrc.c(2625):gst_base_src_loop():/ GstPipeline:pipeline0 / GstFileSrc:filesrc0:流任务暂停,原因未协商(-4)错误:管道不希望预卷。 将管道设置为NULL ...释放管道...

任何人都可以指导我解决这个问题


不要混淆编码和容器。 你不能有一个AAC编码的WAV,WAV是PCM。 您可以拥有4k WAV,或者您可以在MP4或M4A容器中使用AAC编码文件。 这两个例子如下。 请注意,在这些示例中,如果您尝试将采样率更改为48000以下,则AAC编码器会变得非常挑剔。

创建原始音频文件

gst-launch audiotestsrc num-buffers=100 
! audio/x-raw-int, rate=48000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! filesink location=foo.pcm

将其编码为WAV

gst-launch filesrc location=foo.pcm 
! audio/x-raw-int, rate=48000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! audioresample 
! audio/x-raw-int, rate=4000 
! wavenc 
! filesink location=foo.wav

将其编码为AAC并将其复合到mp4中

不知道为什么我必须编码然后重新解码,但没有其他工作,即使我可以直接从audiotest src。

gst-launch filesrc location=foo.pcm 
! audio/x-raw-int, rate=48000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! wavenc 
! wavparse 
! ffenc_aac 
! mp4mux 
! filesink location=foo.mp4

..alternately使用faac

管道更清洁,输出文件更小

gst-launch filesrc location=foo.pcm 
! audio/x-raw-int, rate=48000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! faac 
! mp4mux 
! filesink location=foo.mp4

或者voaacenc

即使它看起来具有最灵活的功能,voaacenc也不会在48000以下工作。 我尝试了8k,16k,48k,96k和44100,这有趣地改变了测试音的音调。

gst-launch filesrc location=foo.pcm 
! audio/x-raw-int, rate=48000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! voaacenc 
! mp4mux 
! filesink location=foo.mp4

低比特率的AAC

我成功的最低AAC码率是16000,这里是那些测试,再次指出faac产生了最小的文件大小。

gst-launch audiotestsrc num-buffers=100 
! audio/x-raw-int, rate=16000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! ffenc_aac 
! mp4mux 
! filesink location=foo.mp4

gst-launch audiotestsrc num-buffers=100 
! audio/x-raw-int, rate=16000, channels=2, endianness=1234, width=16, depth=16, signed=true 
! faac 
! mp4mux 
! filesink location=foo.mp4 
链接地址: http://www.djcxy.com/p/43929.html

上一篇: Encoding a audio file using ffenc

下一篇: Not able to save gstream videosink