【问题标题】:ffmpeg audio copy failing with pipeffmpeg 音频复制因管道失败
【发布时间】:2012-08-23 16:06:01
【问题描述】:

在命令行中,如果我运行:

ffmpeg -i inputVideo.mp4 -vn -f mp4 -acodec copy outputAudio.aac

一切正常。 但是,如果我做同样的事情,除了标准输出而不是输出文件(“pipe:1”而不是“outputAudio.aac”),那么我会收到这个错误: “无法为输出文件 #0 写入标头(编解码器参数不正确?)”

非常感谢任何有 ffmpeg 经验的人的帮助

谢谢

【问题讨论】:

    标签: audio ffmpeg pipe


    【解决方案1】:

    问题是你要一个文件名为 outputAudio.aac 的 mp4 文件。所以如果你检查 outputAudio.aac 它实际上是一个 mp4 文件。要编写 mp4 文件,ffmpeg 将需要一个可查找的文件描述符,而 stdout 不是。 [这是因为 mp4 moov atom 写在文件开头的末尾。
    如果你想将 aac 转储到标准输出,你应该要求一个 adts 文件

    ffmpeg -i input.mp4 -acodec copy -vn -f adts -strict -2 -
    

    如果您在 mp4 中需要它.. 然后将其混合到一个文件中

    mp4 不是流媒体格式:请参阅此处Fix 3GP file after streaming from Android Media Recorder,了解我对解释这一点的不同问题的回答。

    【讨论】:

    • 令人惊讶的是,这确实有效。谢谢。但它提出了一个新问题。最终目标是在浏览器中拥有这个音频流(html5 音频),至少,chrome 不喜欢它输出的内容。 chrome 会播放 aac,所以这意味着它输出的不是真正的 aac...
    • @mhuusko5,它是 aac。它是带有广告标题的 aac。了解 chrome 是否需要 raw aac 或 adts。如果它需要原始 aac,您需要在中间有自己的程序以从 ffmpeg 输出中去除 adts 标头,因为 ffmpeg 不会将原始 aac 输出到标准输出。
    • 是的,我确实需要原始 AAC。 ffmpeg 会将其输出到文件中,但没有标准输出...为什么?我能以某种方式欺骗它吗?你知道 mplayer/mencoder 是否可以更好地完成这项工作,只需将 aac 剥离为标准输出?
    • 您可能需要更改它的一些源代码。事情是 aac 是无法播放的,除非它具有 adts 标头或者是具有正确标头以使其播放的容器的一部分。其他时间原始输出是 mpeg4-latm 形式的 rtp 流
    • Safari 正式支持 AAC。 Chrome 也正式支持 AAC。然而,上述命令的输出只在 Safari 中播放……你知道为什么会这样吗?我非常感谢您的洞察力。
    猜你喜欢
    • 2016-07-07
    • 2015-10-27
    • 2019-03-13
    • 1970-01-01
    • 2020-09-17
    • 2016-10-15
    • 2016-05-12
    • 2016-01-23
    • 2019-07-03
    相关资源
    最近更新 更多