ffmpegが同じ入力をいくつかの異なる「出力」ファイルに出力するために必要なフォーマット/構文は何ですか?たとえば、異なるフォーマット/異なるビットレート?出力の並列処理をサポートしていますか?
6 に答える
ffmpegのドキュメントが更新され、これに関する多くの情報が追加されました。オプションは、使用するffmpegのバージョンによって異なります。http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs
FFMpegのドキュメントから、FFmpegは任意の数の出力「ファイル」に書き込みます。
各出力ファイル(またはストリーム)の前に適切な出力オプションがあることを確認してください。
私が使う
ffmpeg -f lavfi -re -i 'life=s=300x200:mold=10:r=25:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16' \
-f lavfi -re -i sine=frequency=1000:sample_rate=44100 -pix_fmt yuv420p \
-c:v libx264 -b:v 1000k -g 30 -keyint_min 60 -profile:v baseline -preset veryfast -c:a aac -b:a 96k \
-f flv "rtmp://yourname.com:1935/live/stream1" \
-f flv "rtmp://yourname.com:1935/live/stream2" \
-f flv "rtmp://yourname.com:1935/live/stream3" \
複数のインスタンスを実行できない理由はありますffmpeg
か?私はそれで素晴らしい結果を出しました...
一般的に、私が行ったことは、ソースffmpeg
ファイルに対して1回実行して、基本標準(たとえば、より高品質のh.264 mp4ファイル)に分類することです。これにより、ソースファイルにこの最初のパスでクリーンアップされるため、問題が発生します
次に、その新しいソース/入力ffmpeg
ファイルを使用して、たとえばbashでx個のジョブを実行します...
「...」が表示される場所は、すべてのエンコードオプションを配置する場所です。
# create 'base' file
ffmpeg -loglevel error -er 4 -i $INPUT_FILE ... INPUT.mp4 >> $LOG_FILE 2>&1
# the command above will run and then move to start 3 background jobs
# text output will be sent to a log file
echo "base file done!"
# note & at the end to send job to the background
ffmpeg ... -i INPUT.mp4 ... FILENAME1.mp4 ... >/dev/null 2>&1 &
ffmpeg ... -i INPUT.mp4 ... FILENAME2.mp4 ... >/dev/null 2>&1 &
ffmpeg ... -i INPUT.mp4 ... FILENAME3.mp4 ... >/dev/null 2>&1 &
# wait until you have no more background jobs running
wait > 0
echo "done!"
各バックグラウンドジョブは並行して実行され、CPU全体で(基本的に)バランスが取れているため、各コアを最大化できます。
http://sonnati.wordpress.com/2011/08/30/ffmpeg- –-the-swiss-army-knife-of-internet-streaming -–- part-iv /およびhttp://ffmpeg-usersに基づく.933282.n4.nabble.com / Multiple-output-files-td2076623.html
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k
または、出力を「ティー」にパイプして「X」の他のプロセスに送信し、実際にエンコードを実行することもできます。
ffmpeg-i入力-| ティー..。
これにより、CPUを節約できる可能性があります。これは、他の方法では明らかに利用できない、より多くの出力並列処理を可能にする可能性があるためです。
http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputsおよびここを参照してください
私はそのようにしました
ffmpeg -re -i nameoffile.mp4 -vcodec libx264 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv \
-f flv rtmp://rtmp.1.com/code \
-f flv rtmp://rtmp.2.com/code \
-f flv rtmp://rtmp.3.com/code \
-f flv rtmp://rtmp.4.com/code \
-f flv rtmp://rtmp.5.com/code \
しかし、私が期待していたように完全にうまく機能しておらず、nginxでリストリームしています