Javascript 视频持续时间不正确

Javascript 视频持续时间不正确,javascript,html5-video,Javascript,Html5 Video,我有个问题。Html5视频的持续时间与我从ffmpeg获得的不同。这就是一个例子。在这个视频有250帧和10秒,帧速率-25fps。在浏览器中,此视频的持续时间为10.026667s和251.666675帧。在视频的最后是两个重复帧。对我来说,帧数与现实相符是很重要的。为什么会发生这种情况?我如何修复它 1. 1. 下一帧 var currentFrame=$(“#currentFrame”); var video=$(“#video”); $(“#视频”)。在( “时间更新”, 功能(事件)

我有个问题。Html5视频的持续时间与我从ffmpeg获得的不同。这就是一个例子。在这个视频有250帧和10秒,帧速率-25fps。在浏览器中,此视频的持续时间为10.026667s和251.666675帧。在视频的最后是两个重复帧。对我来说,帧数与现实相符是很重要的。为什么会发生这种情况?我如何修复它


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));
};