mirror of
https://github.com/spacedeck/spacedeck-open.git
synced 2025-12-15 17:37:30 +01:00
add video conversion progress
This commit is contained in:
@@ -50,6 +50,8 @@ const convertableAudioTypes = [
|
|||||||
"audio/x-hx-aac-adts",
|
"audio/x-hx-aac-adts",
|
||||||
"audio/aac"];
|
"audio/aac"];
|
||||||
|
|
||||||
|
// ffmpeg progress
|
||||||
|
var duration = 0, time = 0, progress = 0;
|
||||||
|
|
||||||
function getDuration(localFilePath, callback){
|
function getDuration(localFilePath, callback){
|
||||||
exec.execFile("ffprobe", ["-show_format", "-of", "json", localFilePath], function(error, stdout, stderr) {
|
exec.execFile("ffprobe", ["-show_format", "-of", "json", localFilePath], function(error, stdout, stderr) {
|
||||||
@@ -58,6 +60,40 @@ function getDuration(localFilePath, callback){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getConversionProgress(content){
|
||||||
|
// get duration of source
|
||||||
|
var matches = (content) ? content.match(/Duration: (.*?), start:/) : [];
|
||||||
|
if( matches && matches.length>0 ){
|
||||||
|
var rawDuration = matches[1];
|
||||||
|
// convert rawDuration from 00:00:00.00 to seconds.
|
||||||
|
var ar = rawDuration.split(":").reverse();
|
||||||
|
duration = parseFloat(ar[0]);
|
||||||
|
if (ar[1]) duration += parseInt(ar[1]) * 60;
|
||||||
|
if (ar[2]) duration += parseInt(ar[2]) * 60 * 60;
|
||||||
|
}
|
||||||
|
// get the time
|
||||||
|
matches = content.match(/time=(.*?) bitrate/g);
|
||||||
|
if( matches && matches.length>0 ){
|
||||||
|
var rawTime = matches.pop();
|
||||||
|
// needed if there is more than one match
|
||||||
|
if (Array.isArray(rawTime)){
|
||||||
|
rawTime = rawTime.pop().replace('time=','').replace(' bitrate','');
|
||||||
|
} else {
|
||||||
|
rawTime = rawTime.replace('time=','').replace(' bitrate','');
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert rawTime from 00:00:00.00 to seconds.
|
||||||
|
ar = rawTime.split(":").reverse();
|
||||||
|
time = parseFloat(ar[0]);
|
||||||
|
if (ar[1]) time += parseInt(ar[1]) * 60;
|
||||||
|
if (ar[2]) time += parseInt(ar[2]) * 60 * 60;
|
||||||
|
|
||||||
|
//calculate the progress
|
||||||
|
progress = Math.round((time/duration) * 100);
|
||||||
|
}
|
||||||
|
return progress;
|
||||||
|
}
|
||||||
|
|
||||||
function createWaveform(fileName, localFilePath, callback){
|
function createWaveform(fileName, localFilePath, callback){
|
||||||
var filePathImage = localFilePath + "-" + (new Date().getTime()) + ".png";
|
var filePathImage = localFilePath + "-" + (new Date().getTime()) + ".png";
|
||||||
|
|
||||||
@@ -135,7 +171,7 @@ function convertVideo(fileName, filePath, codec, callback, progressCallback) {
|
|||||||
ff.stderr.on('data', function (data) {
|
ff.stderr.on('data', function (data) {
|
||||||
console.log('[ffmpeg-video] stderr: ' + data);
|
console.log('[ffmpeg-video] stderr: ' + data);
|
||||||
if (progressCallback) {
|
if (progressCallback) {
|
||||||
progressCallback(data);
|
progressCallback(getConversionProgress(""+data));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -157,7 +157,7 @@
|
|||||||
<source v-if="a.view.payload_uri && a.view.mime" v-bind:src="a.view.payload_uri" v-bind:type="a.view.mime" />
|
<source v-if="a.view.payload_uri && a.view.mime" v-bind:src="a.view.payload_uri" v-bind:type="a.view.mime" />
|
||||||
</video>
|
</video>
|
||||||
<div class="spinner"></div>
|
<div class="spinner"></div>
|
||||||
<div class="progress" v-bind:style="{width: a.view.progress+'%'}">{{a.description}}</div>
|
<div class="progress" v-bind:style="{width: a.description+'%'}">{{a.description}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- audio -->
|
<!-- audio -->
|
||||||
|
|||||||
Reference in New Issue
Block a user