mpv, reload video |
[Mar. 29th, 2018|04:48 pm] |
тупоскрипт для релоада текущего видео в 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 |
|
|
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]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | March 31st, 2018 - 03:32 pm |
---|
| | | (Link) |
|
это просто охуеть какой ты умный!
From: | (Anonymous) |
Date: | March 31st, 2018 - 04:52 pm |
---|
| | | (Link) |
|
так читать легче. | |