【问题标题】:How do I decode opus file to pcm file using libavcodec from ffmpeg?如何使用 ffmpeg 中的 libavcodec 将 opus 文件解码为 pcm 文件?
【发布时间】: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 文件。我该如何解决?

标签: audio ffmpeg opus


【解决方案1】:

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

【讨论】:

  • 所以这个例子没有达到我的目标?而 libavformat 可以帮助我完成我的目标。或者我可以将 opus 转码为 mp3 吗?并使用示例将 mp3 解码为 pcm 文件。因为我是这个领域的新手。我需要一些例子来学习,但我只是找到了一点。
  • 抱歉,stackoverflow 不是要求示例代码的地方,但 ffmpeg 包含很多。是的,您可以将 opus 转换为 mp3,然后根据需要使用该代码进行解码。如果您希望在没有额外步骤的情况下继续前进,您首先需要研究编解码器、容器和基本流之间的区别。
  • 抱歉我的请求。但在这个 ffmpeg 示例中,解码不成功。` ./decode_audio ./out.mp3 ./out.pcm [mp3float @ 0x7fe564002000] Header missing解码器`
  • 新问题应该有新帖子。
  • 在我原来的问题中,也提到了这个问题。所以,我需要发一个新帖子吗?
猜你喜欢
  • 2014-10-07
  • 2010-11-18
  • 1970-01-01
  • 2021-01-23
  • 2020-01-02
  • 2023-03-26
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多