

ライブ配信動画の加工を実現するためにffmpegを利用することを検討してます。  
rtmp
の入力を最大2つ想定しています。課題はソースが1つの場合でも出力動画をエンコードさせたいのです。出力動画は720x540を想定しており、左右に360x540の画像を配置する仕様です。  
入力はスマートフォンからのアップストリームを想定してます。1つの入力が入ったらエンコードを開始し、2つ目がが入ったらOverlayを上書きすることを想定してます。  
ソースの入力が1つでもエンコードする方法があれば教えてください。

cam1 rtmp [on---------------offxxxxxxxxon-------------off]  
cam2 rtmp [offxxxxxxxxon---------------offxxxxxon--------]  
このような動作を期待しております。ffmpegはcam2のソースが入ってくるまでエンコードを開始しません。期待値はcam2はnullsrcで表示されることです。  

質問をまとめると

・ffmpegを使ってOverlay処理したい  
・ソースは最大2つだが1つの場合もある  
・ソースが2つ揃わないと出力が始まらないので、ソースが1つ入った時点でEncodeを開始したい  
・ソースが1つの際は片方はnullsrcを期待する

[code]

    $ ffmpeg -i rtmp://localhost/live/1 \
             -i rtmp://localhost/live/2 \
             -filter_complex "nullsrc=size=720x540[base];[0:v] scale= 360x540 [v1];[1:v] scale=360x540 [v2]; \
              [base][v1] overlay=0:0[tmp1]; [tmp1][v2] overlay= 360:0" \
              -preset fast -c:v libx264 -c:a aac -strict -2 -f flv rtmp://local host/live/livestream
    
[/code]

解決方法をご存知でしたらご教授いただけますでしょうか。


CC BY-SA 4.0
2020-04-03T14:08:15.247
65335
2020-04-04T11:10:06.287
2020-04-04T01:21:21.120
39484
39484
question
ffmpeg
ライブ配信　ffmpegのOverlay処理する際ソースが揃わなくてもエンコードを開始したい


rtmpソースを試せてないのですが、  
offになっているときはnullsrcとして飛ばして、onになったときに上書きで同じ出力先にすると  
先に出力した方がエラーになって切り替わるのでうまくいくかもしれません。  
あとoverlayで2つ並べるよりも[hstack](https://ffmpeg.org/ffmpeg-
filters.html#hstack)で並べる方が処理が速いです。（ライブ配信だと差があるかはわかりません）  
場合によっては[setpts](https://ffmpeg.org/ffmpeg-
filters.html#setpts_002c-asetpts)でリセット（setpts=PTS-STARTPTS）が必要かもしれません。

[code]

    $ ffmpeg -f lavfi -i nullsrc=size=360x540 -preset fast -c:v libx264 -c:a aac -strict -2 \
             -f flv rtmp://local host/live2/livestream
    
    $ ffmpeg -i rtmp://localhost/live/1 \
             -i rtmp://localhost/live/2 \
             -filter_complex [0:v][1:v]hstack,scale=720:540
              -preset fast -c:v libx264 -c:a aac -strict -2 -f flv rtmp://local host/live/livestream
    
[/code]

OBSでもいいのならVLCビデオソースで左右に並べる方法もあります。


CC BY-SA 4.0
2020-04-04T11:10:06.287
65352
2020-04-04T11:10:06.287
22778
65335
answer