First...
确保您了解哪些"软件包"可用.您可以自己构建它,但老实说,除非您有非常具体的原因,否则我只会使用预构建包.请参阅ffmpeg-kit README.MD个套餐中的"8个套餐",了解优惠内容
Second
转到Releases并找到您感兴趣的版本(我使用了FFmpegKit Native v4.5.1
),向下滚动并展开您感兴趣的版本的"assets资源 "列表.
在这个实验中,我用了ffmpeg-kit-full-4.5.1-macos-xcframework.zip.如果您在iOS中执行此操作,工作流基本相同,只需考虑到您的文件访问是Sandbox 式的(是的,我已经这样做了,是的,与桌面相比,转码视频需要很长时间)
Third
创建新的Xcode项目.同样,在这个实验中,我创建了一个使用"故事板"作为UI的"MacOS应用程序"(你可以try 使用SwiftUI,但这是这个示例现在不需要的另一层复杂性)
- 解压缩上一步下载的
*xcframework.zip
个文件.
- 在Xcode中, Select "项目" node , Select MacOS目标(???? 只有一个目标).
- Select "常规",将
*.xcframework
个文件夹从Finder拖到项目的"框架、库和嵌入内容"部分
Forth
在这个实验中,我打开了ViewController
类(由Xcode自动创建)并简单地添加了...
func syncCommand() {
guard let session = FFmpegKit.execute("-i file1.mp4 -c:v file1.mp4") else {
print("!! Failed to create session")
return
}
let returnCode = session.getReturnCode()
if ReturnCode.isSuccess(returnCode) {
} else if ReturnCode.isCancel(returnCode) {
} else {
print("Command failed with state \(FFmpegKitConfig.sessionState(toString: session.getState()) ?? "Unknown") and rc \(returnCode?.description ?? "Unknown").\(session.getFailStackTrace() ?? "Unknown")")
}
}
func asyncCommand() {
FFmpegKit.executeAsync("-i file1.mp4 -c:v file2.mp4") { session in
guard let session = session else {
print("!! Invalid session")
return
}
guard let returnCode = session.getReturnCode() else {
print("!! Invalid return code")
return
}
print("FFmpeg process exited with state \(FFmpegKitConfig.sessionState(toString: session.getState()) ?? "Unknown") and rc \(returnCode).\(session.getFailStackTrace() ?? "Unknown")")
} withLogCallback: { logs in
guard let logs = logs else { return }
// CALLED WHEN SESSION PRINTS LOGS
} withStatisticsCallback: { stats in
guard let stats = stats else { return }
// CALLED WHEN SESSION GENERATES STATISTICS
}
}
上面的代码基本上是"2.执行同步FFmpeg命令"和"4.通过提供特定于会话的执行/日志(log)/会话回调来执行异步FFmpeg命令."ffmpeg-kit/apple个文档中的示例
!! Important !!-别忘了在文件开头加import ffmpegkit
!
现在,应该可以编译了(您将得到一些关于未使用logs
和stats
的警告,您可以忽略它们).
After thoughts...
您现在应该意识到,我提供的代码实际上不会运行,原因有二.
- 实际上,我没有从任何地方调用任何一个
func
(我将其放在ViewController
类的viewDidLoad
func
中进行了测试)
execute
命令中使用的输入文件不存在.您需要提供对实际文件的实际引用,最好使用绝对路径.然而,这可能需要您更改目标"签名和功能"下的"应用程序Sandbox "设置
- Xcode自动代码建议不错,我主要是用它来填写上面的内容,并以Obj-c代码为起点.
此外,请注意,所以不是"教程"网站,Xcode是一个复杂的野兽,您可能需要花一些时间探索其他资源以克服遇到的问题