ffmpeg用于“原始”输出的格式/协议是什么?

时间:2017-04-18 15:56:16

标签: ffmpeg containers audio-streaming

鉴于命令行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编码。

2 个答案:

答案 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格式的音频编解码器列表。