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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:51:21