GitHub – PulseBeat02/yt-media-storage: https://www.youtube.com/watch?v=l03Os5uwWmk

💥 Check out this trending post from Hacker News 📖

📂 **Category**:

💡 **What You’ll Learn**:

CodeFactor
TeamCity Full Build Status

Star History Chart

Stores files onto YouTube by encoding them into lossless video and decoding them back to the original file. Supports
both a command-line interface and a graphical user interface.

  • File Encoding/Decoding: Encode any file into a lossless video (FFV1/MKV) and decode it back
  • Fountain Codes: Uses Wirehair fountain codes for redundancy and repair
  • Optional Encryption: Encrypt files with a password using libsodium (XChaCha20-Poly1305)
  • Batch Processing: Queue multiple files for batch encoding (GUI)
  • Progress Tracking: Real-time progress bars and status updates (GUI)

Visit my CI/CD pipeline, and click “Login as Guest”. Visit the yt-media-storage project,
click on the latest passing build, and click “Artifacts” to download the latest build artifacts for both the CLI and
GUI. You may need to install some shared libraries (FFmpeg, Qt6, libsodium) to run the executables.

  • CMake 3.22
  • C++23 compiler
  • FFmpeg
  • libsodium
  • OpenMP
  • Qt6 (Core and Widgets)
sudo apt update
sudo apt install cmake build-essential qt6-base-dev \
  libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev \
  libsodium-dev libomp-dev
sudo dnf install cmake gcc-c++ qt6-qtbase-devel ffmpeg-devel libsodium-devel libgomp
sudo pacman -S cmake qt6-base ffmpeg libsodium openmp
brew install cmake qt@6 ffmpeg libsodium libomp
vcpkg install ffmpeg libsodium openmp qt6

Or install Qt6 separately via the Qt Online Installer and FFmpeg/libsodium
via vcpkg.

mkdir build
cmake -B build
cmake --build build

This produces two executables:

  • media_storage — Command-line interface
  • media_storage_gui — Graphical user interface
./media_storage encode --input  --output 
  1. Encode a file to video:

    • Click “Browse…” next to “Input File” to select the file you want to encode
    • Click “Browse…” next to “Output File” to choose where to save the video
    • Click “Encode to Video” to start the process
  2. Decode a video to file:

    • Click “Browse…” next to “Input File” to select the video file
    • Click “Browse…” next to “Output File” to choose where to save the decoded file
    • Click “Decode from Video” to start the process
  1. Click “Add Files” to add multiple files to the batch queue
  2. Select an output directory for all encoded videos
  3. Click “Batch Encode All” to process all files in sequence
  • The progress bar shows the current operation progress
  • Status label displays current operation status
  • Logs panel provides detailed information about each step
  • All operations run in separate threads to keep the UI responsive
  • Encoding: Files are chunked, encoded with fountain codes, and embedded into video frames
  • Decoding: Packets are extracted from video frames and reconstructed into the original file
  • Video Format: FFV1 codec in MKV container (lossless)
  • Frame Resolution: 3840×2160 (4K) at 30 FPS
  • Encryption: Optional XChaCha20-Poly1305 via libsodium
  • Qt6 not found: Ensure Qt6 development packages are installed
  • FFmpeg libraries missing: Install FFmpeg development packages
  • libsodium missing: Install libsodium development packages
  • OpenMP errors: Install OpenMP development packages
  • Cannot open input file: Check file permissions and paths
  • Encoding fails: Ensure sufficient disk space for output video
  • Decoding fails: Verify the input file is a valid encoded video

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
version.

💬 **What’s your take?**
Share your thoughts in the comments below!

#️⃣ **#GitHub #PulseBeat02ytmediastorage #httpswww.youtube.comwatchvl03Os5uwWmk**

🕒 **Posted on**: 1771063164

🌟 **Want more?** Click here for more info! 🌟

By

Leave a Reply

Your email address will not be published. Required fields are marked *