私の目標は、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エンコードプロセスの経験がある人はいますか?
私はこれをテストしていませんが、このようにまたは非常に近いはずです。
wget [URL] | ffmpeg -i pipe:0 -vcodec mpeg4 -s qcif -f m4v -y output.flv
別のHTTPクライアントからパイプするための潜在的に優れたオプションは、ffmpegの組み込みのものを使用することです。少なくとも新しいバージョンでは、入力ファイルの引数としてURLを使用できます。このようにして、FFmpegはファイル自体を引き出すことができ、ファイルの終わり近くにコンテナーデータがある形式の場合、(サーバーがサポートしている場合)ファイルのその部分を最初に取得できます。ファイルを順番に。 http://ffmpeg.org/ffmpeg-all.html#http を参照してください
発生する問題の一部は、一部のファイル形式で、ファイルのendに重要なファイルコンテナー情報が含まれていることです。したがって、ファイルが完全にダウンロードされる前にffmpegが窒息する可能性があるため、wget呼び出しをffmpegに直接パイプすることは、潜在的なファイルブレーカーです。
一連のコマンドを見てみるとよいでしょう。ファイルをwgetしてから、そのファイルでffmpegを実行します。パイプ機能は無視されますが、それが特定のファイルを操作する際の問題です。
また、mkfifoを使用してビデオをパイピングし、FLVを連結する場合の一連のメソッドに関して、FFMPEGのサイトからのこのFAQ回答を見てください。 http://www.ffmpeg.org /faq.html#TOC27
「ffmpegは生のビデオでのみパイプを行うことができます」<-できません。
Ffmpegがサポートする任意の形式でパイプイン/アウトできます。
また、コマンドラインの例では、FLVから未加工のビデオを抽出し、MP3にエンコードします。このように行うことはできません。