X11
如何同步不同的fps影片輸入
我想做與本指南中的類似的事情,但在這種情況下,兩個輸入具有相同的 fps,我想同步兩個不同的幀速率輸入,這裡是一個範例:
ffmpeg \ -f x11grab \ -video_size 1920x1080 \ -framerate 60 \ -i :0.0 \ -f v4l2 \ -video_size 320x240 \ -framerate 15 \ -i /dev/video0 \ -filter_complex '[0:v][1:v]overlay=10:(H-h)/2[o]' \ -map '[o]' \ -r 60 \ -vcodec libx264 \ -an \ -f mpegts \ udp://127.0.0.1:3333
然後觀看:
vlc udp://@127.0.0.1:3333
就我而言,它笨拙地給出了大約 10 fps 並且似乎凍結了,雖然我預計 60 我相信它更有可能是 15,因為它是最低的,誰知道……
但是,如果我刪除網路攝像頭輸入和過濾器,它會提供我想要的完整 60 fps,以及當我隻流式傳輸網路攝像頭時,它會提供 15 fps。
基於this other guide我也嘗試了過濾器
[1:v]fps=fps=60[wc];[0:v][wc]overlay=10:(H-h)/2[o]
,但沒有成功。我希望輸出 fps 為 60,並且幀以某種方式很好地分佈以避免凍結效果。如何使用 ffmpeg 同步兩個不同的 fps 影片輸入?
證據:
- 使用網路攝像頭進行螢幕錄製
- 沒有網路攝像頭的螢幕錄製意味著電腦能夠實時錄製全屏。
- 日誌- 帶和不帶網路攝像頭的流式傳輸
我仍然不知道確切原因,但以下工作:
ffmpeg \ -f x11grab \ -video_size 1920x1080 \ -framerate 60 \ -i :0.0 \ -f v4l2 \ -video_size 320x240 \ -framerate 15 \ -i /dev/video0 \ -filter_complex '[0:v]setpts=RTCTIME-RTCSTART[dt];[1:v]setpts=PTS-STARTPTS[wc];[dt][wc]overlay=10:(H-h)/2[o]' \ -map '[o]' \ -r 60 \ -vcodec libx264 \ -an \ -f mpegts \ udp://127.0.0.1:3333
雖然說的文件
RTCTIME
已被棄用,並且大多數人都使用PTS-STARTPTS
,但似乎我強制流是基於時間的而不是數字序列。編輯:
使用以下過濾器也可以使用,我相信它更適合:
[0:v]setpts=N/FRAME_RATE/TB[dt];[1:v]setpts=N/FRAME_RATE/TB,fps=fps=60[wc];[dt][wc]overlay=10:(H-h)/2[o]
它確保了固定的幀速率,並調整網路攝像頭以在輸出上具有與預期相同的幀速率。