This is the link to a free trial video: https://plus.rtl.de/video-tv/serien/die-unvermittelbaren-mit-martin-ruetter-882892/staffel-2-930427/episode-6-das-grosse-wiedersehen-932203
The browser log shows a bunch of request for different .m4s files. I assume the premium stuff would behave the same but I would like to know if I can rip that before I go for a trial version
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
Are we ever getting that script before the heat death of the universe? ^^
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
No worries, and thanks a lot!
I like OpenGist, the folks over at programming.dev run an instance: https://blocks.programming.dev/