I made the icy-nord and icy-nord-darker themes.

change suggestions

issues

update notifications

@promitheas:matrix.org

  • 1 Post
  • 15 Comments
Joined 2 years ago
cake
Cake day: June 12th, 2023

help-circle

  • 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






  • I considered that, and the reason I decided to go with the method I chose was twofold:

    1. I of course need to be safe - that means I don’t want to run unsafe kernel code on my main machine, so a virtual machine makes sense. I could use one of my old laptops as both a host and target machine, but honestly I have my main machine set up just how I like it for development so I would probably end up using it for writing the actual code anyway. I suppose I could have one of my laptops be the target and pull code from github (exactly what I was planning to do with the virtual machine just with real hardware).

    2. I didn’t want to introduce more problems than would naturally occur when going through the book while learning, by adding the fact that I have a great mismatch in kernel versions, which would undoubtedly change the APIs a great deal. I learn better when I can focus on getting comfortable with one thing at the beginning, and then building from there. If its not as tragic as I imagine it though (the mountain looks larger before you start the climb) I would definitely prefer getting comfortable with the modern kernel as ultimately that’s what I plan to develop on (this all started because I want to fix some stuff with my Genesis Xenon 770 mouse that I’m unhappy with currently).

    However, I am open to the idea. Could you direct me to any resources you found helpful specifically for adapting what you read/learn in that book, to the modern kernel? Or any other helpful resources really, anything would be helpful at this point. Discords, forums, wikis, whatever you have :)