ffmpeg 使用什么 format/protocol 输出 "raw"?
What format/protocol does ffmpeg use for "raw" output?
给定命令行 ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO pipe:1
,ffmpeg 可能会抱怨它是 "unable to find a suitable output format"。对于某些编解码器,ffmpeg 具有默认的容器格式,例如-c:a libmp3lame
会制作 MP3。对于其他编解码器,您只需重复自己(有点):-c:a pcm_alaw -f alaw
但是,如果我想流式传输原始编解码器输出,但没有匹配的 -f
怎么办?我可以只接受 -f alaw
并假设它什么都不做吗? (G711 alaw 是一种产生字节流的简单编解码器,因此 -f alaw
大概只是复制该字节流)
显然,如果没有容器信息,管道的另一端需要知道如何解释数据流。但假设我已经知道管道的另一端正在等待音频流,以 8 kHz 采样,用 -c:a FOO
.
编码
我认为 'raw' 你指的是未压缩的音频样本 (PCM)。
除了 alaw
之外,ffmpeg
还支持 PCM 格式的其他变体。
ffmpeg -formats | grep PCM
显示
DE alaw PCM A-law
DE f32be PCM 32-bit floating-point big-endian
DE f32le PCM 32-bit floating-point little-endian
DE f64be PCM 64-bit floating-point big-endian
DE f64le PCM 64-bit floating-point little-endian
DE mulaw PCM mu-law
DE s16be PCM signed 16-bit big-endian
DE s16le PCM signed 16-bit little-endian
DE s24be PCM signed 24-bit big-endian
DE s24le PCM signed 24-bit little-endian
DE s32be PCM signed 32-bit big-endian
DE s32le PCM signed 32-bit little-endian
DE s8 PCM signed 8-bit
DE u16be PCM unsigned 16-bit big-endian
DE u16le PCM unsigned 16-bit little-endian
DE u24be PCM unsigned 24-bit big-endian
DE u24le PCM unsigned 24-bit little-endian
DE u32be PCM unsigned 32-bit big-endian
DE u32le PCM unsigned 32-bit little-endian
DE u8 PCM unsigned 8-bit
同样,
ffmpeg -codecs | grep PCM
将显示 PCM 格式的音频编解码器列表。
是的,原始流就是这样:没有封装编解码器负载。
为了您的命令语法清晰,您可以使用 data
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO -map 0 -f data pipe:1
给定命令行 ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO pipe:1
,ffmpeg 可能会抱怨它是 "unable to find a suitable output format"。对于某些编解码器,ffmpeg 具有默认的容器格式,例如-c:a libmp3lame
会制作 MP3。对于其他编解码器,您只需重复自己(有点):-c:a pcm_alaw -f alaw
但是,如果我想流式传输原始编解码器输出,但没有匹配的 -f
怎么办?我可以只接受 -f alaw
并假设它什么都不做吗? (G711 alaw 是一种产生字节流的简单编解码器,因此 -f alaw
大概只是复制该字节流)
显然,如果没有容器信息,管道的另一端需要知道如何解释数据流。但假设我已经知道管道的另一端正在等待音频流,以 8 kHz 采样,用 -c:a FOO
.
我认为 'raw' 你指的是未压缩的音频样本 (PCM)。
除了 alaw
之外,ffmpeg
还支持 PCM 格式的其他变体。
ffmpeg -formats | grep PCM
显示
DE alaw PCM A-law DE f32be PCM 32-bit floating-point big-endian DE f32le PCM 32-bit floating-point little-endian DE f64be PCM 64-bit floating-point big-endian DE f64le PCM 64-bit floating-point little-endian DE mulaw PCM mu-law DE s16be PCM signed 16-bit big-endian DE s16le PCM signed 16-bit little-endian DE s24be PCM signed 24-bit big-endian DE s24le PCM signed 24-bit little-endian DE s32be PCM signed 32-bit big-endian DE s32le PCM signed 32-bit little-endian DE s8 PCM signed 8-bit DE u16be PCM unsigned 16-bit big-endian DE u16le PCM unsigned 16-bit little-endian DE u24be PCM unsigned 24-bit big-endian DE u24le PCM unsigned 24-bit little-endian DE u32be PCM unsigned 32-bit big-endian DE u32le PCM unsigned 32-bit little-endian DE u8 PCM unsigned 8-bit
同样,
ffmpeg -codecs | grep PCM
将显示 PCM 格式的音频编解码器列表。
是的,原始流就是这样:没有封装编解码器负载。
为了您的命令语法清晰,您可以使用 data
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO -map 0 -f data pipe:1