ffmusicsync

A simple utility which creates an encoded music folder out of your library and keeps it updated using as least ffmpeg runs as possible.

Requirements

Features

*See the lofty crate for a list of supported formats to copy from/to

Configuration examples

config.json can contain comments, so you can just copy-paste the example. jsonc { // Input and output directory // Can be either a string or an object: // If it's a string and contains a ':', it will be treated as an rclone remote "inputDirectory": "MyStorage:FLAC", "outputDirectory": { // Both fields are optional // If remote is not present or blank it will be treated as a local location "remote": "MyStorage", "path": "Encoded" }, // Optional, used only when either the input or output directory is remote "tempDirectory": "temp", // An array of all extensions that will be encoded // All that are not present here (such as mp3 in this case) will be just copied to the output directory "extensionsToEncode": [ "flac" ], // A string containing the extension for encoded files "encodedExtension": "ogg", // Add covers to files after encoding them // ffmpeg can't do that by itself for OGG files // The option doesn't need to be present, defaults to false "copyCovers": true, // A string containing the ffmpeg params // ffmpeg command looks like: // ffmpeg -i <INPUT> <PARAMS> <OUTPUT> "ffmpegParams": "-c:a libopus -b:a 128K -vn", // Whether to remove brackets, the options don't need to be present, // in which case it will behave the same way as if they were set to false // When set to true it will remove everything in between the brackets as well as one leading/trailing space // Example with the below config: // [LABEL] Author - Title (Original Mix) [YEAR].mp3 // Would be renamed to: // Author - Title (Original Mix).mp3 "removeRoundBrackets": false, // () "removeSquareBrackets": true, // [] "removeCurlyBrackets": false, // {} "removeAngleBrackets": false, // <> }

Command-line arguments

Planned features

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.