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