this post was submitted on 27 Feb 2025
24 points (100.0% liked)

Piracy: ꜱᴀɪʟ ᴛʜᴇ ʜɪɢʜ ꜱᴇᴀꜱ

57531 readers
356 users here now

⚓ Dedicated to the discussion of digital piracy, including ethical problems and legal advancements.

Rules • Full Version

1. Posts must be related to the discussion of digital piracy

2. Don't request invites, trade, sell, or self-promote

3. Don't request or link to specific pirated titles, including DMs

4. Don't submit low-quality posts, be entitled, or harass others



Loot, Pillage, & Plunder

📜 c/Piracy Wiki (Community Edition):

🏴‍☠️ Other communities

Torrenting:

Gaming:


💰 Please help cover server costs.

Ko-Fi Liberapay
Ko-fi Liberapay

founded 2 years ago
MODERATORS
 

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

top 15 comments
sorted by: hot top controversial new old
[–] Sebastrion@leminal.space 1 points 3 hours ago

You can use Streamfab https://dvdfab.at/downloader.htm Use the free Version/Test Version and then crack it with A Server Emulator https://cdm-project.com/Deja/DVDFabServerEmulator

If You need more Infos or Tools, look here: https://cdm-project.com/explore/repos

(I hope everything I said here still works, the last time I did this is over 1 year ago.)

[–] VitabytesDev@feddit.nl 4 points 11 hours ago (1 children)
[–] Andromxda@lemmy.dbzer0.com 3 points 6 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 21 points 2 days ago* (last edited 2 days ago) (1 children)

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)

[–] MaggiWuerze@feddit.org 1 points 1 day ago (1 children)

Is the chinese one safe? Kind of weird to run something I can't read the output of

[–] SmokeFree@lemmy.ml 2 points 1 day ago* (last edited 1 day ago)

The exe is clean and it's English, but you can use the 2024 versions of yt-dlp by using --allow-u to download drm protected videos

Then use mp4decrypt to decrypt the files https://www.bento4.com/documentation/mp4decrypt/

[–] matey@lemmy.dbzer0.com 13 points 2 days ago (1 children)
[–] MaggiWuerze@feddit.org 4 points 1 day ago

It's DRM protected, so it won't work

[–] FErArg@lemmy.ml 3 points 2 days ago
[–] promitheas@programming.dev 3 points 2 days ago (1 children)

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

[–] Andromxda@lemmy.dbzer0.com 2 points 6 hours ago (1 children)

Are we ever getting that script before the heat death of the universe? ^^

[–] promitheas@programming.dev 3 points 5 hours ago* (last edited 5 hours ago) (1 children)

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

[–] Andromxda@lemmy.dbzer0.com 3 points 4 hours ago

Oh, Im sorry. If I’m honest I completely forgot.

No worries, and thanks a lot!

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

I like OpenGist, the folks over at programming.dev run an instance: https://blocks.programming.dev/

[–] catharso@discuss.tchncs.de 3 points 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 🤷🏻‍♂️

Open the m3u8 as a playlist in VLC Media player. If it works, save it.