我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:-
将管道设置为暂停...管道正在预滚动...错误:来自元素 /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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
真的不知道为什么我必须编码然后再次解码,但没有其他任何工作,即使我可以直接从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
Run Code Online (Sandbox Code Playgroud)
管道更干净,输出文件更小
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我成功使用的最低 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2322 次 |
| 最近记录: |