/vidmerger

๐Ÿ“ผ Merge video & audio files via CLI

Primary LanguageRustOtherNOASSERTION

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 git@github.com: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