11 video opengl-es playback avfoundation ios
我想要实现的完美示例可以在Flow●Slow and Fast Motion应用程序中看到.
可以通过向上或向下拖动曲线上的点来改变视频的回放速率.视频也可以保存在此状态.
我正在寻找一种动态加速/缩小视频的方法,以便在播放视频时可以更改播放速率.
我做了什么
rate属性.AVPlayer但它仅适用于播放速率的几个值(0.50,0.67,0.80,1.0,1.25,1.50和2.0),并且无法保存视频的scaleTimeRange(..)财产AVMutableComposition.但是,当你想不工作坡道的逐渐递减快/慢运动的视频.
使用CAEAGLLayer和在屏幕上显示视频帧CADisplayLink.但是我试图用这种方法试图实现慢/快动作的尝试并没有成功.
这一切花了我几个月的时间,我开始怀疑我是否能够完成这一切.
因此,任何建议都是非常有价值的.
所以我不确定我完全理解你想要的用例,但我认为
func setRate(_ rate: Float,
time itemTime: CMTime,
atHostTime hostClockTime: CMTime)
Run Code Online (Sandbox Code Playgroud)
是您正在寻找的东西。虽然这可能不完全是您所需要的,但我也不确定文档中的哪里正是您正在寻找的内容,但仅使用上述方法,您可以执行以下操作以可变速率保存视频:
使用上述方法以每秒所需的速率播放整个视频(假设它不太长,否则在某些设备上这在计算上是不可能的/值得超时)。设计 UI 来调整每秒速率。
在引擎盖下,您实际上可以以该速度“逐帧”播放视频并捕获您想要的帧(在右侧的#中,这将为您提供您想要的速率),瞧——将正确数量的帧保存在一起(跳过/根据需要进行复制以根据“选择器”用户界面增加/降低所需的速率)您现在已经完成了您想要的
需要明确的是,我在这里讨论的是 60FPS 的视频输出,每秒有 60 帧。您可以根据从用户那里收到的任何 UI 步进器值(在问题包含的屏幕截图示例中,作为我的基础),从字面上将源视频中的帧“剪切并粘贴”到“目标”视频中,然后选择那么多帧。又名,如果用户说 20 秒视频的第 2-10 秒应该为 2X,则只为每一秒(如果以 60 FPS 拍摄)交替帧放入 30 帧。在 60 FPS 下,输出看起来像是 2 倍速度(因为原始视频现在每 1 秒有 30 帧,在 60 FPS 下为 0.5 秒)。同样,任何值都可以适当地分解为:
^^ 的确切机制实际上可能内置于 AVPlayer 中,我没有找到详细信息,但这本身就应该是让您朝着这个方向前进的一个良好的开始。
| 归档时间: |
|
| 查看次数: |
1377 次 |
| 最近记录: |