2016-12-13 5 views
0

私はビデオのRTMPストリームを作成し、それにグラフィックデータを入れようとしています。私は必要な出力を作成するコマンドを持っています。唯一の問題は、PNGイメージがレンダリングプロセス中にディスク上で更新されているにもかかわらず、出力ビデオではオーバーレイは常に同じままです。私はffmpegがディスクからPNGイメージを取って、それが変更されたとき(または1分に1回)オーバーレイとして使うことを望みます。 これは可能ですか?ここでffmpegでビデオのPNGオーバーレイを更新します

私は出力をレンダリングするために使用するコマンドです:

ffmpeg \ 
-re -y \ 
-f lavfi \ 
-i "movie=filename=video/videobg.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" \ 
-loop 1 \ 
-i images/forecast.png \ 
-filter_complex "[1:v]format=argb,geq=r='r(X,Y)':a='0.9*alpha(X,Y)'[overlay]; [0:v][overlay]overlay" \ 
-i data/musicbg.mp3 \ 
-ac 1 \ 
-ar 44100 \ 
-b:a 128k \ 
-vcodec libx264 \ 
-pix_fmt yuv420p \ 
-r 30 \ 
-g 60 \ 
output.mp4 
+0

直接できません。あなたが試みることができるのはパイプを介して画像を供給することです。つまり、 '-f image2pipe -framerate 1/60 -i pipe:.png' – Mulvya

+0

このオプションを正しく使う方法を理解できません。いくつか例を挙げてください。 –

答えて

2

まあ、私は私が欲しいものを作る方法を最終的に考え出しました。希望、これは誰かのために役立つ可能性があります。

私がしなければならなかったのは、画像入力に-f image2オプションを追加することでした。入力ソースの順序を変更したので、上記のコマンドと少し違っていますが、実際は同じです。 解決策は次のとおりです。

ffmpeg \ 
-re -y \ 
-loop 1 \ 
-f image2 \ 
-i images/forecast.png \ 
-f lavfi \ 
-i "movie=filename=video/videobg.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" \ 
-filter_complex "[0:v]format=argb,geq=r='r(X,Y)':a='0.9*alpha(X,Y)'[overlay]; [1:v][overlay]overlay" \ 
-i data/musicbg.mp3 \ 
-ac 1 \ 
-ar 44100 \ 
-b:a 128k \ 
-vcodec libx264 \ 
-pix_fmt yuv420p \ 
-r 30 \ 
-g 60 \ 
output.mp4 
+0

奇妙な。私は、単一の画像のためのデフォルトのマルチプレクサがimage2であったと誓っていたかもしれません。それはPNGのためのpng_pipeとして現れるimageauto demuxerだが、JPGは一つではない。知っておいてよかった。ありがとう。 – Mulvya

関連する問題