Javascript 视频持续时间不正确
我有个问题。Html5视频的持续时间与我从ffmpeg获得的不同。这就是一个例子。在这个视频有250帧和10秒,帧速率-25fps。在浏览器中,此视频的持续时间为10.026667s和251.666675帧。在视频的最后是两个重复帧。对我来说,帧数与现实相符是很重要的。为什么会发生这种情况?我如何修复它Javascript 视频持续时间不正确,javascript,html5-video,Javascript,Html5 Video,我有个问题。Html5视频的持续时间与我从ffmpeg获得的不同。这就是一个例子。在这个视频有250帧和10秒,帧速率-25fps。在浏览器中,此视频的持续时间为10.026667s和251.666675帧。在视频的最后是两个重复帧。对我来说,帧数与现实相符是很重要的。为什么会发生这种情况?我如何修复它 1. 1. 下一帧 var currentFrame=$(“#currentFrame”); var video=$(“#video”); $(“#视频”)。在( “时间更新”, 功能(事件)
1.
1.
下一帧
var currentFrame=$(“#currentFrame”);
var video=$(“#video”);
$(“#视频”)。在(
“时间更新”,
功能(事件){
onTrackedVideoFrame(this.currentTime,this.duration);
}
);
函数onTrackedVideoFrame(当前时间、持续时间){
$(“#当前”).text(当前时间+”+(当前时间*25+1));
$(“#持续时间”).text(持续时间+”+(持续时间*25+1));
};
我认为主要问题在于你计算帧的方式。似乎没有一种可靠的方式逐帧浏览html5视频,但chrome和Firefox确实提供了一些 通过检查
webkitDecodedFrames | | mozParsedFrames
,您将获得有关浏览器实际解译并从媒体中提取的帧数的更可靠信息。Firefox还有一个
mozPresentedFrames
计数器,允许您检查呈现给渲染管道的帧数
$('#video').on('end',函数(e){$(“#realDur>span”).text(this.mozParsedFrames | | this.webkitdecodedframecont);
});
$(“#视频”)。在(
“时间更新”,
功能(事件){
onTrackedVideoFrame(this.currentTime、this.duration、this.mozPresentedFrames);
}
);
功能onTrackedVideoFrame(当前时间、持续时间、rCur、rDur){
$(“#currentTime>span”).text(currentTime);
$(“#currentFrame>span”).text(currentTime*25+1);
$(“#持续时间>跨度”)。文本(持续时间);
$(“#durationFrame>span”).text(duration*25+1);
$(“#realCur>span”).text(rCur);
};代码>
span{float:right;margin right:6em;}
浏览器的当前时间
浏览器的视频持续时间
脚本计算当前帧
脚本计算的持续时间(以帧为单位)
浏览器计算的当前帧
浏览器计算的持续时间(以帧为单位)
在哪个浏览器中播放
?您是如何获得这些值的?看起来奇怪的是,帧数(webkitDecodedFrameCount
|
mozParsedFrames)返回浮点数对于我来说,结果会因使用的浏览器而有所不同,甚至软件也会有所不同used@KenFyrstenberg Chrome、Safari、Opera、Firefox@kaido当前帧按当前时间获取*fpsI是添加小提琴示例。感谢您的回答!
<div class="frame">
<div id="current">1</div>
<div id="duration">1</div>
</div>
<video height="180" width="100%" id="video">
<source src="http://www.w3schools.com/html/mov_bbb.mp4"></source>
</video>
<button onclick="document.getElementById('video').currentTime += (1 / 25);">Next Frame</button><br/>
var currentFrame = $('#currentFrame');
var video = $('#video');
$("#video").on(
"timeupdate",
function(event){
onTrackedVideoFrame(this.currentTime, this.duration);
}
);
function onTrackedVideoFrame(currentTime, duration){
$("#current").text(currentTime + ' ' + (currentTime*25+1));
$("#duration").text(duration + ' ' + (duration*25+1));
};