我可以在Flow ● Slow and Fast Motion应用中看到我想要实现的完美示例。
可以通过向上或向下拖动曲线来改变视频的播放速率。在此状态下,视频也可以保存。
我正在寻找一种动态加速/缩小视频的方法,以便在播放视频时可以更改播放速率。
我做了什么
rate
的播放AVPlayer
属性。但它仅适用于播放速率的几个值(0.50,0.67,0.80,1.0,1.25,1.50和2.0),并且无法保存视频 scaleTimeRange(..)
的{{1}}属性。但是当您想要斜坡视频以逐渐减少慢/快动作时,它不起作用。
使用AVMutableComposition
和CAEAGLLayer
在屏幕上显示视频帧。但是我试图用这种方法试图实现慢/快动作的尝试并没有成功。
这一切花了我几个月的时间,我开始怀疑我是否能够完成这一切。
因此,任何建议都会非常有价值。
答案 0 :(得分:1)
在IOS中,MPNowPlayingInfoCenter
对象包含一个' nowPlayingInfo'其内容描述正在播放的项目的字典。建议您在“当前播放曲目”中开始播放。然后设置速度。在开发人员论坛上查看此thread。
你最终可能会得到类似this(但这是javascript)的内容,其中视频的播放速度加快了4倍。
document.querySelector('video').playbackRate = 4.0;
document.querySelector('video').play();

video{width:400px;
height:auto;}

<video controls preload="true" autoplay>
<source src="http://www.rachelgallen.com/nature.mp4" type="video/mp4" >
</video>
&#13;
答案 1 :(得分:0)
所以我不确定我是否完全理解你要使用的用例,但我认为
func setRate(_ rate: Float,
time itemTime: CMTime,
atHostTime hostClockTime: CMTime)
您正在寻找的东西。虽然这可能不是您所需要的,但我也不确定文档中的哪个位置正是您正在寻找的内容,但仅使用上述方法,您可以执行以下操作以可变速率保存视频:
1)使用上述方法在每秒以所需的速率播放整个视频(假设它不会太长,否则在某些设备上计算上不可能/超时值)。设计UI以调整每秒的速率。
2)在引擎盖下你可以实际以“逐帧”的速度播放视频并捕捉你想要的帧(在右边#这将给你你想要的速率)和瞧 - 保存正确的数字框架在一起(根据需要跳过/复制以根据“选择器”UI增加/降低所需的速率)你现在已经完成了你想要的东西
要清楚,我在这里谈论的是视频输出@ 60FPS每秒60帧。根据您从用户那里收到的任何UI步进器值,您可以将源视频中的帧“剪切并粘贴”到“目标”视频中(在截取的示例中,问题包含,作为我的基础),然后选择很多帧。 AKA如果用户说他们的20秒视频的秒数2-10应该是2X,那么这些秒的每一秒(如果以60 FPS拍摄)交替帧只能放置30帧。输出将在60FPS时看起来像2倍速(因为现在每1秒原始视频有30帧,在60 FPS时为0.5秒)。同样,任何价值都可以适当考虑在内:
^^的确切机制实际上可能会内置到AVPlayer中,但我没有找到详细信息,但仅此一点应该是让您朝着这个方向前进的良好开端。