我需要使用网络摄像头覆盖来录制屏幕,我有以下输入:
- 来自 gdigrab 的屏幕截图
- 系统音频使用另一个软件将原始音频传输到 ffmpeg
- 网络摄像头流
- 麦克风音频
我设法合并了以上所有内容(网络摄像头覆盖除外)。这是我的 ffmpeg 命令:
ffmpeg -f f32le -ac 2 -ar 44.1k -i \\.\pipe\systemAudioPipe -f dshow -i video="TOSHIBA Web Camera - HD":audio="Internal Mic (IDT High Definition Audio CODEC)" -f gdigrab -thread_queue_size 512 -offset_x 0 -offset_y 0 -video_size 1366x728 -framerate 60 -draw_mouse 1 -i desktop -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -filter_complex "[0:a][1:a]amerge=inputs=2[a],[a][2:v]overlay" -map 2 -map "[a]" "output.avi"
我收到此错误:
[Parsed_amerge_0 @ 063ebb80] Media type mismatch between the 'Parsed_amerge_0' filter output pad 0 (audio) and the 'Parsed_overlay_1' filter input pad 0 (video) [AVFilterGraph @ 063a3a80] Cannot create the link amerge:0 -> overlay:0
初始化复杂过滤器时出错
如果我从过滤器中移除该[a][2:v]overlay
部分,它就可以正常工作(没有网络摄像头覆盖),那么我该如何覆盖网络摄像头?
答案1
[a]
指的是合并输出,因此它不能被发送到像这样的视频过滤器overlay
。如果您想将网络摄像头覆盖在桌面之上,[2:v][1:v]overlay
则需要使用以下语法。
使用
ffmpeg -f f32le -ac 2 -ar 44.1k -i \\.\pipe\systemAudioPipe -f dshow -i video="TOSHIBA Web Camera - HD":audio="Internal Mic (IDT High Definition Audio CODEC)" -f gdigrab -thread_queue_size 512 -offset_x 0 -offset_y 0 -video_size 1366x728 -framerate 60 -draw_mouse 1 -i desktop -vcodec libx264 -pix_fmt yuv420p -preset ultrafast -filter_complex "[0:a][1:a]amerge=inputs=2[a];[2:v][1:v]overlay[v]" -map "[v]" -map "[a]" "output.avi"