{"id":13826319,"url":"https://github.com/akai10tsuki/mkvbatchmultiplex","last_synced_at":"2026-04-10T10:31:11.728Z","repository":{"id":45432880,"uuid":"163031131","full_name":"akai10tsuki/mkvbatchmultiplex","owner":"akai10tsuki","description":"Batch multiplex video files using MKVToolnix generated command line","archived":false,"fork":false,"pushed_at":"2024-03-12T10:17:25.000Z","size":17622,"stargazers_count":77,"open_issues_count":5,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-12-17T01:13:08.904Z","etag":null,"topics":["batch","matroska","mkv","mkvtoolnix","plex-media-server","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","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/akai10tsuki.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-25T00:21:03.000Z","updated_at":"2025-12-14T01:19:27.000Z","dependencies_parsed_at":"2024-02-09T07:42:25.035Z","dependency_job_id":"b2f2d5ad-f1bd-4dbd-ab88-2c0685142774","html_url":"https://github.com/akai10tsuki/mkvbatchmultiplex","commit_stats":{"total_commits":644,"total_committers":3,"mean_commits":"214.66666666666666","dds":"0.012422360248447228","last_synced_commit":"9fdb3991fe4c0c65788c88efb6856348526a23e5"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/akai10tsuki/mkvbatchmultiplex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akai10tsuki%2Fmkvbatchmultiplex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akai10tsuki%2Fmkvbatchmultiplex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akai10tsuki%2Fmkvbatchmultiplex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akai10tsuki%2Fmkvbatchmultiplex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akai10tsuki","download_url":"https://codeload.github.com/akai10tsuki/mkvbatchmultiplex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akai10tsuki%2Fmkvbatchmultiplex/sbom","scorecard":{"id":175164,"data":{"date":"2025-08-11","repo":{"name":"github.com/akai10tsuki/mkvbatchmultiplex","commit":"05e0752f415aff691c5135eb5613d890b80633cf"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":8,"reason":"5 out of the last 5 releases have a total of 5 signed artifacts.","details":["Info: signed release artifact: MKVBatchMultiplex-3.0.0.2-iss-AMD64.exe.asc: https://github.com/akai10tsuki/mkvbatchmultiplex/releases/tag/v3.0.0.2","Info: signed release artifact: MKVBatchMultiplex-3.0.0.1-iss-AMD64.exe.asc: https://github.com/akai10tsuki/mkvbatchmultiplex/releases/tag/v3.0.0.1","Info: signed release artifact: MKVBatchMultiplex-3.0.0.0-iss-AMD64.exe.asc: https://github.com/akai10tsuki/mkvbatchmultiplex/releases/tag/v3.0.0.0","Info: signed release artifact: MKVBatchMultiplex-3.0.0b1.dev0-iss-AMD64.exe.asc: https://github.com/akai10tsuki/mkvbatchmultiplex/releases/tag/v3.0.0b1.dev0","Info: signed release artifact: MKVBatchMultiplex-2.1.0b1.dev3-AMD64-portable-console.exe.asc: https://github.com/akai10tsuki/mkvbatchmultiplex/releases/tag/v2.1.0b1.dev4","Warn: release artifact v3.0.0.2 does not have provenance: https://api.github.com/repos/akai10tsuki/mkvbatchmultiplex/releases/146087479","Warn: release artifact v3.0.0.1 does not have provenance: https://api.github.com/repos/akai10tsuki/mkvbatchmultiplex/releases/144778683","Warn: release artifact v3.0.0.0 does not have provenance: https://api.github.com/repos/akai10tsuki/mkvbatchmultiplex/releases/141117173","Warn: release artifact v3.0.0b1.dev0 does not have provenance: https://api.github.com/repos/akai10tsuki/mkvbatchmultiplex/releases/138616221","Warn: release artifact v2.1.0b1.dev4 does not have provenance: https://api.github.com/repos/akai10tsuki/mkvbatchmultiplex/releases/29480478"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'","Warn: branch protection not enabled for branch 'dev'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-16T17:32:29.675Z","repository_id":45432880,"created_at":"2025-08-16T17:32:29.675Z","updated_at":"2025-08-16T17:32:29.675Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31638357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["batch","matroska","mkv","mkvtoolnix","plex-media-server","python3"],"created_at":"2024-08-04T09:01:35.622Z","updated_at":"2026-04-10T10:31:11.706Z","avatar_url":"https://github.com/akai10tsuki.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# mkvbatchmultiplex: MKVMERGE batch multiplexing\r\n\r\n\r\n\r\n[![image](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)\r\n\r\n\r\nChanges since version 2.0.0\r\n\r\n- The applications has been ported to [Python 3.12](https://www.python.org/downloads/release/python-3120/) and [PySide6](https://doc.qt.io/qtforpython-6/).\r\n- Added option to compute the CRC-32 of the output files and add it to the end of the file name.\r\n- [MKVToolnix](https://mkvtoolnix.download/) is now embedded to help with the Linux .version\r\n- [MediaInfo](https://mediaarea.net/en/MediaInfo) is now also embedded. [Pymediainfo](https://pymediainfo.readthedocs.io/en/stable/) was providing the library for Windows in the more recent versions of the package.\r\n\r\n## Description\r\n\r\nmkvbatchmultiplex program is for processing **mkvmerge** command line\r\nand use it as a template to apply the multiplex instructions to all the\r\nfiles found in the directory. The command line is expected to be taken\r\nfrom **mkvtoolnix-gui**:\r\n\r\n*Multiplexer-\\\u003eShow command line*\r\n\r\n**mkvmerge** and **mkvtoolnix-gui** are part of the\r\n[MKVToolNix](https://mkvtoolnix.download/) set of tools to work with\r\n[Matroska](https://www.matroska.org/) media container files.\r\n\r\nWorks with Windows (cmd.exe) or Linux/unix shells (bash, zsh, etc.)\r\n\r\n## Installation\r\n\r\n``` bash\r\npip install mkvbatchmultiplex\r\n```\r\n\r\nIt is been developed on Windows the media server is Windows based. Made\r\nlight testing on ubuntu. Will try to do more testing in linux ubuntu at\r\nleast. Many reports of not woriking on linux are solved by installing\r\n[MediaInfo](https://mediaarea.net/en/MediaInfo) this is an external\r\ndependency.\r\n\r\nmacOS will no longer be supported don\\'t have harware to make tests.\r\n\r\nIf working with the source to execute the application first create the\r\nlocale files. On the source directory execute:\r\n\r\n``` bash\r\npython setup.py generate_catalog\r\n```\r\n\r\n### Dependencies\r\n\r\n\u003e -   [Python](https://www.python.org/downloads/) 3.12.1 or greater\r\n\u003e     -   [lxml](https://lxml.de/) 5.1.0 or greater\r\n\u003e     -   [natsort](https://github.com/SethMMorton/natsort) 8.4.0 or\r\n\u003e         greater\r\n\u003e     -   [pymediainfo](https://pypi.org/project/pymediainfo/) 6.1.0 or\r\n\u003e         greater\r\n\u003e     -   [PySide6]() 6.6.1 or greater\r\n\u003e -   [MediaInfo](https://mediaarea.net/en/MediaInfo) tested with\r\n\u003e     versions 17.10-\\\u003e23.11.1\r\n\u003e -   [MKVToolNix](https://mkvtoolnix.download/) tested with versions\r\n\u003e     17.00-\\\u003e82.0.0\r\n\r\n## Usage\r\n\r\nIt assumed you have working knowledge of using MKVToolNix. Select a file\r\nmake any operations needed copy command to clipboard. Remember to select\r\nand output directory:\r\n\r\n\u003e *Multiplexer-\\\u003eShow command line*\r\n\r\nPaste command on mkvbatchmultiplex push \\\u003cAdd Queue\\\u003e is there are no\r\nmore jobs push \\\u003cStart Worker\\\u003e button and wait.\r\n\r\nStep by step examples are in the github repository\r\n[wiki](https://github.com/akai10tsuki/mkvbatchmultiplex/wiki).\r\n\r\n# Algorithms explained\r\n\r\nWhen the worker is processing a job before starting to work on a set of\r\nfiles the structure will be checked. If the structure is the same as in\r\nthe pasted command the files are processed. If it doesn\\'t match the\r\nprogram will behave according to the algorithm selected.\r\n\r\nNew algorithms:\r\n\r\nWith all Algorithms any file that is not flagged with and invalid\r\nstructure the results are the same. They are different when the files\r\nare flagged with and invalid structure on what they do.\r\n\r\n\u003e 1.  **Algorithm 0** current behavior. If the structure check fails no\r\n\u003e     command will be executed files have to be logically equal. The\r\n\u003e     resulting file will have the same structure as the destination\r\n\u003e     file on the command line. The resulting file is very likely to be\r\n\u003e     the expected result as specified on the command line. If no file\r\n\u003e     is flagged random checks usually are sufficient. Any flagged file\r\n\u003e     has to be check to fix any problem and maybe run the command with\r\n\u003e     MKVToolNix for that file.\r\n\u003e 2.  **Algorithm 1** if structure check fails it will try to find the\r\n\u003e     tracks that best matches the base file and adjust the command\r\n\u003e     accordingly. Any track not used in the command will be ignored. If\r\n\u003e     no suitable track found no command will not execute. Resulting\r\n\u003e     file structure if the same as in the command line but is not as\r\n\u003e     likely to be the desired file as in Algorithm 0. Flagged files\r\n\u003e     should be checked to see if the file is ok.\r\n\u003e 3.  **Algorithm 2** if Algorithm 1 fails tracks without match will be\r\n\u003e     ignored and and the command still will execute. The resulting file\r\n\u003e     **will not** be like the destination file in the original command.\r\n\u003e     It may even be unusable. Any flagged has to be check to see if is\r\n\u003e     usable.\r\n\r\nSince in some occasions **Algorithm 1** will produce the correct file it\r\nwill be set as the default. The original files should never be erased\r\nuntil all the new files are watched or at least check with a player that\r\nthe all the tracks are muxed as needed.\r\n\r\nOne case in which **Algorithm 2** applies is when some episodes have\r\ncommentary audio tracks. **Algorithm 1** will fail because on files with\r\nmissing commentary tracks there will not be enough audio tracks to\r\nproduce a file with a structure logically equal. There are more tracks\r\nneeded than tracks available. **Algorithm 2** will ignore this and\r\nproceed. Additional files with commentary tracks will be muxed with it.\r\n\r\nOther important difference to the current behavior is that text and\r\naudio tracks are match by language not format. For example:\r\n\r\n\u003e In the original source the audio is English with flac format and in\r\n\u003e the current file is English with ac3. This track will be used for\r\n\u003e muxing the files.\r\n\r\nFor video tracks the language is always ignored in the testing.\r\n\r\nPersonally I still used **Algorithm 0** because if I close the program\r\nwithout checking the flagged files just looking in the directory any\r\nmissing file will exactly correspond to a flagged file. For more\r\nmeticulous users **Algorithm 1** is the better one.\r\n\r\n## Roadmap\r\n\r\nThis is just the base for the project. The roadmap is:\r\n\r\n\u003e -   Work on rename module to fetch metadata\r\n\u003e -   Work on the Spanish interface translation\r\n\u003e -   Easier installation for linux\r\n\r\nFor linux installations the AppImage binary format will be used for the\r\nforseeable future.\r\n\r\nIf the the program generates any interest any further changes and\r\nadditions will **also** depend on user base needs.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakai10tsuki%2Fmkvbatchmultiplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakai10tsuki%2Fmkvbatchmultiplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakai10tsuki%2Fmkvbatchmultiplex/lists"}