ビデオ入力を他のfpsと同期する方法

ビデオ入力を他のfpsと同期する方法

私はこれと似たようなことをしたいガイドしかし、この場合、両方の入力が同じfpsを持ち、2つの異なるフレームレート入力を同期させたいと思います。例は次のとおりです。

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

私の場合、私は10fps程度をぎこちなく与え、かなり凍ったように見えましたが、60を予想しましたが、最も低かったので15日の可能性が高かったでしょう。誰が知っています...

しかし、ウェブカメラの入力を削除してフィルタリングすると、私が望む60fps全体が提供され、ウェブカメラをストリーミングすると15fpsが提供されます。

に基づいてこの他のガイド私も[1:v]fps=fps=60[wc];[0:v][wc]overlay=10:(H-h)/2[o]成功せずにフィルタを試しました。

私は出力fpsが60であり、フレームが静止効果を避けるために何らかの方法でうまく分散したいと思います。 ffmpegを使用して2つのビデオ入力を異なるfpsに同期する方法は?

証拠:

答え1

まだ正確な理由がわかりませんが、次はうまくいきます。

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]

一定のフレームレートを確保し、出力が予想されるフレームレートと同じになるようにWebカメラを調整します。

関連情報