VideoHelp Forum




+ Reply to Thread
Results 1 to 9 of 9
  1. Member
    Join Date
    Feb 2024
    Location
    Thailand
    Search Comp PM
    I'm not sure about the instructions for use. Is mine correct? Because when I use this command, I get a file time of only 0 seconds. I want to know if I need to use it. Do you have anything else to order?

    Command code used.

    Code:
        mp4decrypt.exe --key %Keys1% "vid.mp4" "vid_dec.mp4"
        mp4decrypt.exe --key %Keys2% "aud.m4a" "aud_dec.mp4"
    Link Audio Data
    Code:
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/ea9cc9c507159289bd83c4b3577104b9.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=489ec7ebfb07c0de261f85903a10d16a
    Link Video Data
    Code:
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/af3e97f957f3c1eceb8836204eece0f9.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=74563cf7996d26bb571e073c5745f0a4
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/f8c8e4307fb39715cf017b8c504a2945.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=f8fb126caaf3f5c6d5f7bc3648106dbf
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/9d7ac95f21fb7f4ed87ae56bdd34cc70.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=1575a454832d88a2a48cc30600f7473b
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/4f115af6b635227faf8bdba337626dae.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=013ab5b1c32773dcee7496fd92e835a3
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/4fa6d7d73e1ef0624afb874c5ffbe0ae.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=45992c898d87e934e770db279fdf5a45
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/713bd901e27845f77233f58b1d6f356b.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=9fabd53e0599c3415be0ea8ec30e0957
    
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/953d81347cebdb2354fa9e4d6ecd0e50.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=dfea8bc9a22add87cd48657d2b78df74
     
    https://pcw-data.video.iqiyi.com/videos/v0/20250211/8d/ad/81bf3bf6602fdfa9277f6a31453ad211.m4s?qdv=3&qd_uid=30102862835&qd_vip=1&qd_vipres=2&qd_did=15f97acb0ee33569e009c5629778487b&qd_src=01010031010014000000&qd_tm=1739956998643&qd_p=ab066f4e&qd_k=0&qd_index=vod&qd_tvid=1637721851238600&dis_hbr=1&bid=200&fr=25&br=&vcodec=2&cpt=0&qd_sc=1bd10711897901a36c39da6f0ae20754
    Key Audio
    Code:
    596400576987ea8a4aa0fb747f24c000:564f104a5ccb0d689035342497f98fab
    Key Video
    Code:
    596400576987ea8a4aa0fb747f24c001:98b11c02b8aaad1b94e037ef067fbb91
    File Audio For decoding to get authentic files.
    https://files.videohelp.com/u/309094/aud.m4a

    File Video For decoding to get authentic files.
    https://files.videohelp.com/u/309094/vid.mp4
    Last edited by evilragnarok; 20th Feb 2025 at 07:44.
    Quote Quote  
  2. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Video URL?
    --[----->+<]>.++++++++++++.---.--------.
    [*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*]
    Quote Quote  
  3. The files have no header, so decryption does not work. Must be merged with 'init' file.
    Quote Quote  
  4. Member
    Join Date
    Feb 2024
    Location
    Thailand
    Search Comp PM
    Originally Posted by 2nHxWW6GkN1l916N3ayz8HQoi View Post
    Video URL?
    It's just a test. Why isn't the file included? Not actually loaded

    If you want to try this, here is the link.
    https://www.iq.com/play/oc8m44l15g?lang=th_th
    Quote Quote  
  5. Member
    Join Date
    Feb 2024
    Location
    Thailand
    Search Comp PM
    Originally Posted by LZAA View Post
    The files have no header, so decryption does not work. Must be merged with 'init' file.
    Do you know anything about decryption? I've been looking for two days and still don't understand. It's the same. Can you teach me that method?
    Quote Quote  
  6. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    Originally Posted by evilragnarok View Post
    Code:
    aa9916d0c78bdb894ad15a5d29b50e00:e8e3709881c9887e117e9ebb8d41ac18
    aa9916d0c78bdb894ad15a5d29b50e02:93f8f3f52d765584261b8021e06b9041
    https://www.swisstransfer.com/d/4b3d57f7-fac5-40b4-9522-1a539e06dc3a
    --[----->+<]>.++++++++++++.---.--------.
    [*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*]
    Quote Quote  
  7. Member
    Join Date
    Feb 2024
    Location
    Thailand
    Search Comp PM
    Originally Posted by 2nHxWW6GkN1l916N3ayz8HQoi View Post
    Originally Posted by evilragnarok View Post
    Code:
    aa9916d0c78bdb894ad15a5d29b50e00:e8e3709881c9887e117e9ebb8d41ac18
    aa9916d0c78bdb894ad15a5d29b50e02:93f8f3f52d765584261b8021e06b9041
    https://www.swisstransfer.com/d/4b3d57f7-fac5-40b4-9522-1a539e06dc3a
    I was curious how to retrieve the file, didn't want it to be loaded, but thanks for the loading.
    Quote Quote  
  8. Feels Good Man 2nHxWW6GkN1l916N3ayz8HQoi's Avatar
    Join Date
    Jan 2024
    Location
    Pepe Island
    Search Comp PM
    You can download using python and n_m3u8dl-re. Make sure you have python installed (including pip) and n_m3u8dl-re installed (including mp4decrypt, ffmpeg). The reason you need python is because it is tedious to append manually 30 fragments for a 3 hour video worst case. You need Thailand IP for that video. Make sure you get the right keys for your wanted resolution because not only do they have separate keys for audio/video, but also for resolution. So for a video with 4 different resolutions, you would have at least 8 unique keys. But you just need the ones for your res.

    The next steps are done on firefox but you should be able to use other browsers. Now select any unwanted res, wait for the video to switch completely because it notifies you ("You are watching in 360p", etc). This is done to force specific requests to happen since the site loads the default res m3u8 on their html page and it is a hassle to extract it.

    Then refresh page, wait for it to load on your bad unwanted res. After it loads completely, pause the video. Inspect network requests, filter for the text: "/dash?" . You may wanna zoom in/out so you can see the quality button. Click on it so you can select the wanted res. Once you do that and the dash request appears, click on it and copy the json raw response.

    Image
    [Attachment 85660 - Click to enlarge]


    Then make an empty folder. Create the files (double check so they're the right extension)
    1. main.py
    2. input.txt (in this file drop the copied dash raw json response)

    In main.py drop this script
    Code:
    import base64
    import json
    
    INPUT_FILE = "input.txt"
    
    
    def save_init_file(filename, codec_init):
        with open(filename, "wb") as f:
            f.write(base64.b64decode(codec_init))
    
    
    def generate_track_m3u8(current_track, m3u8_name, init_name):
        try:
            save_init_file(init_name, current_track["codec_init"])
            has_init = True
        except:
            has_init = False
        track_segments = current_track["files"]
    
        with open(m3u8_name, "w") as f:
            f.write(
                "#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:{}\n#EXT-X-MEDIA-SEQUENCE:0\n".format(
                    max(seg["duration_second"] for seg in track_segments)
                )
            )
            if has_init:
                f.write(f"#EXTINF:5.0,\n{init_name}\n")
    
            visited = []
            for segment in track_segments:
                if segment["file_name"] in visited:
                    continue
                visited.append(segment["file_name"])
                f.write(
                    "#EXTINF:{},\n{}\n".format(
                        segment["duration_second"], segment["file_name"]
                    )
                )
            f.write("#EXT-X-ENDLIST\n")
    
    
    def generate_master_m3u8(m3u8_payload):
        master_content = """#EXTM3U
    #EXT-X-VERSION:3
    
    #EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.64001f,mp4a.40.2"
    video.m3u8
    
    #EXT-X-STREAM-INF:BANDWIDTH=128000,CODECS="mp4a.40.2"
    audio.m3u8
    """
        with open("master.m3u8", "w") as f:
            f.write(master_content)
    
        m3u8_payload = m3u8_payload["payload"]["wm_a"]
        generate_track_m3u8(m3u8_payload["video_track1"], "video.m3u8", "init_video.mp4")
        generate_track_m3u8(m3u8_payload["audio_track1"], "audio.m3u8", "init_audio.mp4")
    
    
    def main():
        with open(INPUT_FILE, "r") as f:
            master_m3u8 = json.load(f)
    
        master_m3u8 = master_m3u8["data"]["program"]["video"]
        if type(master_m3u8) is not list:
            master_m3u8 = [master_m3u8]
    
        is_valid = False
        for v in master_m3u8:
            try:
    
                for f in ["payload", "video_track", "audio_track", "duration_second", "file_name"]:
                    assert f in v["m3u8"]
                assert type(v["m3u8"]) is str
                master_m3u8 = json.loads(v["m3u8"])
                is_valid = True
                break
            except:
                pass
    
        if not is_valid:
            raise "Failed to find m3u8 payload"
    
        generate_master_m3u8(master_m3u8)
        print('N_m3u8DL-RE "master.m3u8" -M format=mkv')
    
    
    if __name__ == "__main__":
        main()
    Then open cmd in that folder and run
    Code:
    python main.py
    You'll get the download command
    Code:
    N_m3u8DL-RE "master.m3u8" -M format=mkv
    If your video uses DRM make sure you add the keys as well using the parameter --key...
    Code:
    N_m3u8DL-RE "master.m3u8" -M format=mkv --key aa9916d0c78bdb894ad15a5d29b50e00:e8e3709881c9887e117e9ebb8d41ac18 --key aa9916d0c78bdb894ad15a5d29b50e02:93f8f3f52d765584261b8021e06b9041
    Then with the edited/unedited command run it in the same folder. Ignore any information n_m3u8dl-re is showing like bitrate/duration etc, since they're bogus values anyway. Make sure you select both tracks and hit enter. Your file will download on the current folder. Ignore any console timestamp warnings if any.

    Please select what you want to download:

    [X] Basic
    [X] Vid 1000 Kbps | avc1.64001f,mp4a.40.2
    > [X] Vid 128 Kbps | mp4a.40.2

    (Press <space> to toggle a stream, <enter> to accept)
    The py script may fail in the following cases
    1. the m3u8 isn't represented by a json and instead
    1a. it's a direct m3u8 url, usually in a "m3u8Url" field value. In this case just use N_m3u8dl-re with the direct URL
    1b. it's plaintext m3u8 (something like #EXTM3U ... etc). In this case copy the text value, unescape it if necessary, and save it a local m3u8 file then use N_m3u8DL-RE on it.

    2. something changed in the json response representation or there's an entirely different case
    - in this case you can share the input.txt file but not before removing private sensitive information like your IP because it's stored in it (or use a proxy to hide it).

    Kudos to @lzaa for warning about the missing init file.
    Last edited by 2nHxWW6GkN1l916N3ayz8HQoi; 21st Feb 2025 at 04:23. Reason: forgot to make DRM init optional
    --[----->+<]>.++++++++++++.---.--------.
    [*drm mass downloader: widefrog*]~~~~~~~~~~~[*how to make your own mass downloader: guide*]
    Quote Quote  
  9. Member
    Join Date
    Feb 2024
    Location
    Thailand
    Search Comp PM
    Originally Posted by 2nHxWW6GkN1l916N3ayz8HQoi View Post
    You can download using python and n_m3u8dl-re. Make sure you have python installed (including pip) and n_m3u8dl-re installed (including mp4decrypt, ffmpeg). The reason you need python is because it is tedious to append manually 30 fragments for a 3 hour video worst case. You need Thailand IP for that video. Make sure you get the right keys for your wanted resolution because not only do they have separate keys for audio/video, but also for resolution. So for a video with 4 different resolutions, you would have at least 8 unique keys. But you just need the ones for your res.

    The next steps are done on firefox but you should be able to use other browsers. Now select any unwanted res, wait for the video to switch completely because it notifies you ("You are watching in 360p", etc). This is done to force specific requests to happen since the site loads the default res m3u8 on their html page and it is a hassle to extract it.

    Then refresh page, wait for it to load on your bad unwanted res. After it loads completely, pause the video. Inspect network requests, filter for the text: "/dash?" . You may wanna zoom in/out so you can see the quality button. Click on it so you can select the wanted res. Once you do that and the dash request appears, click on it and copy the json raw response.

    Image
    [Attachment 85660 - Click to enlarge]


    Then make an empty folder. Create the files (double check so they're the right extension)
    1. main.py
    2. input.txt (in this file drop the copied dash raw json response)

    In main.py drop this script
    Code:
    import base64
    import json
    
    INPUT_FILE = "input.txt"
    
    
    def save_init_file(filename, codec_init):
        with open(filename, "wb") as f:
            f.write(base64.b64decode(codec_init))
    
    
    def generate_track_m3u8(current_track, m3u8_name, init_name):
        try:
            save_init_file(init_name, current_track["codec_init"])
            has_init = True
        except:
            has_init = False
        track_segments = current_track["files"]
    
        with open(m3u8_name, "w") as f:
            f.write(
                "#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-TARGETDURATION:{}\n#EXT-X-MEDIA-SEQUENCE:0\n".format(
                    max(seg["duration_second"] for seg in track_segments)
                )
            )
            if has_init:
                f.write(f"#EXTINF:5.0,\n{init_name}\n")
    
            visited = []
            for segment in track_segments:
                if segment["file_name"] in visited:
                    continue
                visited.append(segment["file_name"])
                f.write(
                    "#EXTINF:{},\n{}\n".format(
                        segment["duration_second"], segment["file_name"]
                    )
                )
            f.write("#EXT-X-ENDLIST\n")
    
    
    def generate_master_m3u8(m3u8_payload):
        master_content = """#EXTM3U
    #EXT-X-VERSION:3
    
    #EXT-X-STREAM-INF:BANDWIDTH=1000000,CODECS="avc1.64001f,mp4a.40.2"
    video.m3u8
    
    #EXT-X-STREAM-INF:BANDWIDTH=128000,CODECS="mp4a.40.2"
    audio.m3u8
    """
        with open("master.m3u8", "w") as f:
            f.write(master_content)
    
        m3u8_payload = m3u8_payload["payload"]["wm_a"]
        generate_track_m3u8(m3u8_payload["video_track1"], "video.m3u8", "init_video.mp4")
        generate_track_m3u8(m3u8_payload["audio_track1"], "audio.m3u8", "init_audio.mp4")
    
    
    def main():
        with open(INPUT_FILE, "r") as f:
            master_m3u8 = json.load(f)
    
        master_m3u8 = master_m3u8["data"]["program"]["video"]
        if type(master_m3u8) is not list:
            master_m3u8 = [master_m3u8]
    
        is_valid = False
        for v in master_m3u8:
            try:
    
                for f in ["payload", "video_track", "audio_track", "duration_second", "file_name"]:
                    assert f in v["m3u8"]
                assert type(v["m3u8"]) is str
                master_m3u8 = json.loads(v["m3u8"])
                is_valid = True
                break
            except:
                pass
    
        if not is_valid:
            raise "Failed to find m3u8 payload"
    
        generate_master_m3u8(master_m3u8)
        print('N_m3u8DL-RE "master.m3u8" -M format=mkv')
    
    
    if __name__ == "__main__":
        main()
    Then open cmd in that folder and run
    Code:
    python main.py
    You'll get the download command
    Code:
    N_m3u8DL-RE "master.m3u8" -M format=mkv
    If your video uses DRM make sure you add the keys as well using the parameter --key...
    Code:
    N_m3u8DL-RE "master.m3u8" -M format=mkv --key aa9916d0c78bdb894ad15a5d29b50e00:e8e3709881c9887e117e9ebb8d41ac18 --key aa9916d0c78bdb894ad15a5d29b50e02:93f8f3f52d765584261b8021e06b9041
    Then with the edited/unedited command run it in the same folder. Ignore any information n_m3u8dl-re is showing like bitrate/duration etc, since they're bogus values anyway. Make sure you select both tracks and hit enter. Your file will download on the current folder. Ignore any console timestamp warnings if any.

    Please select what you want to download:

    [X] Basic
    [X] Vid 1000 Kbps | avc1.64001f,mp4a.40.2
    > [X] Vid 128 Kbps | mp4a.40.2

    (Press <space> to toggle a stream, <enter> to accept)
    The py script may fail in the following cases
    1. the m3u8 isn't represented by a json and instead
    1a. it's a direct m3u8 url, usually in a "m3u8Url" field value. In this case just use N_m3u8dl-re with the direct URL
    1b. it's plaintext m3u8 (something like #EXTM3U ... etc). In this case copy the text value, unescape it if necessary, and save it a local m3u8 file then use N_m3u8DL-RE on it.

    2. something changed in the json response representation or there's an entirely different case
    - in this case you can share the input.txt file but not before removing private sensitive information like your IP because it's stored in it (or use a proxy to hide it).

    Kudos to @lzaa for warning about the missing init file.
    Thank you very much for the advice. Let go of frustration with the system.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!