iOS Swift开发中FFmpeg-kit无法识别项目视频文件问题求助
iOS 端 FFmpeg-kit 处理本地视频报错修复方案
报错根因逐个说明
- 报错1:
ERROR: Earth_Zoom_In.mov: No such file or directory
FFmpeg-kit 执行时的工作目录并非 App Bundle 资源目录,不支持直接传入文件名做相对路径匹配,必须传入文件的完整绝对路径。 - 报错2:带
file://前缀的路径提示不存在
FFmpeg 是C层原生库,仅识别文件系统原生绝对路径,不识别URL协议头,file://前缀会被当成路径的一部分,导致路径非法。 - 报错3:可读取视频元信息但提示
FATAL: At least one output file must be specified
命令语法错误:-c:v是指定视频编码器的参数,后面必须紧跟编码器标识(例如copy/libx264),直接把输出文件名接在-c:v后,FFmpeg会将输出文件名识别为编码器参数值,无法匹配到输出文件路径,因此抛出该错误。
正确实现步骤
- 获取输入文件合法路径
不要直接使用URL的absoluteString属性拼接命令,需取URL的path属性拿到无协议头的绝对路径:guard let inputURL = Bundle.main.url(forResource: "Earth_Zoom_In", withExtension: "mov") else { return } let inputPath = inputURL.path - 生成合法输出路径
App Bundle目录是只读权限,输出文件必须存到沙盒可写目录,Caches目录是合规选择:let cacheDir = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true)[0] let outputPath = (cacheDir as NSString).appendingPathComponent("file1.mp4") - 拼接语法正确的处理命令
两个常用场景的可直接运行命令参考:- 不重新编码直接流复制(处理速度最快)
-i \(inputPath) -c:v copy -c:a copy \(outputPath) - 重新编码为H.264+AAC通用格式
-i \(inputPath) -c:v libx264 -c:a aac \(outputPath)
- 不重新编码直接流复制(处理速度最快)
注意:拼接命令时不需要手动给路径加引号,FFmpeg-kit的命令执行方法会自动处理路径包含空格等特殊字符的场景,手动加引号反而会导致路径识别失败。
命令执行后返回码为0即代表处理成功,可直接从outputPath位置读取处理完成的视频文件。
内容的提问来源于stack exchange,提问作者Xavi Font
相关产品推荐
相关产品推荐

