crypt of decay - mpv, reload video [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

mpv, reload video [Mar. 29th, 2018|04:48 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
тупоскрипт для релоада текущего видео в mpv. нужен затем, что иногда какая-нибудь сраная труба залипает (например, если поставить видео на паузу и оставить надолго; или при некоторых seek-ах). отличие от уже существующего в сети такого скрипта в том, что существующий скрипт сралебал плэйлисты, и по reload заменяет весь плейлист на одно текущее видео.

сайд-эффект: после релоада в плейлисте это видео будет проигрываться с позиции релоада. это чинибельно, но мне лениво (хоть в комментариях и написано «dunno how to solve it»).


LyoKICogV2hlbiBhbiBvbmxpbmUgdmlkZW8gaXMgc3R1Y2sgYnVmZmVyaW5nIG9yIGdvdCB2ZXJ5
IHNsb3cgQ0ROCiAqIHNvdXJjZSwgcmVzdGFydGluZyBvZnRlbiBoZWxwcy4gVGhpcyBzY3JpcHQg
cHJvdmlkZXMgcmVsb2FkaW5nCiAqIG9mIHZpZGVvcyB0aGF0IGRvZXNuJ3QgaGF2ZSBidWZmZXJp
bmcgcHJvZ3Jlc3MgZm9yIHNvbWUKICogdGltZSB3aGlsZSBrZWVwaW5nIHRoZSBjdXJyZW50IHRp
bWUgcG9zaXRpb24uIFVzZSBgQ3RybCtyYAogKiBrZXliaW5kaW5nIHRvIHJlbG9hZCB2aWRlby4K
ICovCgoKdmFyIHNldHRpbmdzID0gewogIHJlbG9hZF9rZXlfYmluZGluZzogIkN0cmwrciIsCn07
CgoKLy8gVHJpZXMgdG8gZGV0ZXJtaW5lIGxpdmUgc3RyZWFtIHZzLiBwcmUtcmVjb3JkZXJlZCBW
T0QuCi8vIFZPRCBoYXMgZml4ZWQgc3RhcnQgcG9zaXRpb24uIFdoZW4gcmVsb2FkaW5nIHZvZCwg
dG8ga2VlcCBjdXJyZW50Ci8vIHRpbWUgcG9zaXRpb24gd2Ugc2hvdWxkIHByb3ZpZGUgb2Zmc2V0
IGZyb20gdGhlIHN0YXJ0LgovLyBTdHJlYW0gZG9lc24ndCBoYXZlIGZpeGVkIHN0YXJ0LiBEZWNl
bnQgY2hvaWNlIHdvdWxkIGJlIHRvIHJlbG9hZAovLyBzdHJlYW0gZnJvbSBpdCdzIGN1cnJlbnQg
J2xpdmUnIHBvc2l0b24uIFNvIHdlIGRvbid0IHBhc3MgdGhlIG9mZnNldCB3aGVuCi8vIHJlbG9h
ZGluZyBzdHJlYW1zLgpmdW5jdGlvbiBpc1N0cmVhbSAoKSB7CiAgcmV0dXJuIChtcC5nZXRfcHJv
cGVydHlfbmF0aXZlKCJkdXJhdGlvbiIpID8gZmFsc2UgOiB0cnVlKTsgLy8gc29ycnkKfQoKCmZ1
bmN0aW9uIGR1bXBQbGF5bGlzdCAoKSB7CiAgdmFyIHBsaXN0ID0gSlNPTi5wYXJzZShtcC5nZXRf
cHJvcGVydHkoInBsYXlsaXN0IikpOwogIHByaW50KCI9PT0gUExBWUxJU1Qgb2YgIitwbGlzdC5s
ZW5ndGgrIiBpdGVtcyA9PT0iKTsKICBmb3IgKHZhciBmID0gMDsgZiA8IHBsaXN0Lmxlbmd0aDsg
KytmKSBwcmludCgiICAiK2YrIjogIitwbGlzdFtmXS5maWxlbmFtZSsiOyBjdXJyZW50PSIrcGxp
c3RbZl0uY3VycmVudCk7Cn0KCgovLyB0aGUgZHJhd2JhY2sgaXMgdGhhdCBgc3RhcnRgIG9wdGlv
biB3aWxsIGJlIGtlcHQgZm9yIGJhY2svZm9yd2FyZDsgZHVubm8gaG93IHRvIHNvbHZlIGl0CmZ1
bmN0aW9uIHJlbG9hZF9yZXN1bWUgKCkgewogIC8vcHJpbnQoInJlbG9hZGluZy4uLiIpOwoKICB2
YXIgdGltZXBvcyA9IG1wLmdldF9wcm9wZXJ0eSgidGltZS1wb3MiKTsKCiAgdmFyIHBscG9zID0g
cGFyc2VJbnQobXAuZ2V0X3Byb3BlcnR5KCJwbGF5bGlzdC1wb3MiKSwgMTApOwogIHZhciBwbGNv
dW50ID0gcGFyc2VJbnQobXAuZ2V0X3Byb3BlcnR5KCJwbGF5bGlzdC1jb3VudCIpLCAxMCk7CiAg
Ly9wcmludCgiY3VycmVudCBmaWxlIGlzICIrcGxwb3MrIiBvZiAiK3BsY291bnQrIjsgc3RyZWFt
OiAiK2lzU3RyZWFtKCkpOwoKICBwbHBvcyArPSAxOyAvLyBzbyB3ZSdsbCBwdXQgbmV3IGZpbGUg
KmFmdGVyKiB0aGlzIG9uZQoKICAvLyBhcHBlbmQgY3VycmVudCBmaWxlIGFnYWluCiAgdmFyIHBh
dGggPSBtcC5nZXRfcHJvcGVydHkoInBhdGgiKTsKICBpZiAoIWlzU3RyZWFtKCkpIHsKICAgIG1w
LmNvbW1hbmR2KCJsb2FkZmlsZSIsIHBhdGgsICJhcHBlbmQiLCAic3RhcnQ9KyIrdGltZXBvcyk7
CiAgfSBlbHNlIHsKICAgIG1wLmNvbW1hbmR2KCJsb2FkZmlsZSIsIHBhdGgsICJhcHBlbmQiKTsK
ICB9CgogIC8vIG1vdmUgYXBwZW5kZWQgZmlsZSBuZXh0IHRvIHRoZSBjdXJyZW50IG9uZQogIC8v
ZHVtcFBsYXlsaXN0KCk7CiAgdmFyIHJlcyA9IG1wLmNvbW1hbmR2KCJwbGF5bGlzdC1tb3ZlIiwg
cGxjb3VudCwgcGxwb3MpOwogIC8vcHJpbnQoInJlcz0iK3Jlcyk7CiAgLy9kdW1wUGxheWxpc3Qo
KTsKCiAgLy8gdGhpcyB3aWxsIHN0YXJ0IHBsYXlpbmcgdGhlIG5leHQgZmlsZQogIG1wLmNvbW1h
bmR2KCJwbGF5bGlzdC1yZW1vdmUiLCAiY3VycmVudCIpOwp9CgoKaWYgKHR5cGVvZihzZXR0aW5n
cy5yZWxvYWRfa2V5X2JpbmRpbmcpID09PSAic3RyaW5nIiAmJiBzZXR0aW5ncy5yZWxvYWRfa2V5
X2JpbmRpbmcubGVuZ3RoID4gMCkgewogIG1wLmFkZF9rZXlfYmluZGluZyhzZXR0aW5ncy5yZWxv
YWRfa2V5X2JpbmRpbmcsICJyZWxvYWRfcmVzdW1lIiwgcmVsb2FkX3Jlc3VtZSk7Cn0K
Linkmeow!

Comments:
From:(Anonymous)
Date:March 31st, 2018 - 03:29 pm
(Link)
/*
* When an online video is stuck buffering or got very slow CDN
* source, restarting often helps. This script provides reloading
* of videos that doesn't have buffering progress for some
* time while keeping the current time position. Use `Ctrl+r`
* keybinding to reload video.
*/


var settings = {
reload_key_binding: "Ctrl+r",
};


// Tries to determine live stream vs. pre-recordered VOD.
// VOD has fixed start position. When reloading vod, to keep current
// time position we should provide offset from the start.
// Stream doesn't have fixed start. Decent choice would be to reload
// stream from it's current 'live' positon. So we don't pass the offset when
// reloading streams.
function isStream () {
return (mp.get_property_native("duration") ? false : true); // sorry
}


function dumpPlaylist () {
var plist = JSON.parse(mp.get_property("playlist"));
print("=== PLAYLIST of "+plist.length+" items ===");
for (var f = 0; f < plist.length; ++f) print(" "+f+": "+plist[f].filename+"; current="+plist[f].current);
}


// the drawback is that `start` option will be kept for back/forward; dunno how to solve it
function reload_resume () {
//print("reloading...");

var timepos = mp.get_property("time-pos");

var plpos = parseInt(mp.get_property("playlist-pos"), 10);
var plcount = parseInt(mp.get_property("playlist-count"), 10);
//print("current file is "+plpos+" of "+plcount+"; stream: "+isStream());

plpos += 1; // so we'll put new file *after* this one

// append current file again
var path = mp.get_property("path");
if (!isStream()) {
mp.commandv("loadfile", path, "append", "start=+"+timepos);
} else {
mp.commandv("loadfile", path, "append");
}

// move appended file next to the current one
//dumpPlaylist();
var res = mp.commandv("playlist-move", plcount, plpos);
//print("res="+res);
//dumpPlaylist();

// this will start playing the next file
mp.commandv("playlist-remove", "current");
}


if (typeof(settings.reload_key_binding) === "string" && settings.reload_key_binding.length > 0) {
mp.add_key_binding(settings.reload_key_binding, "reload_resume", reload_resume);
}
[User Picture]
From:[info]ketmar
Date:March 31st, 2018 - 03:32 pm
(Link)
это просто охуеть какой ты умный!
From:(Anonymous)
Date:March 31st, 2018 - 04:52 pm
(Link)
так читать легче.