Gstreamer 使用ffenc_aac对音频文件进行编码

Gstreamer 使用ffenc_aac对音频文件进行编码,gstreamer,Gstreamer,我正在尝试使用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 我收到一条错误消息:- 正在将管道设置为暂停。。。管道正在预滚。。。错误:来自 元素/GstPip

我正在尝试使用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
我收到一条错误消息:-

正在将管道设置为暂停。。。管道正在预滚。。。错误:来自 元素/GstPipeline:pipeline0/GstFileSrc:filesrc0:内部数据流 错误。其他调试信息:gstbasesrc.c(2625):gst\u base\u src\u循环 ():/GstPipeline:pipeline0/GstFileSrc:filesrc0:streaming任务已暂停, 未协商的原因(-4)错误:管道不想预滚。 正在将管道设置为空。。。释放管道


有谁能指导我克服这个问题吗?不要把编码和容器混为一谈。不能使用AAC编码的WAV,WAV是PCM。您可以使用4k WAV,也可以在MP4或M4A容器中使用AAC编码的文件。下面是两个例子。请注意,在这些示例中,如果尝试将采样率更改为48000以下,AAC编码器会变得非常挑剔

创建原始音频文件 将其编码为WAV 将其编码为AAC,并将mux编码为mp4 我真的不知道为什么我必须编码,然后再解码,但没有其他工作,即使我可以直接从听力测试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
..交替使用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 

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

创建原始音频文件 将其编码为WAV 将其编码为AAC,并将mux编码为mp4 我真的不知道为什么我必须编码,然后再解码,但没有其他工作,即使我可以直接从听力测试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
..交替使用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 

请发布全部或部分x-raw-int文件。请发布全部或部分x-raw-int文件。