如何在上传时获得多个视频的持续时间


<!DOCTYPE html>
<html>
<body onload="myFunction()">
<input type="file" id="myFile" multiple size="50" onchange="myFunction()">
<p id="demo"></p>
<script>
function myFunction(){
var x = document.getElementById("myFile");
var txt = "";
if ('files' in x) {
if (x.files.length == 0) {
txt = "Select one or more files.";
} else {
for (var i = 0; i < x.files.length; i++) {
txt += "<br><strong>" + (i+1) + ". file</strong><br>";
var file = x.files[i];
if ('name' in file) {
txt += "name: " + file.name + "<br>";
}
if ('size' in file) {
txt += "size: " + file.size + " bytes <br>";
}
}
}
} 
else {
if (x.value == "") {
txt += "Select one or more files.";
} else {
txt += "The files property is not supported by your browser!";
txt  += "<br>The path of the selected file: " + x.value; // If the browser does not support the files property, it will return the path of the selected file instead. 
}
}
document.getElementById("demo").innerHTML = txt;
}
</script>
<p><strong>Tip:</strong> Use the Control or the Shift key to select multiple files.</p>
</body>
</html>

在这个文件中,他们列出了视频文件的名称和大小。但是如何列出上传的所有视频的持续时间以及文件名和文件大小。我可以在上传时获得单个视频持续时间。但很难找到它的多个视频。

您需要将文件"加载"到视频节点中,等待加载文件的元数据,并从加载的节点中提取持续时间。这里有一个从file中获取持续时间的函数。请注意,此函数返回一个promise:

function getDuration(file) {
let videoNode = document.createElement("video");
let promise = new Promise(function(resolve, reject) {
videoNode.addEventListener("loadedmetadata", function() {
resolve(videoNode.duration);
});
videoNode.addEventListener("error", function() {
reject(videoNode.error.message + "(" + videoNode.error.code + ")");
});
});
const URL = window.URL || window.webkitURL;
videoNode.src = URL.createObjectURL(file);
return promise;
}

然后你可以这样调用这个函数:

getDuration(file).then((duration) => {
// duration in seconds (as float)
});

注意在连接txt变量并输出它之前,您需要重新实现循环,等待promise完成。

相关内容

  • 没有找到相关文章

最新更新