使用 swift 将 "gif" 转换为视频
converting a "gif" to video using swift
我环顾四周,发现了一些东西,主要是我应该使用 AVAssetWriter 来做到这一点,但我对此和视频的经验为 0 editing/creation,所以它对我没有帮助很多,因为我似乎找不到任何我可以轻松修改的东西(或者至少不是我的知识水平),以便它按照我的意图工作。
我有一个应用程序,每 cft
(我从后端服务器获得的捕获帧时间)秒拍摄 n
张照片(由于显而易见的原因,它是双倍的)然后我使用显示这些帧一个 UIImageView 和帧每 dft
更改一次(显示帧时间,我也从后端服务器获得并且可能与 cft
不同)。到目前为止,没有什么复杂的。
现在的工作流程是,这些帧连同我想要的任何相关信息一起发送回服务器,然后服务器将使用 imagemagick 创建一个真实的 gif 文件,并使用 ffmpeg 创建一个 15 秒的视频,使用所述gif.
问题是这使得我的 heroku 服务器账单没有我想要的那么低,因为 dynos 上的内存有限,生成这些视频所需的时间约为 5-10 秒我相信(不确定,但比我想要的要长)
所以我的想法是让应用程序创建视频,因为他已经拥有为此所需的所有信息,然后只需将其与其余帧和相关数据一起上传即可。现在使用带宽比在服务器上购买额外的处理能力要便宜得多。
- 他有
n
帧要循环
- 他有一个浮点值,表示每帧应该持续多长时间
dft
- 他有一个 gpu 或者至少 cpu 比 dynos heroku 必须提供的更好
我也四处看看是否有人制作了关于如何在 swift 中使用 ffmpeg 的详尽教程,但我仍然没有找到任何符合我水平的东西,甚至没有找到教程本身,只有一些 GitHub 部分完成的项目 and/or 没有链接原始教程来理解思考过程。
如有任何关于此主题的 tips/code sample/tutorials,我将不胜感激。
我添加的 ffmpeg 命令行等同于我希望能够执行的操作(如果我可以直接将 ffmpeg 与 iOS 一起使用,这也很好)
ffmpeg -framerate 100/13 -loop 1 -i frame%02d.png -c:v libx264 -r 100/13 -pix_fmt yuv420p -t 0:15 instagram.mp4
基本上我对输入帧速率做了 100 / (dft * 100)
并且只是以相同的 fps 输出 15 秒。顺便说一句,如果有任何方法可以优化此命令以使其 运行 更快而不会降低质量,我也许可以保持当前使用 heroku 的方式,尽管我仍然更喜欢某些 iOS 解决方案。
在尝试了一些要点之后,我设法修改了 this solution 来处理我的图像数组及其相关信息,而不会冻结我的应用程序
我环顾四周,发现了一些东西,主要是我应该使用 AVAssetWriter 来做到这一点,但我对此和视频的经验为 0 editing/creation,所以它对我没有帮助很多,因为我似乎找不到任何我可以轻松修改的东西(或者至少不是我的知识水平),以便它按照我的意图工作。
我有一个应用程序,每 cft
(我从后端服务器获得的捕获帧时间)秒拍摄 n
张照片(由于显而易见的原因,它是双倍的)然后我使用显示这些帧一个 UIImageView 和帧每 dft
更改一次(显示帧时间,我也从后端服务器获得并且可能与 cft
不同)。到目前为止,没有什么复杂的。
现在的工作流程是,这些帧连同我想要的任何相关信息一起发送回服务器,然后服务器将使用 imagemagick 创建一个真实的 gif 文件,并使用 ffmpeg 创建一个 15 秒的视频,使用所述gif.
问题是这使得我的 heroku 服务器账单没有我想要的那么低,因为 dynos 上的内存有限,生成这些视频所需的时间约为 5-10 秒我相信(不确定,但比我想要的要长)
所以我的想法是让应用程序创建视频,因为他已经拥有为此所需的所有信息,然后只需将其与其余帧和相关数据一起上传即可。现在使用带宽比在服务器上购买额外的处理能力要便宜得多。
- 他有
n
帧要循环 - 他有一个浮点值,表示每帧应该持续多长时间
dft
- 他有一个 gpu 或者至少 cpu 比 dynos heroku 必须提供的更好
我也四处看看是否有人制作了关于如何在 swift 中使用 ffmpeg 的详尽教程,但我仍然没有找到任何符合我水平的东西,甚至没有找到教程本身,只有一些 GitHub 部分完成的项目 and/or 没有链接原始教程来理解思考过程。
如有任何关于此主题的 tips/code sample/tutorials,我将不胜感激。
我添加的 ffmpeg 命令行等同于我希望能够执行的操作(如果我可以直接将 ffmpeg 与 iOS 一起使用,这也很好)
ffmpeg -framerate 100/13 -loop 1 -i frame%02d.png -c:v libx264 -r 100/13 -pix_fmt yuv420p -t 0:15 instagram.mp4
基本上我对输入帧速率做了 100 / (dft * 100)
并且只是以相同的 fps 输出 15 秒。顺便说一句,如果有任何方法可以优化此命令以使其 运行 更快而不会降低质量,我也许可以保持当前使用 heroku 的方式,尽管我仍然更喜欢某些 iOS 解决方案。
在尝试了一些要点之后,我设法修改了 this solution 来处理我的图像数组及其相关信息,而不会冻结我的应用程序