2017-04-18 9 views
1

コマンドライン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 alawffmpegは "raw"出力にどのフォーマット/プロトコルを使用しますか?

しかし、生のコーデック出力をストリーミングしたい場合、一致する-fはありませんか?私はただ-f alawを取って、それが何もしないと仮定することができますか? (G711 alawはバイトストリームを生成する単純なコーデックなので、-f alawはおそらくそのバイトストリームをコピーするだけです)

明らかに、パイプのもう一方の側では、コンテナ情報がないとデータストリームをどのように解釈する必要があるかを知る必要があります。しかし、パイプのもう一方の側が、-c:a FOOでエンコードされた8kHzでサンプリングされたオーディオストリームを期待していることはすでにわかっているとします。

答えて

2

はい、生ストリームは次のとおりです。コーデックペイロードのカプセル化なし。

あなたのコマンド構文では明瞭にするために、あなたはハズレdata

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

'-map 0'はトリックを行います。 – MSalters

1

「未加工」とは、非圧縮オーディオサンプル(PCM)を意味します。

alawに加えて、ffmpegは、PCMフォーマットの他のバリエーションをサポートします。

ffmpeg -formats | grep PCM 

は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 

示します。

+0

を使用することができます。 PCMの味であるかもしれないし、そうでないかもしれないコーデックから出てくるものと同じように生のままである。 alawとmulawは本質的に損失のある圧縮方式であることに注意してください。 16〜8ビット。 – MSalters

+0

清算していただきありがとうございます。 @Mulvyaが答えた '-f data'はうまくいくと思います。 – wto

関連する問題