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

Swift 4调用mediainfo获取视频帧率时参数无效问题求助

解决Swift中调用mediainfo时参数无效的问题

嘿,这个问题我碰到过!问题出在你给arguments里的参数加了多余的引号,导致mediainfo没法正确识别这个--Inform参数。

为什么原来的写法不对?

在终端里用引号包裹--Inform="Video;%FrameRate%",是因为shell会把分号当成命令分隔符,引号的作用是告诉shell把整个字符串作为一个独立参数。但Swift的Process是直接把数组里的每个元素作为独立参数传递给目标程序,完全不需要经过shell解析——所以你加的引号会被当成参数的一部分传给mediainfo,也就是说mediainfo收到的参数是--Inform=\"Video;%FrameRate%\"(带引号),而不是它期望的--Inform=Video;%FrameRate%,自然就会忽略这个无效参数。

正确的写法

只需要去掉参数里的引号,直接传递格式正确的参数即可:

let taskfindfps = Process()
taskfindfps.launchPath = "/Users/Lorenzo/mediainfo"
// 去掉多余的引号,直接传递参数
taskfindfps.arguments = ["--Inform=Video;%FrameRate%", myVideo]
let pipefindfps = Pipe()
taskfindfps.standardOutput = pipefindfps

// 启动任务并处理输出
taskfindfps.launch()
taskfindfps.waitUntilExit()

// 读取并解析帧率结果
let outputData = pipefindfps.fileHandleForReading.readDataToEndOfFile()
if let frameRateStr = String(data: outputData, encoding: .utf8) {
    let cleanFrameRate = frameRateStr.trimmingCharacters(in: .whitespacesAndNewlines)
    print("视频帧率:\(cleanFrameRate)")
}

补充小提示

  • 你可以通过taskfindfps.terminationStatus判断任务是否执行成功,如果返回非0值,说明可能有错误,可以读取standardError的内容排查问题。
  • Swift 4里用launchPath和arguments是完全没问题的,后续版本虽然有新的API,但这个写法依然兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:12:32