Então, depois de trabalhar com ele por alguns dias, encontrei uma solução:
Aparentemente, ao usar -f dshow
, isso aloca um buffer em tempo real.
Enquanto esse buffer permite que você codifique o vídeo com resolução mais alta, isso interrompe a sincronização de vídeo em tempo real, porque eles estão sendo lidos de um buffer que não contém nenhum registro de data e hora.
Em vez disso, aloque um buffer menor em tempo real, o que forçará o ffmpeg a eliminar quadros se não estiver perto do tempo real.
ffmpeg -f dshow -rtbufsize 1M -r 30 -i video="@device_pnp_\?\usb#vid_045e&pid_075d&mi_00#6&eb52b6a&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -f dshow -rtbufsize 1M -r 30 -i video="@device_pnp_\?\usb#vid_045e&pid_075d&mi_00#8&46f2efb&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" -framerate 30 -map 0 -c:v libx264 -preset ultrafast -y C:\output1_1.mp4 -framerate 30 -map 1 -c:v libx264 -preset ultrafast -y C:\output2_1.mp4