web-dev-qa-db-ja.com

ffmpegでパイピングを使用するにはどうすればよいですか?

私の目標は、wgetを使用してflvファイルをダウンロードし、出力をffmpegにパイプしてMP3に変換することです。このようにして、ユーザーは最初にFLVがサーバーにダウンロードされるのを待たずにMP3をダウンロードできます。私はそれをいじってみました、そしてffmpegは生のビデオでのみパイプを行うことができるようです。だから私はこのようなものを使っていました:

wget -O - 'videoinput.flv' | ffmpeg -y -i - -vcodec rawvideo -f yuv4mpegpipe - |  ffmpeg -y -i - -ab 128k audiooutput.mp3

このタイプのオンザフライffmpegエンコードプロセスの経験がある人はいますか?

18
DiglettPotato

私はこれをテストしていませんが、このようにまたは非常に近いはずです。

wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv
15
Ted

別のHTTPクライアントからパイプするための潜在的に優れたオプションは、ffmpegの組み込みのものを使用することです。少なくとも新しいバージョンでは、入力ファイルの引数としてURLを使用できます。このようにして、FFmpegはファイル自体を引き出すことができ、ファイルの終わり近くにコンテナーデータがある形式の場合、(サーバーがサポートしている場合)ファイルのその部分を最初に取得できます。ファイルを順番に。 http://ffmpeg.org/ffmpeg-all.html#http を参照してください

4
dn3s

発生する問題の一部は、一部のファイル形式で、ファイルのendに重要なファイルコンテナー情報が含まれていることです。したがって、ファイルが完全にダウンロードされる前にffmpegが窒息する可能性があるため、wget呼び出しをffmpegに直接パイプすることは、潜在的なファイルブレーカーです。

一連のコマンドを見てみるとよいでしょう。ファイルをwgetしてから、そのファイルでffmpegを実行します。パイプ機能は無視されますが、それが特定のファイルを操作する際の問題です。

また、mkfifoを使用してビデオをパイピングし、FLVを連結する場合の一連のメソッドに関して、FFMPEGのサイトからのこのFAQ回答を見てください。 http://www.ffmpeg.org /faq.html#TOC27

3
Josh C

「ffmpegは生のビデオでのみパイプを行うことができます」<-できません。

Ffmpegがサポートする任意の形式でパイプイン/アウトできます。

また、コマンドラインの例では、FLVから未加工のビデオを抽出し、MP3にエンコードします。このように行うことはできません。

2
9dan