Hi, as the title say mgpai's script seems not to work fully. I'm talking about
Save youtube links and basic information to a html page
Code:
// Save youtube links and basic information to a html page.
// Trigger required: "A Download Stopped"
// Get link property
String.prototype.prop = function() {
return link.getProperty(this);
};
// Convert duration to hh:mm:ss.ms format
Date.prototype.duration = function() {
var ms = parseInt((this % 1000) / 100);
var ss = parseInt((this / 1000) % 60);
var mm = parseInt((this / (1000 * 60)) % 60);
var hh = parseInt((this / (1000 * 60 * 60)) % 24);
hh = (hh < 10) ? "0" + hh : hh;
mm = (mm < 10) ? "0" + mm : mm;
ss = (ss < 10) ? "0" + ss : ss;
return hh + ":" + mm + ":" + ss + "." + ms;
};
// Get media bitrate
Number.prototype.toKbps = function() {
return ((this / mediaDuration) * 8).toFixed(2);
};
// youtube media check
var youtubeMedia = link.getHost() == "youtube.com" && (/\.(m4a|aac|ogg|mp3|mp4|webm)$/).test(link.getName());
// Get Data
if (youtubeMedia) {
var output = [];
var variant = JSON.parse("YT_VARIANT".prop());
var variantData = JSON.parse(variant.data);
var youtube = "<a href=\"" + "http"+ "s://youtube.com/";
var saveFile = link.getDownloadPath() + ".info.html";
var fileSize = link.getBytesTotal();
var demux = (/DEMUX/).test(variant.id);
var audioSize = !demux ? "DASH_AUDIO_SIZE".prop() : fileSize;
var videoSize = "DASH_VIDEO_SIZE".prop();
var mediaDuration = "YT_DURATION".prop();
var data = {
Video: youtube + "watch?v=" + "YT_ID".prop() + "\">" + "YT_TITLE".prop() + "</a>",
Playlist: "YT_PLAYLIST_ID".prop() && "YT_PLAYLIST_TITLE".prop() ? youtube + "playlist?list=" + "YT_PLAYLIST_ID".prop() + "\">" + "YT_PLAYLIST_TITLE".prop() + "</a>" : null,
User: youtube + "user/" + "YT_USER_NAME".prop() + "\">" + "YT_USER_NAME".prop() + "</a>",
Channel: youtube + "channel/" + "YT_CHANNEL_ID".prop() + "\">" + "YT_CHANNEL".prop() + "</a>" + "\r\n",
Published: new Date("YT_DATE".prop()).toDateString(),
Size: (fileSize / 1048576).toFixed(2) + " MiB",
Duration: new Date(mediaDuration).duration(),
Width: variantData.width,
Height: variantData.height,
FPS: variantData.fps,
Audio_Bitrate: audioSize.toKbps() + " kbps",
Video_Bitrate: !demux && fileSize > audioSize ? videoSize.toKbps() + " kbps" : null,
Overall_Bitrate: !demux && fileSize > audioSize ? fileSize.toKbps() + " kbps" : null,
Variant_ID: variant.id,
};
// Generate output[]
for (i in data) {
if (data[i] && data[i] != -1) {
output.push(i.replace(/_/g, " ") + " : " + data[i]);
}
}
// Format output[] and save to html file
try {
deleteFile(saveFile, false); // Delete info file if it already exists on the disk.
writeFile(saveFile, "<pre>" + output.join("<br>") + "</pre>", false);
} catch (err) {
log(err + "");
}
}
When video stops downloading I get error: "TypeError: Cannot call method 'toKbps' of null (#43)" which results in script turning off in the Event Scripter which is irritating. I removed lines which had "toKbps" in them and there was no error but I would like to keep info regarding bitrate in html. I know that the script was written in 2016. I presume that there were some changes in youtube which make parts of this script to not work ideally. Any ideas how to fix the script?