【问题标题】:Encoding a audio file using ffenc_aac使用 ffenc_aac 编码音频文件
【发布时间】:2017-01-30 11:46:05
【问题描述】:

我正在尝试使用 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 ...释放管道 ...

谁能指导我解决这个问题

【问题讨论】:

  • 请张贴全部或部分 x-raw-int 文件。

标签: gstreamer


【解决方案1】:

不要将编码与容器混淆。您不能拥有 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

..交替使用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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2016-09-03
    • 2016-03-12
    • 2020-02-10
    • 2012-01-26
    相关资源
    最近更新 更多