{"id":24380791,"url":"https://github.com/lzinga/mediasplitter","last_synced_at":"2025-04-10T23:05:37.292Z","repository":{"id":33213834,"uuid":"85645118","full_name":"lzinga/MediaSplitter","owner":"lzinga","description":"Multi episode file splitter and renamer.","archived":false,"fork":false,"pushed_at":"2024-02-20T19:06:27.000Z","size":20055,"stargazers_count":5,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-10T23:05:25.459Z","etag":null,"topics":["media","plex-media-server","splitter"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lzinga.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":"2017-03-21T01:29:17.000Z","updated_at":"2025-03-23T21:16:26.000Z","dependencies_parsed_at":"2025-01-19T08:39:24.859Z","dependency_job_id":null,"html_url":"https://github.com/lzinga/MediaSplitter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lzinga%2FMediaSplitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lzinga%2FMediaSplitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lzinga%2FMediaSplitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lzinga%2FMediaSplitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lzinga","download_url":"https://codeload.github.com/lzinga/MediaSplitter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248312157,"owners_count":21082638,"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":["media","plex-media-server","splitter"],"created_at":"2025-01-19T08:29:12.925Z","updated_at":"2025-04-10T23:05:37.270Z","avatar_url":"https://github.com/lzinga.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MediaSplitter\nThis was written because I was frustrated with how my Plex Server would read a single file if it had multiple episodes in it.\n\nFor example If I had a file named `S01E01-E02 New Squid on the Block + Down the Drain.m4v` there is 2 episodes in this one file. Plex using the [TheTvDb](http://thetvdb.com) to get metadata for the episodes would show that file as 2 episodes. However when you chose to play episode 2 it would start at the beginning of episode 1 and you would have to scrub to episode 2 most of the time.\n\nNot only does it split the episode it will do its best to rename it based on the original files name. The episode `S01E01-E02 New Squid on the Block + Down the Drain.m4v` will get split into 2 files named `S01E01 New Squid on the Block.m4v` and `S01E02 Down the Drain.m4v`.\n\nI am sure there are failures to be found though. I ran it on three seasons of [Rocket Power](http://thetvdb.com/?tab=series\u0026id=78282) and it successfully split majority of them. Some would split just after the second episodes title because of some edge cases with Black Screen Detection. Here is the settings I used when I split the 3 seasons.\n\n````\nMediaSpliter.exe /Media=\"C:\\Users\\Administrator\\Videos\\Rocket Power\\Season 1\" /Extensions=.m4v /StartRange=00:11:00 /EndRange=00:12:00\n````\nSince all of my episodes ended somewhere between 11 and 12 minutes, I told it to just look there.\n\n# Arguments\n#### /Media\nThis is always required, it doesn't matter if it is a folder or a single file, it will still split the files. If it is a folder it will scan non-recursively in the folder specified.\n````ini\n  // Folder\n  /Media=\"C:\\Users\\Administrator\\Videos\"\n  \n  // Single File\n  /Media=\"C:\\Users\\Administrator\\Videos\\S01E01-E02 New Squid on the Block + Down the Drain.m4v\"\n````\n\n#### /Extensions\nIf the `/Media` argument is specified, it will look for these extensions. If `/Media` is a single file it will ignore this argument. Every extension should be seperated by a command for it to be properly recognized.\n````ini\n  /Extensions=.m4v,.avi\n````\n\n#### /Debug\nPauses after every file is split. Used for attaching debugger as well as slowing down the processes and being able to see the results easier per file.\n````ini\n  /Debug\n````\n#### /BlackDuration\nThe minimum detected black duration (in seconds). [FFmpeg Setting](https://ffmpeg.org/ffmpeg-filters.html#blackdetect).\n````ini\n  /BlackDuration=(Default)0.08\n````\n  \n#### /BlackThreshold\nThreshold for considering a picture as \"Black\" (in percent). [FFmpeg Setting](https://ffmpeg.org/ffmpeg-filters.html#blackdetect).\n````ini\n  /BlackThreshold=(Default)0.08\n````\n  \n#### /BlackPixelLuminance\nThreshold for considering a picture as \"Black\" (in percent). [FFmpeg Setting](https://ffmpeg.org/ffmpeg-filters.html#blackdetect).\n````ini\n  /BlackPixelLuminance=(Default)0.12\n````\n  \n#### /CutTime\nIf specified it will ignore any Black Screen Detection settings and just cut the file/files at the exact time specified. Parses string to a TimeSpan.\n````ini\n  // Will cut at exactly 10 seconds.\n  /CutTime=00:00:10\n\n  // Will cut at exactly 11 minutes.\n  /CutTime=00:11:00\n````\n\n#### /StartRange\nIf specified and is splitting using Black Screen Detection will only get black screens that are greater than the StartRange. Parses string to a TimeSpan. (Both StartRange and EndRange needs to be specified)\n````ini\n  // Will only get black screens above 11 minutes.\n  /StartRange=00:11:00\n````\n  \n#### /EndRange\nIf specified and is splitting using Black Screen Detection will only get black screens that are less than the EndRange. Parses string to a TimeSpan. (Both StartRange and EndRange needs to be specified)\n````ini\n  // Will only get black screens below 12 minutes.\n  /StartRange=00:12:00\n````\nFor the StartRange and EndRange examples it will get all black screens between the time frame of 11 and 12 minutes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flzinga%2Fmediasplitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flzinga%2Fmediasplitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flzinga%2Fmediasplitter/lists"}