Greasy Fork is available in English.

M3u8&mp4 Detect

try to take over the world!

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         M3u8&mp4 Detect
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @run-at       document-start
// @match        http*://*/*
// @grant        unsafeWindow
// @grant        GM_setClipboard
// @grant        GM_notification
// @grant        GM_log
// @grant        GM_registerMenuCommand
// @grant        GM_openInTab
// ==/UserScript==

let menu_id = {};
function handler_m3u8(url){
    if(menu_id[url] == undefined){
        let idx = Object.keys(menu_id).length+1;
        let _id = GM_registerMenuCommand(`[${idx}] m3u8 open and copy`, function(){
            GM_openInTab(url);
            let out = document.title.replace(/\||<|>|\?|\*|:|\/|\\|"|\n/g, ' ');
            let cmd = `ffmpeg -i "${url}" -vcodec copy -acodec copy -absf aac_adtstoasc "${out}.mp4"\n`;
            GM_setClipboard(cmd);
        });
        GM_registerMenuCommand(`[${idx}] copy command`, function(){
            let out = document.title.replace(/\||<|>|\?|\*|:|\/|\\|"|\n/g, ' ');
            let cmd = `ffmpeg -i "${url}" -vcodec copy -acodec copy -absf aac_adtstoasc "${out}.mp4"\n`;
            GM_setClipboard(cmd);
        });

        menu_id[url] = _id;
    }
}

function handler_mp4(url){
    if(menu_id[url] == undefined){
        let idx = Object.keys(menu_id).length+1;
        let _id = GM_registerMenuCommand(`[${idx}] mp4 open`, function(){
            GM_openInTab(url);
            GM_setClipboard(url);
        });
        GM_registerMenuCommand(`[${idx}] mp4 open`, function(){
            let out = document.title.replace(/\||<|>|\?|\*|:|\/|\\|"|\n/g, ' ');
            GM_download(url, `${out}.mp4`);
        });
        menu_id[url] = _id;
    }
}

(function(open) {
    XMLHttpRequest.prototype.open = function() {
        this.addEventListener("readystatechange", function() {
            //console.log(this.readyState);
        }, false);
        let url = arguments[1];
        if(/http.*\.m3u8.*/.test(url)){
            GM_log(url);
            GM_notification({
                'text': url,
                'title': "Got m3u8 url ",
                'timeout': 2000,
            });

            handler_m3u8(url);
        }
        else if(/http.*\.mp4.*/.test(url)){
            GM_log(url);
            GM_notification({
                'text': url,
                'title': "Got mp4 url ",
                'timeout': 2000,
            });
            handler_m3u8(url);
        }
        open.apply(this, arguments);
    };
})(XMLHttpRequest.prototype.open);