【问题标题】:What format/protocol does ffmpeg use for "raw" output?ffmpeg 用于“原始”输出的格式/协议是什么?
【发布时间】:2017-04-18 15:56:16
【问题描述】:

给定命令行ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO pipe:1,ffmpeg 可能会抱怨它“找不到合适的输出格式”。对于某些编解码器,ffmpeg 具有默认的容器格式,例如-c:a libmp3lame 将制作 MP3。对于其他编解码器,您只需重复自己(有点):-c:a pcm_alaw -f alaw

但是,如果我想流式传输原始编解码器输出,并且没有匹配的 -f,该怎么办?我可以只接受-f alaw 并假设它没有做任何事情吗? (G711 alaw 是一个简单的编解码器,它产生一个字节流,所以-f alaw 大概只是复制那个字节流)

如果没有容器信息,显然管道的另一端需要知道如何解释数据流。但假设我已经知道管道的另一端正在等待一个音频流,以 8 kHz 采样,使用-c:a FOO 编码。

【问题讨论】:

    标签: ffmpeg containers audio-streaming


    【解决方案1】:

    是的,原始流就是这样:没有封装编解码器负载。

    为了清楚你的命令语法,你可以使用data

    ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO -map 0 -f data pipe:1  
    

    【讨论】:

      【解决方案2】:

      我认为“原始”是指未压缩的音频样本 (PCM)。

      除了alawffmpeg 还支持 PCM 格式的其他变体。

      ffmpeg -formats | grep PCM
      

      表演

      DE alaw PCM A 律 DE f32be PCM 32 位浮点大端 DE f32le PCM 32 位浮点小端序 DE f64be PCM 64 位浮点大端序 DE f64le PCM 64 位浮点小端序 DE mulaw PCM mu-law DE s16be PCM 签名 16 位大端序 DE s16le PCM 签名 16 位 little-endian DE s24be PCM 签名的 24 位大端序 DE s24le PCM 签名的 24 位小端序 DE s32be PCM 签名的 32 位大端序 DE s32le PCM 签名的 32 位小端序 DE s8 PCM 签名 8 位 DE u16be PCM 无符号 16 位大端序 DE u16le PCM 无符号 16 位小端序 DE u24be PCM 无符号 24 位大端序 DE u24le PCM 无符号 24 位小端序 DE u32be PCM 无符号 32 位大端序 DE u32le PCM 无符号 32 位小端序 DE u8 PCM 无符号 8 位

      同样,

      ffmpeg -codecs | grep PCM
      

      将显示 PCM 格式的音频编解码器列表。

      【讨论】:

      • 不;原始的,就像来自编解码器的任何东西一样,这可能是也可能不是 PCM 的味道。注意 alaw 和 mulaw 本质上是有损压缩方案; 16 到 8 位。
      • 感谢您的澄清。我认为@Mulvya 回答的-f data 应该可以工作。
      猜你喜欢
      • 1970-01-01
      • 2020-10-24
      • 2017-06-03
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多