FFmpeg使用dshow时含冒号的USB麦克风名称转义失败如何解决
问题描述
我使用FFmpeg录屏时,以下命令可正常运行:
ffmpeg -f dshow -i audio="Microphone Array (Full HD 1080P PC Camera Audio)" -f gdigrab -offset_x 0 -offset_y 0 -video_size 500x500 -framerate 30 -i desktop -pix_fmt yuv420p -vcodec libx264 -crf 28 -preset ultrafast -tune zerolatency -movflags +faststart "recording.mp4"
但换用名称为*Microphone 1:2 (USB PnP Sound Device)*的USB麦克风时,出现如下错误:
[dshow @ 0000028f718db740] Malformed dshow input string. audio=Microphone 1:2 (USB PnP Sound Device): I/O error
尝试用\和\\转义冒号后仍报错,求解决方法。
解决方法
针对dshow设备名称包含冒号等特殊字符的问题,有两种可靠解决方式:
方案1:用花括号包裹设备名称
将音频设备名用{}包裹,同时保留外层双引号,修改后的命令如下:ffmpeg -f dshow -i audio="{Microphone 1:2 (USB PnP Sound Device)}" -f gdigrab -offset_x 0 -offset_y 0 -video_size 500x500 -framerate 30 -i desktop -pix_fmt yuv420p -vcodec libx264 -crf 28 -preset ultrafast -tune zerolatency -movflags +faststart "recording.mp4"花括号可以让dshow正确识别包含特殊字符的设备名,避免冒号被解析为输入参数的分隔符。
方案2:使用设备的GUID路径
先执行命令列出所有dshow设备,找到目标麦克风对应的完整设备路径:ffmpeg -list_devices true -f dshow -i dummy在输出的音频设备列表中,会显示类似
@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}的GUID路径,将其替换到录屏命令中即可,示例:ffmpeg -f dshow -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{12345678-1234-5678-1234-567812345678}" -f gdigrab -offset_x 0 -offset_y 0 -video_size 500x500 -framerate 30 -i desktop -pix_fmt yuv420p -vcodec libx264 -crf 28 -preset ultrafast -tune zerolatency -movflags +faststart "recording.mp4"这种方式完全避开了设备名中的特殊字符,兼容性更强。
内容的提问来源于stack exchange,提问作者Riz
相关产品推荐
相关产品推荐

