当您将视频播放速率属性从 1 设置为 2,以及在 JavaScript 中从 1 设置为 0.5 时,到底发生了什么变化?
What exactly changes when you set a video playback rate attribute from 1 to 2, and, from 1 to 0.5 in JavaScript?
我试图搜索与此相关的信息,但没有找到任何合适的答案。
我进行了一项研究,我使用 JavaScript playbackRate
属性将视频的播放速率更改为 .5
和 2
,来自自然播放率。
我想知道Javascript如何改变视频播放速率。
例如当播放速率更改为 2
时,是否只会导致视频掉帧?
当播放速度减慢到 .5
时会发生什么?在这种情况下是否添加了框架?帧是如何添加的?音频是如何拉伸/修剪的?
据我了解,它们是视频帧速率的速度。 1 显示默认数量frames/second。
.5 每秒显示 default/2 帧。
5显示默认*5帧/秒,有效缩短视频时长5倍
http://www.w3schools.com/jsref/prop_video_playbackrate.asp
playbackspeed 指示视频的当前播放速度。
示例值:
1.0 is normal speed
0.5 is half speed (slower)
2.0 is double speed (faster)
-1.0 is backwards, normal speed
-0.5 is backwards, half speed
依赖于实现的行为
html5 中视频标签的行为取决于用户的浏览器以及他们 OS and/or 用于观看视频的设备。
不同的浏览器使用不同的 audio/video 编解码器来解码 audio/video 数据。以下是不同浏览器(和平台)中的视频格式和编解码器列表:
https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
您会注意到,虽然浏览器之间的编解码器可能不同(IE vs Firefox vs Chrome vs Safari vs Opera),但它们在浏览器的桌面版和移动版中也可能不同。解码器可以基于 OS(例如,iOS 仅支持 H.264 解码器)。一些浏览器允许用户通过浏览器插件添加解码器。
基本点是播放控件的行为方式(包括加速或减速)也将取决于编解码器的行为。当您提到 "JavaScript changing the playback rate" 时,浏览器只会要求底层视频编解码器更改视频的播放速率。
并非所有视频帧都具有同等重要性
您的问题似乎有一部分是 "If I speed up the video to twice the original speed, will it drop half of my frames?" 或 "If I slow down the video to half the original speed, will it duplicate every frame?"
答案在很大程度上取决于视频的内容和用于创建视频的编码类型。虽然将视频视为一系列帧(或图像)是合理的,但视频中的某些帧比其他帧更重要。大多数视频都表示为 I、P 和 B 帧。 I帧,也称为关键帧包含大部分信息,而P帧和B帧包含相对于I帧的差异信息。
例如,考虑一个视频序列,其中有一辆汽车在基本静止的背景中移动。表示此序列的第一帧将包含整个场景的图像,但大多数后续帧将仅包含有关移动汽车的信息。场景的其余部分是静态的 - 因此信息可以表示为差异图像。
当加快或减慢视频速度时,编解码器会尝试保留正在显示的视频序列中的大部分信息。因此,如果您加快视频速度,他们将优先显示关键帧和其他信息量大的帧,而不是场景大部分是静态的帧。因此,虽然当您将视频加速到两倍速度时,视频中有一半的帧可能会丢失,但您无法准确预测哪些帧会丢失。它不像第 2、4、6、8 帧都将被丢弃,而所有奇数帧将保留。
视频和音频加速可能会分开处理
这是一篇由 Firefox 开发人员于 2014 年 12 月撰写的关于 Firefox 视频播放速率实现的好文章:
http://blog.pearce.org.nz/2014/12/firefox-video-playbacks-skip-to-next.html
在那里他们提到 Firefox 希望在音频加速方面做得比视频加速更好,因为人们对音频中的故障比视频中的故障更敏感。在视频中,他们会尝试 "skip to the next key frame",即如果无法按时完成视频解码,则丢弃两个关键帧之间的所有帧。
我相信他们的实现在过去几年内一定有所发展,但本文让您对播放速率操作的复杂性有了一个很好的了解。此外,如果您试图将某些视频时刻与其各自的音频声音密切相关,则更改播放速度可能会很棘手。
在线视频流有很多内置优化
要记住的另一点是,在浏览器上访问视频数据时,大部分数据不在本地驱动器上 - 视频文件是通过异步加载的不可靠网络访问的。因此,编解码器有很多内置优化功能,即使在连接不佳的情况下也能显示视频数据。基本思想是显示具有最相关信息的帧或部分帧,同时丢弃其他信息。这再次与这样一个概念相关,即当您加速视频时很难预测哪些帧会被丢弃,甚至整个帧都将被丢弃的假设可能不正确。
恒定帧率与可变帧率
如果视频以两倍的速度播放将丢失一半帧的计算假设视频具有恒定的帧率。可变帧率视频在播放速率操作方面的处理方式不同。然后,更多的是总数据速率(每秒应显示多少数据)的问题,而不是每秒需要 dropped/added 多少帧。
我试图搜索与此相关的信息,但没有找到任何合适的答案。
我进行了一项研究,我使用 JavaScript playbackRate
属性将视频的播放速率更改为 .5
和 2
,来自自然播放率。
我想知道Javascript如何改变视频播放速率。
例如当播放速率更改为 2
时,是否只会导致视频掉帧?
当播放速度减慢到 .5
时会发生什么?在这种情况下是否添加了框架?帧是如何添加的?音频是如何拉伸/修剪的?
据我了解,它们是视频帧速率的速度。 1 显示默认数量frames/second。
.5 每秒显示 default/2 帧。
5显示默认*5帧/秒,有效缩短视频时长5倍
http://www.w3schools.com/jsref/prop_video_playbackrate.asp
playbackspeed 指示视频的当前播放速度。 示例值:
1.0 is normal speed
0.5 is half speed (slower)
2.0 is double speed (faster)
-1.0 is backwards, normal speed
-0.5 is backwards, half speed
依赖于实现的行为
html5 中视频标签的行为取决于用户的浏览器以及他们 OS and/or 用于观看视频的设备。
不同的浏览器使用不同的 audio/video 编解码器来解码 audio/video 数据。以下是不同浏览器(和平台)中的视频格式和编解码器列表:
https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats
您会注意到,虽然浏览器之间的编解码器可能不同(IE vs Firefox vs Chrome vs Safari vs Opera),但它们在浏览器的桌面版和移动版中也可能不同。解码器可以基于 OS(例如,iOS 仅支持 H.264 解码器)。一些浏览器允许用户通过浏览器插件添加解码器。
基本点是播放控件的行为方式(包括加速或减速)也将取决于编解码器的行为。当您提到 "JavaScript changing the playback rate" 时,浏览器只会要求底层视频编解码器更改视频的播放速率。
并非所有视频帧都具有同等重要性
您的问题似乎有一部分是 "If I speed up the video to twice the original speed, will it drop half of my frames?" 或 "If I slow down the video to half the original speed, will it duplicate every frame?"
答案在很大程度上取决于视频的内容和用于创建视频的编码类型。虽然将视频视为一系列帧(或图像)是合理的,但视频中的某些帧比其他帧更重要。大多数视频都表示为 I、P 和 B 帧。 I帧,也称为关键帧包含大部分信息,而P帧和B帧包含相对于I帧的差异信息。
例如,考虑一个视频序列,其中有一辆汽车在基本静止的背景中移动。表示此序列的第一帧将包含整个场景的图像,但大多数后续帧将仅包含有关移动汽车的信息。场景的其余部分是静态的 - 因此信息可以表示为差异图像。
当加快或减慢视频速度时,编解码器会尝试保留正在显示的视频序列中的大部分信息。因此,如果您加快视频速度,他们将优先显示关键帧和其他信息量大的帧,而不是场景大部分是静态的帧。因此,虽然当您将视频加速到两倍速度时,视频中有一半的帧可能会丢失,但您无法准确预测哪些帧会丢失。它不像第 2、4、6、8 帧都将被丢弃,而所有奇数帧将保留。
视频和音频加速可能会分开处理
这是一篇由 Firefox 开发人员于 2014 年 12 月撰写的关于 Firefox 视频播放速率实现的好文章:
http://blog.pearce.org.nz/2014/12/firefox-video-playbacks-skip-to-next.html
在那里他们提到 Firefox 希望在音频加速方面做得比视频加速更好,因为人们对音频中的故障比视频中的故障更敏感。在视频中,他们会尝试 "skip to the next key frame",即如果无法按时完成视频解码,则丢弃两个关键帧之间的所有帧。
我相信他们的实现在过去几年内一定有所发展,但本文让您对播放速率操作的复杂性有了一个很好的了解。此外,如果您试图将某些视频时刻与其各自的音频声音密切相关,则更改播放速度可能会很棘手。
在线视频流有很多内置优化
要记住的另一点是,在浏览器上访问视频数据时,大部分数据不在本地驱动器上 - 视频文件是通过异步加载的不可靠网络访问的。因此,编解码器有很多内置优化功能,即使在连接不佳的情况下也能显示视频数据。基本思想是显示具有最相关信息的帧或部分帧,同时丢弃其他信息。这再次与这样一个概念相关,即当您加速视频时很难预测哪些帧会被丢弃,甚至整个帧都将被丢弃的假设可能不正确。
恒定帧率与可变帧率
如果视频以两倍的速度播放将丢失一半帧的计算假设视频具有恒定的帧率。可变帧率视频在播放速率操作方面的处理方式不同。然后,更多的是总数据速率(每秒应显示多少数据)的问题,而不是每秒需要 dropped/added 多少帧。