• Andromxda 🇺🇦🇵🇸🇹🇼@lemmy.dbzer0.comM
      link
      fedilink
      English
      arrow-up
      2
      ·
      5 hours ago

      Thanks a lot for that incredibly useful link!

      Something tells me that this is soon gonna disappear like a Boeing whistleblower. To everybody reading this: Make sure to archive that guide, preferably locally on your device!

  • SmokeFree@lemmy.ml
    link
    fedilink
    English
    arrow-up
    20
    ·
    edit-2
    2 days ago

    it’s drm protected and you need keys to decrypt. I already have these two extensions and it’s working.

    https://github.com/FoxRefire/wvg/tree/next + https://addons.mozilla.org/en-US/firefox/addon/hls-stream-detector/ or https://github.com/DevLARLEY/WidevineProxy2

    https://github.com/nilaoda/N_m3u8DL-RE (downloader and use the keys to decrypt the file)

    example mpd “https://vodnowusoawsdash-cf.tvnow.de/pgrn/cves/sd/rtlplus/932203/1-1-1d-3-2-1-2.ism/v1.mpd” (the free trial video only gives me SD)

    in .mpd, replace 3-2 with 1-1 to get HD (1080p)

  • promitheas@programming.dev
    link
    fedilink
    English
    arrow-up
    3
    ·
    2 days ago

    I think i wrote a short python script to do this on another site. Let me get home and see if i can help you out

      • promitheas@programming.dev
        link
        fedilink
        English
        arrow-up
        3
        ·
        edit-2
        4 hours ago

        Oh, Im sorry. If I’m honest I completely forgot. Here it is:

        You will need ffmpeg installed, and I did write it for Linux, so I’m not sure if there are differences for windows. Worst case you need to slightly modify it to work on windows.

        #!/usr/bin/env python3
        
        import requests
        import os
        import subprocess
        from urllib.parse import urljoin
        import sys
        
        def download_video_chunks(base_url, output_file):
            """
            Downloads video chunks from the given base URL and merges them into a single file.
        
            :param base_url: The URL to the playlist or base directory containing the video chunks.
            :param output_file: The name of the output video file (e.g., "output.mp4").
            """
            try:
                # Get the playlist file (e.g., .m3u8 or .ts index file)
                print(f"Fetching playlist or video chunk URLs from: {base_url}", flush=True)
                response = requests.get(base_url, timeout=10)
                response.raise_for_status()
                
                # Parse the playlist to get the chunk URLs
                lines = response.text.splitlines()
                chunk_urls = [urljoin(base_url, line) for line in lines if line and not line.startswith("#")]
        
                if not chunk_urls:
                    print("No video chunks found in the provided URL.", flush=True)
                    return
        
                # Create a directory for storing chunks
                os.makedirs("video_chunks", exist_ok=True)
        
                # Download each chunk
                chunk_files = []
                for idx, chunk_url in enumerate(chunk_urls):
                    chunk_file = os.path.join("video_chunks", f"chunk_{idx:04d}.ts")
                    print(f"Downloading {chunk_url}...", flush=True)
        
                    with requests.get(chunk_url, stream=True) as chunk_response:
                        chunk_response.raise_for_status()
                        with open(chunk_file, "wb") as f:
                            for chunk in chunk_response.iter_content(chunk_size=1024):
                                f.write(chunk)
        
                    chunk_files.append(chunk_file)
        
                # Merge the chunks into a single file using ffmpeg
                print("Merging chunks...", flush=True)
                with open("file_list.txt", "w") as f:
                    for chunk_file in chunk_files:
                        f.write(f"file '{chunk_file}'\n")
        
                subprocess.run(["ffmpeg", "-f", "concat", "-safe", "0", "-i", "file_list.txt", "-c", "copy", output_file], check=True)
        
                print(f"Video saved as {output_file}", flush=True)
        
            except requests.exceptions.RequestException as e:
                print(f"An error occurred while downloading: {e}", flush=True)
            except subprocess.CalledProcessError as e:
                print(f"An error occurred while merging: {e}", flush=True)
            finally:
                # Clean up temporary files
                if os.path.exists("file_list.txt"):
                    os.remove("file_list.txt")
                for chunk_file in chunk_files:
                    os.remove(chunk_file)
                # if os.path.exists("video_chunks"):
                    # os.rmdir("video_chunks")
        
        if __name__ == "__main__":
            base_url = input("Enter the URL of the video playlist or base directory: ")
            output_file = input("Enter the output video file name (e.g., output.mp4): ")
            print(f"Starting download process for playlist: {base_url}", flush=True)
            download_video_chunks(base_url, output_file)
        

        If you guys can recommend a fair and open pastebin alternative for me I will upload it there as well and edit this with the link

  • catharso@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    5
    arrow-down
    2
    ·
    2 days ago

    sometimes one of the requests is a m3u8 playlist, or something similar.

    it may contain urls of thousands of chunks.

    if you download all of them you can concat them.

    that worked for me for some streams a few years ago, but there is probably an easier way 🤷🏻‍♂️