首页 > 解决方案 > 在命令行中使用 dshow 时 CreateProcess 失败

问题描述

尝试使用 CreateProcess 启动 ffmpeg。

问题:

1) 不能dshow在命令行中使用。

2) 带有 STDIN 管道的 RTMP 流不显示流。

问题:

1) 命令行中与 CreateProcess api 相关的注意事项是什么?

2)什么是圆的方式?如何解决问题?

此代码有效:

BOOL bSuccess = CreateProcess(NULL,
    L"ffmpeg.exe -y -loop 1 -i kites.jpg  out.mp4",         
    NULL,   
    NULL,
    TRUE, 
    CREATE_NEW_CONSOLE, 
    NULL, 
    NULL,
    &siStartInfo,
    &piProcInfo);

使用时 CreateProcess 失败dshow。但是它在控制台中用作命令行。

BOOL bSuccess = CreateProcess(NULL,
    L"ffmpeg.exe -y -loop 1 -i kites.jpg  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4",
    NULL,
    NULL,
    TRUE,
    CREATE_NEW_CONSOLE,
    NULL,
    NULL,
    &siStartInfo,
    &piProcInfo);

编辑:(使用绝对路径,仍然没有运气)

std::wstring cmdArgslistSetChannel = L"ffmpeg.exe -y -loop 1 -i c:\test\kites.jpg  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4";
bSuccess = CreateProcess(NULL, 
        &cmdArgslistSetChannel[0],
        NULL,          
        NULL,          
        TRUE,          
        CREATE_NEW_CONSOLE,            
        NULL,          
        NULL,          
        &siStartInfo, 
        &piProcInfo);  

标签: c++winapiffmpeg

解决方案


你快到了。您可以像这样指定绝对路径。确保文件夹名称中没有空格,否则 ffmpeg 命令可能会再次失败。如果ffmpeg位于另一个文件夹中,您也应该指定路径。

std::wstring cmdArgslistSetChannel = L"c:\test\ffmpeg.exe -y -loop 1 -i \"c:\\test\\kites.jpg\"  -f dshow  -i audio=\"Stereo Mix(Realtek High Definition Audio)\"  out.mp4";

推荐阅读