Ffmpeg-如何将 gdigrab 和音频与网络摄像头覆盖合并?

Ffmpeg-如何将 gdigrab 和音频与网络摄像头覆盖合并?

我需要使用网络摄像头覆盖来录制屏幕,我有以下输入:

  1. 来自 gdigrab 的屏幕截图
  2. 系统音频使用另一个软件将原始音频传输到 ffmpeg
  3. 网络摄像头流
  4. 麦克风音频

我设法合并了以上所有内容(网络摄像头覆盖除外)。这是我的 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"

相关内容