鉴于命令行ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO pipe:1
,ffmpeg可能会抱怨它“无法找到合适的输出格式”。对于某些编解码器,ffmpeg具有默认容器格式,例如-c:a libmp3lame
将生成MP3。对于其他编解码器,您只需重复一遍({1}}
但是,如果我想要流式传输原始编解码器输出,并且没有匹配的-c:a pcm_alaw -f alaw
怎么办?我可以采取-f
并假设它没有做任何事情吗? (G711 alaw是一个产生字节流的简单编解码器,所以-f alaw
可能只复制那个字节流)
显然,如果没有容器信息,管道的另一端需要知道如何解释数据流。但假设我已经知道管道的另一侧需要一个音频流,以8 kHz采样,用-f alaw
编码。
答案 0 :(得分:2)
是的,原始流只是:没有封装编解码器有效负载。
为了清楚命令语法,您可以使用data
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ar 8000 -c:a FOO -map 0 -f data pipe:1
答案 1 :(得分:1)
我认为原始'你的意思是未压缩的音频样本(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格式的音频编解码器列表。