{"id":20372293,"url":"https://github.com/outfrost/trimmeroni","last_synced_at":"2025-04-12T06:43:24.034Z","repository":{"id":118604745,"uuid":"550760158","full_name":"outfrost/trimmeroni","owner":"outfrost","description":"Cut and concatenate video clips without reencoding","archived":false,"fork":false,"pushed_at":"2024-07-14T00:56:14.000Z","size":36,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-12T06:43:17.605Z","etag":null,"topics":["automation","ffmpeg","utility","video-clips","video-editing","video-trimming"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/outfrost.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-13T09:28:57.000Z","updated_at":"2025-02-19T10:24:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"7256bc92-c09b-4be5-bc73-98d9b3fc1227","html_url":"https://github.com/outfrost/trimmeroni","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outfrost%2Ftrimmeroni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outfrost%2Ftrimmeroni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outfrost%2Ftrimmeroni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/outfrost%2Ftrimmeroni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/outfrost","download_url":"https://codeload.github.com/outfrost/trimmeroni/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248530610,"owners_count":21119592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","ffmpeg","utility","video-clips","video-editing","video-trimming"],"created_at":"2024-11-15T01:12:38.867Z","updated_at":"2025-04-12T06:43:24.010Z","avatar_url":"https://github.com/outfrost.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# trimmeroni\n\nThis little tool aims to make it easier to cut and concatenate together any number of video clips,\nfrom any number of input files, into one output file, without reencoding. Compared to editing the\nclips using video editing or transcoding software, this preserves original video quality, and\nsaves processing time.\n\nIt uses the `ffmpeg` program under the hood to copy each requested video segment from the source\nfiles into a temporary directory, and then concatenate them (insert one after another) into\nthe destination file.\n\nThe only requirement is that you have `ffmpeg` installed on your system, accessible from `PATH`.\n\n## Usage\n\n### Examples\n\nFrom \"cool_gameplay.mkv\", grab the segment between 08:34 and 11:02, and save it to \"360_noscope.mp4\"\n```sh\ntrimmeroni -i 'cool_gameplay.mkv @ 08:34 - 11:02' \"360_noscope.mp4\"\n```\n\nFrom \"camera_footage.mp4\", use the segments 04:20 - 04:59, 06:44 - 09:00, and from 14:40 to the end,\nconcatenate them, and save the result to \"check_this_out.mp4\"\n```sh\ntrimmeroni -i 'camera_footage.mp4 @ 04:20 - 04:59, 06:44 - 09:00, 14:40 - ' \"check_this_out.mp4\"\n```\n\nTake 38:08 to 45:35, and 1:02:20 to 1:17:52 from \"Day1.mp4\", and from the beginning to 29:26 from\n\"Day2.mp4\", concatenate, and save the result to \"Weekend bike adventure.mp4\"\n```sh\ntrimmeroni -i 'Day1.mp4 @ 38:08 - 45:35, 1:02:20 - 1:17:52' -i 'Day2.mp4 @ - 29:26' \"Weekend bike adventure.mp4\"\n```\n\n### Details\n\n```\nUsage: trimmeroni [OPTIONS] \u003cOUTPUT_NAME\u003e\n\nArguments:\n  \u003cOUTPUT_NAME\u003e\n\nOptions:\n  -i, --input-clip \u003cINPUT_CLIP_SPECS\u003e\n  -v, --verbose                        Print additional information while working\n  -h, --help                           Print help information\n  -V, --version                        Print version information\n```\n\n`\u003cINPUT_CLIP_SPECS\u003e` specifies an input file and the timecodes of clips to copy from it. It should\nbe formatted as follows:\n\n```\nINPUT_NAME @ TIMECODE - TIMECODE[, TIMECODE - TIMECODE, ...]\n```\n\nwhere\n* `INPUT_NAME` is the input file name; if the file name contains \"@\", use another \"@\" to escape it\n(\"@@\"); there is no need to escape spaces;\n* each `TIMECODE` can be any seek position supported by `ffmpeg` (e.g. in `h:mm:ss` format),\nor empty, meaning either the start or end of the entire video file;\n* \"`TIMECODE - TIMECODE,`\" can be repeated any number of times in order to grab more than one clip\nfrom the input file.\n\nYou can use `-i` many times to use clips from many source files.\n\nRemember to quote your `\u003cINPUT_CLIP_SPECS\u003e`, so that `trimmeroni` receives it as a single string.\n\nThe start of each clip will be snapped to the nearest keyframe before the specified timecode. For recordings from OBS Studio, for example, this may mean that the clip will include a segment from up to 2 seconds earlier.\n\nUse `-v` or `--verbose` to get additional info from `trimmeroni` and `ffmpeg`.\n\n## Installing\n\nIf you have `cargo`, you can install this program from crates.io:\n```sh\ncargo install trimmeroni\n```\n\n## Building\n\nThis project uses Rust's stable toolchain, 2021 edition.\n\nTo build locally from source:\n\n```sh\ngit clone https://github.com/outfrost/trimmeroni.git\ncd trimmeroni\ncargo build\n```\n\nYou can then run the debug binary like so:\n\n```sh\ncargo run -- -i 'file.mkv @ 00:02 - 01:12' \"out.mp4\"\n```\n\nor install it to your `cargo` binaries with:\n\n```sh\ncargo install --path .\n```\n\n## Contributing\n\nIssues and pull requests welcome.\n\nBy opening an issue or pull request for this repository, you acknowledge and agree that\nthe contributions included in your issue or pull request may be published, used, copied, modified,\nrepurposed, and reused without limitation, under the terms of the MIT License (included in\n[LICENSE](LICENSE)), regardless of whether or not the pull request is ever merged, and whether\nor not the issue is ever resolved.\n\nIf you would like your name to be included in the list of contributors in the copyright message,\nplease edit the LICENSE file as part of your pull request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foutfrost%2Ftrimmeroni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foutfrost%2Ftrimmeroni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foutfrost%2Ftrimmeroni/lists"}