img/merge.gif

Vidmerger

A wrapper around FFmpeg which simplifies merging of multiple videos.

![demo.png](img/demo.png) ## ๐Ÿ™‰ 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 ๐Ÿค— ```shell A wrapper around ffmpeg which simplifies 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] Arguments: Sets the input file to use Options: -f, --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 Generates videos inside a temporary folder with this fps value and merges them --shutdown For doing a shutdown at the end (needs sudo) --skip-fps-changer Skips the fps changer -y, --yes Skips confirmation of merge order --verbose Prints detailed logs -h, --help Print help -V, --version Print version ``` ```mermaid %%{init: {'themeVariables': { 'mainBkg': 'white', 'nodeBorder': 'black' }}}%% graph LR; VideoA((Video_A))-->Vidmerger; VideoB((Video_B))-->Vidmerger; Vidmerger-->|no fps mismatch detected| Merger; Vidmerger-->FPS_Changer-->Merger; Merger-->Video_A+B_and_chapters; ``` | Feature | Description | | :---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Selector | Iterates through [this list of file endings](src/main.rs#L34), 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`. | | Merger | Finally, it merges the videos and adds chapters. Chapter titles are automatically extracted from the input file names โ€” specifically, the text between the first dash and the file extension. Example: `Video_A - Chapter 1.mp4`. | ## โœจ Installing / Getting started You can install it on all the three major operating systems ๐Ÿค— ### X64 | Platform | Packager | Command | | :-------- | :----------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ๐ŸŽ MacOS | ๐Ÿบ [Homwbrew](https://github.com/TGotwig/homebrew-vidmerger/blob/master/vidmerger.rb) | brew tap tgotwig/vidmerger
brew install vidmerger | | ๐Ÿง Linux | ๐Ÿบ [Homwbrew](https://github.com/TGotwig/homebrew-linux-vidmerger/blob/master/vidmerger.rb) | 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](https://community.chocolatey.org/packages/vidmerger) | choco install ffmpeg # prerequisite
choco install vidmerger | ### ARM64 | Platform | Packager | Command | | :------- | :----------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ๐ŸŽ MacOS | ๐Ÿบ [Homwbrew](https://github.com/TGotwig/homebrew-vidmerger/blob/master/vidmerger.rb) | brew tap tgotwig/vidmerger
brew install vidmerger | | ๐Ÿง Linux | ๐Ÿบ CURL | sudo curl -L https://github.com/tgotwig/vidmerger/releases/download/0.4.0/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 | ### Docker (X64 & ARM64) You can also use Docker to run vidmerger without installing anything except Docker, hosted on [Dockerhub](https://hub.docker.com/r/tgotwig/vidmerger) ๐Ÿณ ```bash docker container run -it -v :/data tgotwig/vidmerger ``` Examples with Bash: ```bash docker container run tgotwig/vidmerger --help docker container run tgotwig/vidmerger --version docker container run -it -v ./data/call_merger:/data tgotwig/vidmerger ``` ## โš™๏ธ Developing The primary requirements are rust, ffmpeg, and go-task. The devcontainer provides all necessary components ๐Ÿ”ง If you see anything to improve, just create an [issue](https://github.com/tgotwig/vidmerger/issues) or directly open a [pull request](https://github.com/tgotwig/vidmerger/pulls) ๐Ÿค—โœจ ### Deploying / Publishing For details on how to publish a new version, you can look up the [Publish new version](https://github.com/tgotwig/vidmerger/wiki#-publish-new-version) wiki page ๐Ÿ“– ## ๐Ÿงช Tests - For major tests: `task test` - For linting tests: `task lint` ## ๐ŸŒŸ Style guide - [rust-clippy](rust-clippy) - [rls-vscode](https://github.com/rust-lang/rls-vscode)