You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QProcess中运行FFmpeg命令?macOS下无输出文件排查

解决QProcess调用FFmpeg未生成MKV文件的问题

嘿,我来帮你排查下这个在macOS Catalina下用QProcess调用FFmpeg没生成预期MKV文件的问题!结合你的代码和环境,咱们一步步找原因:

1. 删掉参数里多余的换行符

你在输出文件名末尾加了\n,这会让FFmpeg把带换行的字符串当成目标文件名,系统根本识别不了这个奇怪的文件名,自然生成不了文件。赶紧把这个\n删掉!

2. 别用~指代用户目录,换成绝对路径

QProcess默认不会解析shell里的~符号,所以~/Desktop/PlazaPCO/这个路径FFmpeg根本找不到。咱们用Qt的QDir::homePath()来生成正确的用户目录绝对路径,兼容性更好。

3. 一定要打印FFmpeg的输出信息排查错误

你现在只打印了开始和结束的日志,但FFmpeg执行时的错误信息才是关键!比如权限不足、设备号错误、路径不存在这些问题,都会在标准输出/错误里体现,一定要把这些信息打出来。

4. 检查macOS的隐私权限

Catalina对应用权限管控很严,如果你的Qt程序没有“文件和文件夹”访问权限,是没法往桌面写文件的。去「系统偏好设置」→「安全性与隐私」→「隐私」里,找到「文件和文件夹」,确保你的Qt程序有桌面访问权限。

修改后的代码示例

void MainWindow::Recording(){
    qDebug() << "Nagrywam!";
    
    Qrec.setProcessChannelMode(QProcess::MergedChannels);
    Qrec.setProgram("/Users/nintyswinty/Desktop/Dev/Qt/build-PlazaPCO-Desktop_Qt_5_15_1_clang_64bit-Debug/ffmpeg");
    
    // 用QDir::homePath()生成正确的绝对路径,去掉多余的\n
    QString outputPath = QDir::homePath() + "/Desktop/PlazaPCO/" + QString::fromStdString(date) + ".mkv";
    Qrec.setArguments({
        "-framerate", "30", "-f", "avfoundation", "-i", "1",
        "-f", "avfoundation", "-framerate", "30", "-i", "0",
        "-c:v", "libx264", "-crf", "0", "-preset", "ultrafast",
        outputPath
    });
    
    Qrec.start();
    // 加个超时,避免无限等待
    if(Qrec.waitForFinished(30000)){
        // 打印FFmpeg的输出,排查问题
        qDebug() << "FFmpeg输出:" << Qrec.readAll();
        qDebug() << "Koniec - nagrywam";
    } else {
        qDebug() << "FFmpeg执行超时或出错:" << Qrec.errorString();
        qDebug() << "当前错误输出:" << Qrec.readAllStandardError();
    }
}

额外建议:先在终端手动测试FFmpeg命令

把你要执行的FFmpeg命令复制到终端里跑一遍,看看能不能生成文件。如果终端里也不行,那就是FFmpeg命令本身的问题(比如设备号1/0不对、编码参数错误),先把终端里的命令调通,再放到QProcess里。

内容的提问来源于stack exchange,提问作者NintySwinty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:03:15