如何使用 ffmpeg 中的 libavcodec 将 opus 文件解码为 pcm 文件?



我正在尝试使用libavcodec将opus解码为pcm文件。所以,我使用来自 https://ffmpeg.org/doxygen/trunk/decode_audio_8c-example.html 的ffmpeg示例。我把AV_CODEC_ID_MP2改成AV_CODEC_ID_OPUS。但是我得到一个错误。

codec = avcodec_find_decoder((AV_CODEC_ID_MP2);
codec = avcodec_find_decoder(AV_CODEC_ID_OPUS);

错误:

codec ./decode_audio ./out.opus ./out.pcm                  
[opus @ 0x7ff361800000] Error parsing Opus packet header.
[opus @ 0x7ff361800000] Error parsing Opus packet header.
[opus @ 0x7ff361800000] Error parsing Opus packet header.
[opus @ 0x7ff361800000] Error parsing Opus packet header.
[opus @ 0x7ff361800000] Error parsing Opus packet header.
[opus @ 0x7ff361800000] Error parsing Opus packet header.

所以我试着把作品AV_CODEC_ID_OPUS改成AV_CODEC_ID_MP3,然后再试一次。

codec ./decode_audio ./out.mp3 ./out.pcm            
[mp3float @ 0x7fe564002000] Header missing
Error submitting the packet to the decoder

为什么来自 ffmpeg 的示例会出现错误?我该怎么办?

你不能用这种方式解码作品。Mp3 数据包是自定界的,而 opus 不是。这意味着作品需要一个容器(通常是 ogg(。必须解析该容器以确定 opus 数据包的开始和结束,然后您可以对其进行解码。libavformat可用于从文件中读取 AVPackets。

最新更新