Skip to content

Latest commit

 

History

History
149 lines (102 loc) · 8.59 KB

README.md

File metadata and controls

149 lines (102 loc) · 8.59 KB

img/merge.gif

Vidmerger

A wrapper around FFmpeg which simplifies merging of multiple videos.

fusion gif

%%{init: {'themeVariables': { 'mainBkg': 'white', 'nodeBorder': 'black' }}}%%
graph LR;
Video_A-->Vidmerger;
Video_B-->Vidmerger;
Vidmerger-->FPS_Changer;
FPS_Changer-->Merger;
Merger-->Chapterer;
Chapterer-->Video_A+B;

Vidmerger-->Merger;
Merger-->Video_A+B;
Loading
Feature Description
Selector Iterates through this list of file endings, selects all files which matches with the current file ending except ones which start with a dot. The list can be overwritten by --format or -f, example: --format mp4,mkv.
FPS_Changer After detecting not matching fps values, it scales all the higher fps videos down to the lowest detecting fps value. Can be skipped by --skip-fps-changer. The desired fps value can be set by --fps, example: --fps 23.976.
Chapterer After the merge job is done, it creates the same file but with chapters in it, the title is all in between the first dash till the file extension, example: Video_A - Chapter 1.mp4. Can be skipped by --skip-chapterer.

🙉 What is this exactly?

Vidmerger is a command-line-tool which uses ffmpeg to merge multiple video-files with the same file-extension into one file, for example running vidmerger . on mp4 files would create a merged video called output.mp4 🐣

Here is the usage help of vidmerger 🤗

A wrapper around ffmpeg which simlifies merging multiple videos 🎞  Everything in between the first
`-` till the fill extension of the input files will be used as chapter titles.

USAGE:
    vidmerger [OPTIONS] <TARGET_DIR>

ARGS:
    <TARGET_DIR>    Sets the input file to use

OPTIONS:
    -f, --format <format>     Specifies which formats should be merged individually, the default is
                              👉 3g2,3gp,aac,ac3,alac,amr,ape,au,avi,awb,dts,f4a,f4b,f4p,f4v,flac,flv,m4a,m4b,m4p,m4r,m4v,mkv,mov,mp2,mp3,mp4,mpeg,mpg,oga,ogg,ogm,ogv,ogx,opus,pcm,spx,wav,webm,wma,wmv
        --fps <fps>           Generates videos inside a temporary folder with this fps value and
                              merges them
    -h, --help                Print help information
        --shutdown            For doing a shutdown at the end (needs sudo)
        --skip-chapterer      Skips the chapterer
        --skip-fps-changer    Skips the fps changer
        --skip-wait           Skips the wait time for reading
    -V, --version             Print version information

✨ Installing / Getting started

You can install it on all the three major operating systems 🤗

X64

Platform Packager Command
🍎 MacOS 🍺 Homwbrew brew tap tgotwig/vidmerger
brew install vidmerger
🐧 Linux 🍺 Homwbrew brew tap tgotwig/linux-vidmerger
brew install vidmerger
🐧 Linux 🍺 CURL sudo curl -L https://github.com/TGotwig/vidmerger/releases/latest/download/vidmerger-linux.tar.gz -o /tmp/vidmerger-linux.tar.gz && sudo tar -xzvf /tmp/vidmerger-linux.tar.gz -C /usr/local/bin
🏳️‍🌈 Windows 🍫 Chocolatey choco install ffmpeg # prerequisite
choco install vidmerger

ARM64

Platform Packager Command
🍎 MacOS 🍺 Homwbrew brew tap tgotwig/vidmerger
brew install vidmerger
🐧 Linux 🍺 CURL sudo curl -L https://github.com/tgotwig/vidmerger/releases/download/0.3.2/vidmerger-linux-arm64.tar.gz -o /tmp/vidmerger-linux-arm64.tar.gz && sudo tar -xzvf /tmp/vidmerger-linux-arm64.tar.gz -C /usr/local/bin

🐳 Run it without installing

You can also use Docker to run vidmerger without installing anything except Docker, hosted on Dockerhub.

docker container run -v <PATH-TO-YOUR-VIDEOS>:/data tgotwig/vidmerger

Examples with Bash:

docker container run -v ./data:/data tgotwig/vidmerger
docker container run -v ./data:/data tgotwig/vidmerger --version

⚙️ Developing

Built With

Rust and some listed Crates inside of Cargo.toml under dependencies.

Prerequisites

Setting up Dev

Once you are done with installing the prerequisites, run task:

git clone [email protected]:TGotwig/vidmerger.git
cd vidmerger
task

If you see anything to improve, just create an issue or directly open a pull request 🤗✨

Building

Run task build to build for Mac, Linux and Windows. You can find the compressed Mac & Linux .tar.gz-archives for Github under target/tars, the .exe file for Windows under tools.

Deploying / Publishing

Automated steps

  • Homebrew (MacOS & Linux): Gets automatically deployed by release.yml after pushing a git tag.
  • Chocolatey (Windows): Gets automatically deployed by release.yml after pushing a git tag.

Manual steps

Increasing all versions by find and replace, then after task build:

  • Dockerhub: Run task publish_dockerhub.

📦 Versioning

We use SemVer for versioning.

🧪 Tests

  • For major tests: task test (requires yt-dlp and ffmpeg to be installed)
  • For linting tests: task lint

🌟 Style guide