【发布时间】:2020-09-21 03:18:50
【问题描述】:
我正在尝试使用 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的例子会出错?我该怎么办?
【问题讨论】:
-
您确定您的输入文件没有损坏吗?您是否尝试过其他作品文件?也许你可以找到一个已知“好”的作品文件的下载(下载并检查哈希以确保没有损坏)。
-
我使用 ffmpeg 命令来获取我的 opus 文件和 mp3 文件。
ffmpeg -f avfoundation -i :0 out.opus。我使用 ffplay 命令播放它。并使用 ffmpeg 命令对其进行解码。ffmpeg -i test.opus -acodec pcm_s16le -f s16le -ac 1 -ar 16000 ./out.pcm.并播放它。ffplay -ar 16000 -ac 1 -f s16le -i ./out.pcm。所以,我不确定我是否得到一个“坏”文件。我的应用程序可以获得一个 opus 文件,但第三个 API 应该放入pcm 文件。我该如何解决?