From 560571905489609181138f032666813c30472bf1 Mon Sep 17 00:00:00 2001 From: yajrendrag Date: Sun, 10 Mar 2024 19:46:13 -0600 Subject: [PATCH] plugin updated in official --- .gitmodules | 3 - source/video_remuxer2/.gitignore | 4 - source/video_remuxer2/LICENSE | 674 ------- source/video_remuxer2/README.md | 3 - source/video_remuxer2/changelog.md | 5 - source/video_remuxer2/description.md | 23 - source/video_remuxer2/icon.png | Bin 43523 -> 0 bytes source/video_remuxer2/info.json | 19 - source/video_remuxer2/lib/__init__.py | 23 - source/video_remuxer2/lib/containers.json | 2029 --------------------- source/video_remuxer2/lib/ffmpeg | 1 - source/video_remuxer2/plugin.py | 285 --- source/video_remuxer2/requirements.txt | 0 13 files changed, 3069 deletions(-) delete mode 100644 source/video_remuxer2/.gitignore delete mode 100644 source/video_remuxer2/LICENSE delete mode 100644 source/video_remuxer2/README.md delete mode 100644 source/video_remuxer2/changelog.md delete mode 100644 source/video_remuxer2/description.md delete mode 100644 source/video_remuxer2/icon.png delete mode 100644 source/video_remuxer2/info.json delete mode 100644 source/video_remuxer2/lib/__init__.py delete mode 100644 source/video_remuxer2/lib/containers.json delete mode 160000 source/video_remuxer2/lib/ffmpeg delete mode 100644 source/video_remuxer2/plugin.py delete mode 100644 source/video_remuxer2/requirements.txt diff --git a/.gitmodules b/.gitmodules index 810cafb97..8b0dc3395 100644 --- a/.gitmodules +++ b/.gitmodules @@ -22,9 +22,6 @@ [submodule "source/convert_multichan_audio_to_2ch/lib/ffmpeg"] path = source/convert_multichan_audio_to_2ch/lib/ffmpeg url = https://github.com/yajrendrag/unmanic.plugin.helpers.ffmpeg.git -[submodule "source/video_remuxer2/lib/ffmpeg"] - path = source/video_remuxer2/lib/ffmpeg - url = https://github.com/yajrendrag/unmanic.plugin.helpers.ffmpeg.git [submodule "source/force_processing/lib/ffmpeg"] path = source/force_processing/lib/ffmpeg url = https://github.com/yajrendrag/unmanic.plugin.helpers.ffmpeg.git diff --git a/source/video_remuxer2/.gitignore b/source/video_remuxer2/.gitignore deleted file mode 100644 index 499ca09c3..000000000 --- a/source/video_remuxer2/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -**/__pycache__ -*.py[cod] -**/site-packages -settings.json diff --git a/source/video_remuxer2/LICENSE b/source/video_remuxer2/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/source/video_remuxer2/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/source/video_remuxer2/README.md b/source/video_remuxer2/README.md deleted file mode 100644 index e925d51a8..000000000 --- a/source/video_remuxer2/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Remux Video Files - -plugin for [Unmanic](https://github.com/Unmanic) diff --git a/source/video_remuxer2/changelog.md b/source/video_remuxer2/changelog.md deleted file mode 100644 index b5cfe255a..000000000 --- a/source/video_remuxer2/changelog.md +++ /dev/null @@ -1,5 +0,0 @@ - -**0.0.1** -- based on original video remuxer plugin -- adds ffmpeg helper library fix to avoid incorrect "error" when ffprobe legitimately contains the string "error" -- Initial version diff --git a/source/video_remuxer2/description.md b/source/video_remuxer2/description.md deleted file mode 100644 index 876e48acd..000000000 --- a/source/video_remuxer2/description.md +++ /dev/null @@ -1,23 +0,0 @@ - - - -:::tip -Ensure that your container already supports the streams contained in the source file. -Different containers support different stream codecs. -Especially note subtitle streams. To avoid issues with subtitles, consider also using a Plugin to strip subtitles from the file prior to remuxing. -::: - ---- - -#### How this plugin works: - -This plugin will remux your files to the configured output video container. - -It will attempt to transcode any streams not supported by the configured output container. - -If the stream is unable to be transcoded, this plugin will remove that stream. - -If you suspect a stream is being incorrectly transcoded or removed during this remux process, -report it [here](https://github.com/Unmanic/unmanic-plugins/issues) with your FFmpeg log command log. - - diff --git a/source/video_remuxer2/icon.png b/source/video_remuxer2/icon.png deleted file mode 100644 index a000e1ba8e8cb01ce6cc9a7491dcad68842b906f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43523 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

Evz`gZ;Opy`D8 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 Cb8sa9 diff --git a/source/video_remuxer2/info.json b/source/video_remuxer2/info.json deleted file mode 100644 index 118caaece..000000000 --- a/source/video_remuxer2/info.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "author": "Josh.5", - "compatibility": [ - 1, - 2 - ], - "description": "Remux a video file to the configured container", - "icon": "https://raw.githubusercontent.com/Josh5/unmanic.plugin.video_remuxer/master/icon.png", - "id": "video_remuxer2", - "name": "Remux Video Files2", - "platform": [ - "all" - ], - "priorities": { - "on_worker_process": 3 - }, - "tags": "video,ffmpeg", - "version": "0.0.1" -} diff --git a/source/video_remuxer2/lib/__init__.py b/source/video_remuxer2/lib/__init__.py deleted file mode 100644 index ebcf63458..000000000 --- a/source/video_remuxer2/lib/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -""" - plugins.__init__.py - - Written by: Josh.5 - Date: 28 Aug 2021, (11:55 PM) - - Copyright: - Copyright (C) 2021 Josh Sunnex - - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General - Public License as published by the Free Software Foundation, version 3. - - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License along with this program. - If not, see . - -""" diff --git a/source/video_remuxer2/lib/containers.json b/source/video_remuxer2/lib/containers.json deleted file mode 100644 index 5feb23d45..000000000 --- a/source/video_remuxer2/lib/containers.json +++ /dev/null @@ -1,2029 +0,0 @@ -{ - "template": { - "label": "TEMPLATE - this contains all the possible options for codec names... Use this if a new container is added", - "extension": "na", - "codec_types": [ - "video", - "audio", - "subtitle", - "data", - "attachment" - ], - "codec_names": { - "video": [ - "4xm", - "8bps", - "a64_multi", - "a64_multi5", - "aasc", - "agm", - "aic", - "alias_pix", - "amv", - "anm", - "ansi", - "apng", - "arbc", - "argo", - "asv1", - "asv2", - "aura", - "aura2", - "av1", - "avrn", - "avrp", - "avs", - "avs2", - "avs3", - "avui", - "ayuv", - "bethsoftvid", - "bfi", - "binkvideo", - "bintext", - "bitpacked", - "bmp", - "bmv_video", - "brender_pix", - "c93", - "cavs", - "cdgraphics", - "cdtoons", - "cdxl", - "cfhd", - "cinepak", - "clearvideo", - "cljr", - "cllc", - "cmv", - "cpia", - "cri", - "cscd", - "cyuv", - "daala", - "dds", - "dfa", - "dirac", - "dnxhd", - "dpx", - "dsicinvideo", - "dvvideo", - "dxa", - "dxtory", - "dxv", - "escape124", - "escape130", - "exr", - "ffv1", - "ffvhuff", - "fic", - "fits", - "flashsv", - "flashsv2", - "flic", - "flv1", - "fmvc", - "fraps", - "frwu", - "g2m", - "gdv", - "gif", - "h261", - "h263", - "h263i", - "h263p", - "h264", - "hap", - "hevc", - "hnm4video", - "hq_hqa", - "hqx", - "huffyuv", - "hymt", - "idcin", - "idf", - "iff_ilbm", - "imm4", - "imm5", - "indeo2", - "indeo3", - "indeo4", - "indeo5", - "interplayvideo", - "ipu", - "jpeg2000", - "jpegls", - "jv", - "kgv1", - "kmvc", - "lagarith", - "ljpeg", - "loco", - "lscr", - "m101", - "mad", - "magicyuv", - "mdec", - "mimic", - "mjpeg", - "mjpegb", - "mmvideo", - "mobiclip", - "motionpixels", - "mpeg1video", - "mpeg2video", - "mpeg4", - "msa1", - "mscc", - "msmpeg4v1", - "msmpeg4v2", - "msmpeg4v3", - "msp2", - "msrle", - "mss1", - "mss2", - "msvideo1", - "mszh", - "mts2", - "mv30", - "mvc1", - "mvc2", - "mvdv", - "mvha", - "mwsc", - "mxpeg", - "notchlc", - "nuv", - "paf_video", - "pam", - "pbm", - "pcx", - "pfm", - "pgm", - "pgmyuv", - "pgx", - "photocd", - "pictor", - "pixlet", - "png", - "ppm", - "prores", - "prosumer", - "psd", - "ptx", - "qdraw", - "qpeg", - "qtrle", - "r10k", - "r210", - "rasc", - "rawvideo", - "rl2", - "roq", - "rpza", - "rscc", - "sanm", - "scpr", - "screenpresso", - "sga", - "sgi", - "sgirle", - "sheervideo", - "simbiosis_imx", - "smackvideo", - "smc", - "smvjpeg", - "snow", - "sp5x", - "speedhq", - "srgc", - "sunrast", - "svg", - "svq1", - "svq3", - "targa", - "targa_y216", - "tdsc", - "tgq", - "tgv", - "theora", - "thp", - "tiertexseqvideo", - "tiff", - "tmv", - "tqi", - "truemotion1", - "truemotion2", - "truemotion2rt", - "tscc", - "tscc2", - "txd", - "ulti", - "utvideo", - "v210", - "v210x", - "v308", - "v408", - "v410", - "vb", - "vble", - "vc1", - "vc1image", - "vcr1", - "vixl", - "vmdvideo", - "vmnc", - "vp3", - "vp4", - "vp5", - "vp6", - "vp6a", - "vp6f", - "vp7", - "vp8", - "vp9", - "vvc", - "wcmv", - "webp", - "wnv1", - "wrapped_avframe", - "ws_vqa", - "xan_wc3", - "xan_wc4", - "xbin", - "xbm", - "xface", - "xpm", - "xwd", - "y41p", - "ylc", - "yop", - "yuv4", - "zerocodec", - "zlib", - "zmbv" - ], - "audio": [ - "4gv", - "8svx_exp", - "8svx_fib", - "aac", - "aac_latm", - "ac3", - "acelp", - "adpcm_4xm", - "adpcm_adx", - "adpcm_afc", - "adpcm_agm", - "adpcm_aica", - "adpcm_argo", - "adpcm_ct", - "adpcm_dtk", - "adpcm_ea", - "adpcm_ea_maxis_xa", - "adpcm_ea_r1", - "adpcm_ea_r2", - "adpcm_ea_r3", - "adpcm_ea_xas", - "adpcm_g722", - "adpcm_g726", - "adpcm_g726le", - "adpcm_ima_alp", - "adpcm_ima_amv", - "adpcm_ima_apc", - "adpcm_ima_apm", - "adpcm_ima_cunning", - "adpcm_ima_dat4", - "adpcm_ima_dk3", - "adpcm_ima_dk4", - "adpcm_ima_ea_eacs", - "adpcm_ima_ea_sead", - "adpcm_ima_iss", - "adpcm_ima_moflex", - "adpcm_ima_mtf", - "adpcm_ima_oki", - "adpcm_ima_qt", - "adpcm_ima_rad", - "adpcm_ima_smjpeg", - "adpcm_ima_ssi", - "adpcm_ima_wav", - "adpcm_ima_ws", - "adpcm_ms", - "adpcm_mtaf", - "adpcm_psx", - "adpcm_sbpro_2", - "adpcm_sbpro_3", - "adpcm_sbpro_4", - "adpcm_swf", - "adpcm_thp", - "adpcm_thp_le", - "adpcm_vima", - "adpcm_xa", - "adpcm_yamaha", - "adpcm_zork", - "alac", - "amr_nb", - "amr_wb", - "ape", - "aptx", - "aptx_hd", - "atrac1", - "atrac3", - "atrac3al", - "atrac3p", - "atrac3pal", - "atrac9", - "avc", - "binkaudio_dct", - "binkaudio_rdft", - "bmv_audio", - "celt", - "codec2", - "comfortnoise", - "cook", - "derf_dpcm", - "dolby_e", - "dsd_lsbf", - "dsd_lsbf_planar", - "dsd_msbf", - "dsd_msbf_planar", - "dsicinaudio", - "dss_sp", - "dst", - "dts", - "dvaudio", - "eac3", - "evrc", - "fastaudio", - "flac", - "g723_1", - "g729", - "gremlin_dpcm", - "gsm", - "gsm_ms", - "hca", - "hcom", - "iac", - "ilbc", - "imc", - "interplay_dpcm", - "interplayacm", - "mace3", - "mace6", - "metasound", - "mlp", - "mp1", - "mp2", - "mp3", - "mp3adu", - "mp3on4", - "mp4als", - "mpegh_3d_audio", - "musepack7", - "musepack8", - "nellymoser", - "opus", - "paf_audio", - "pcm_alaw", - "pcm_bluray", - "pcm_dvd", - "pcm_f16le", - "pcm_f24le", - "pcm_f32be", - "pcm_f32le", - "pcm_f64be", - "pcm_f64le", - "pcm_lxf", - "pcm_mulaw", - "pcm_s16be", - "pcm_s16be_planar", - "pcm_s16le", - "pcm_s16le_planar", - "pcm_s24be", - "pcm_s24daud", - "pcm_s24le", - "pcm_s24le_planar", - "pcm_s32be", - "pcm_s32le", - "pcm_s32le_planar", - "pcm_s64be", - "pcm_s64le", - "pcm_s8", - "pcm_s8_planar", - "pcm_sga", - "pcm_u16be", - "pcm_u16le", - "pcm_u24be", - "pcm_u24le", - "pcm_u32be", - "pcm_u32le", - "pcm_u8", - "pcm_vidc", - "qcelp", - "qdm2", - "qdmc", - "ra_144", - "ra_288", - "ralf", - "roq_dpcm", - "s302m", - "sbc", - "sdx2_dpcm", - "shorten", - "sipr", - "siren", - "smackaudio", - "smv", - "sol_dpcm", - "sonic", - "sonicls", - "speex", - "tak", - "truehd", - "truespeech", - "tta", - "twinvq", - "vmdaudio", - "vorbis", - "wavesynth", - "wavpack", - "westwood_snd1", - "wmavoice", - "xan_dpcm", - "xma1", - "xma2" - ], - "subtitle": [ - "arib_caption", - "ass", - "dvb_subtitle", - "dvb_teletext", - "dvd_subtitle", - "eia_608", - "hdmv_pgs_subtitle", - "hdmv_text_subtitle", - "jacosub", - "microdvd", - "mov_text", - "mpl2", - "pjs", - "realtext", - "sami", - "srt", - "ssa", - "stl", - "subrip", - "subviewer", - "subviewer1", - "text", - "ttml", - "vplayer", - "webvtt", - "xsub" - ], - "data": [ - "bin_data", - "dvd_nav_packet", - "epg", - "klv", - "mpegts", - "otf", - "scte_35", - "timed_id3" - ], - "attachment": [ - "ttf" - ] - }, - "default_encoder_params": { - "video": [ - "libx264" - ], - "audio": [ - "aac" - ], - "subtitle": [ - "subrip" - ], - "data": [], - "attachment": [] - }, - "remove_codec_names": { - "video": [], - "audio": [], - "subtitle": [], - "data": [], - "attachment": [] - } - }, - "mkv": { - "label": ".mkv - Matroska", - "extension": "mkv", - "codec_types": [ - "video", - "audio", - "subtitle", - "data", - "attachment" - ], - "codec_names": { - "video": [ - "apng", - "arbc", - "argo", - "asv1", - "asv2", - "aura", - "aura2", - "av1", - "avrn", - "avrp", - "avs", - "avs2", - "avs3", - "avui", - "ayuv", - "bethsoftvid", - "bfi", - "binkvideo", - "bintext", - "bitpacked", - "bmp", - "bmv_video", - "brender_pix", - "c93", - "cavs", - "cdgraphics", - "cdtoons", - "cdxl", - "cfhd", - "cinepak", - "clearvideo", - "cljr", - "cllc", - "cmv", - "cpia", - "cri", - "cscd", - "cyuv", - "daala", - "dds", - "dfa", - "dirac", - "dnxhd", - "dpx", - "dsicinvideo", - "dvvideo", - "dxa", - "dxtory", - "dxv", - "escape124", - "escape130", - "exr", - "ffv1", - "ffvhuff", - "fic", - "fits", - "flashsv", - "flashsv2", - "flic", - "flv1", - "fmvc", - "fraps", - "frwu", - "g2m", - "gdv", - "gif", - "h261", - "h263", - "h263i", - "h263p", - "h264", - "hap", - "hevc", - "hnm4video", - "hq_hqa", - "hqx", - "huffyuv", - "hymt", - "idcin", - "idf", - "iff_ilbm", - "imm4", - "imm5", - "indeo2", - "indeo3", - "indeo4", - "indeo5", - "interplayvideo", - "ipu", - "jpeg2000", - "jpegls", - "jv", - "kgv1", - "kmvc", - "lagarith", - "ljpeg", - "loco", - "lscr", - "m101", - "mad", - "magicyuv", - "mdec", - "mimic", - "mjpeg", - "mjpegb", - "mmvideo", - "mobiclip", - "motionpixels", - "mpeg1video", - "mpeg2video", - "mpeg4", - "msa1", - "mscc", - "msmpeg4v1", - "msmpeg4v2", - "msmpeg4v3", - "msp2", - "msrle", - "mss1", - "mss2", - "msvideo1", - "mszh", - "mts2", - "mv30", - "mvc1", - "mvc2", - "mvdv", - "mvha", - "mwsc", - "mxpeg", - "notchlc", - "nuv", - "paf_video", - "pam", - "pbm", - "pcx", - "pfm", - "pgm", - "pgmyuv", - "pgx", - "photocd", - "pictor", - "pixlet", - "png", - "ppm", - "prores", - "prosumer", - "psd", - "ptx", - "qdraw", - "qpeg", - "qtrle", - "r10k", - "r210", - "rasc", - "rawvideo", - "rl2", - "roq", - "rpza", - "rscc", - "sanm", - "scpr", - "screenpresso", - "sga", - "sgi", - "sgirle", - "sheervideo", - "simbiosis_imx", - "smackvideo", - "smc", - "smvjpeg", - "snow", - "sp5x", - "speedhq", - "srgc", - "sunrast", - "svg", - "svq1", - "svq3", - "targa", - "targa_y216", - "tdsc", - "tgq", - "tgv", - "theora", - "thp", - "tiertexseqvideo", - "tiff", - "tmv", - "tqi", - "truemotion1", - "truemotion2", - "truemotion2rt", - "tscc", - "tscc2", - "txd", - "ulti", - "utvideo", - "v210", - "v210x", - "v308", - "v408", - "v410", - "vb", - "vble", - "vc1", - "vc1image", - "vcr1", - "vixl", - "vmdvideo", - "vmnc", - "vp3", - "vp4", - "vp5", - "vp6", - "vp6a", - "vp6f", - "vp7", - "vp8", - "vp9", - "vvc", - "wcmv", - "webp", - "wnv1", - "wrapped_avframe", - "ws_vqa", - "xan_wc3", - "xan_wc4", - "xbin", - "xbm", - "xface", - "xpm", - "xwd", - "y41p", - "ylc", - "yop", - "yuv4", - "zerocodec", - "zlib", - "zmbv" - ], - "audio": [ - "4gv", - "8svx_exp", - "8svx_fib", - "aac", - "aac_latm", - "ac3", - "acelp", - "adpcm_4xm", - "adpcm_adx", - "adpcm_afc", - "adpcm_agm", - "adpcm_aica", - "adpcm_argo", - "adpcm_ct", - "adpcm_dtk", - "adpcm_ea", - "adpcm_ea_maxis_xa", - "adpcm_ea_r1", - "adpcm_ea_r2", - "adpcm_ea_r3", - "adpcm_ea_xas", - "adpcm_g722", - "adpcm_g726", - "adpcm_g726le", - "adpcm_ima_alp", - "adpcm_ima_amv", - "adpcm_ima_apc", - "adpcm_ima_apm", - "adpcm_ima_cunning", - "adpcm_ima_dat4", - "adpcm_ima_dk3", - "adpcm_ima_dk4", - "adpcm_ima_ea_eacs", - "adpcm_ima_ea_sead", - "adpcm_ima_iss", - "adpcm_ima_moflex", - "adpcm_ima_mtf", - "adpcm_ima_oki", - "adpcm_ima_qt", - "adpcm_ima_rad", - "adpcm_ima_smjpeg", - "adpcm_ima_ssi", - "adpcm_ima_wav", - "adpcm_ima_ws", - "adpcm_ms", - "adpcm_mtaf", - "adpcm_psx", - "adpcm_sbpro_2", - "adpcm_sbpro_3", - "adpcm_sbpro_4", - "adpcm_swf", - "adpcm_thp", - "adpcm_thp_le", - "adpcm_vima", - "adpcm_xa", - "adpcm_yamaha", - "adpcm_zork", - "alac", - "amr_nb", - "amr_wb", - "ape", - "aptx", - "aptx_hd", - "atrac1", - "atrac3", - "atrac3al", - "atrac3p", - "atrac3pal", - "atrac9", - "avc", - "binkaudio_dct", - "binkaudio_rdft", - "bmv_audio", - "celt", - "codec2", - "comfortnoise", - "cook", - "derf_dpcm", - "dolby_e", - "dsd_lsbf", - "dsd_lsbf_planar", - "dsd_msbf", - "dsd_msbf_planar", - "dsicinaudio", - "dss_sp", - "dst", - "dts", - "dvaudio", - "eac3", - "evrc", - "fastaudio", - "flac", - "g723_1", - "g729", - "gremlin_dpcm", - "gsm", - "gsm_ms", - "hca", - "hcom", - "iac", - "ilbc", - "imc", - "interplay_dpcm", - "interplayacm", - "mace3", - "mace6", - "metasound", - "mlp", - "mp1", - "mp2", - "mp3", - "mp3adu", - "mp3on4", - "mp4als", - "mpegh_3d_audio", - "musepack7", - "musepack8", - "nellymoser", - "opus", - "paf_audio", - "pcm_alaw", - "pcm_bluray", - "pcm_dvd", - "pcm_f16le", - "pcm_f24le", - "pcm_f32be", - "pcm_f32le", - "pcm_f64be", - "pcm_f64le", - "pcm_lxf", - "pcm_mulaw", - "pcm_s16be", - "pcm_s16be_planar", - "pcm_s16le", - "pcm_s16le_planar", - "pcm_s24be", - "pcm_s24daud", - "pcm_s24le", - "pcm_s24le_planar", - "pcm_s32be", - "pcm_s32le", - "pcm_s32le_planar", - "pcm_s64be", - "pcm_s64le", - "pcm_s8", - "pcm_s8_planar", - "pcm_sga", - "pcm_u16be", - "pcm_u16le", - "pcm_u24be", - "pcm_u24le", - "pcm_u32be", - "pcm_u32le", - "pcm_u8", - "pcm_vidc", - "qcelp", - "qdm2", - "qdmc", - "ra_144", - "ra_288", - "ralf", - "roq_dpcm", - "s302m", - "sbc", - "sdx2_dpcm", - "shorten", - "sipr", - "siren", - "smackaudio", - "smv", - "sol_dpcm", - "sonic", - "sonicls", - "speex", - "tak", - "truehd", - "truespeech", - "tta", - "twinvq", - "vmdaudio", - "vorbis", - "wavesynth", - "wavpack", - "westwood_snd1", - "wmavoice", - "xan_dpcm", - "xma1", - "xma2" - ], - "subtitle": [ - "ass", - "dvb_subtitle", - "dvb_teletext", - "dvd_subtitle", - "eia_608", - "hdmv_pgs_subtitle", - "hdmv_text_subtitle", - "jacosub", - "microdvd", - "mpl2", - "pjs", - "realtext", - "srt", - "ssa", - "stl", - "subrip", - "subviewer", - "subviewer1", - "text", - "ttml", - "vplayer", - "webvtt" - ], - "data": [], - "attachment": [ - "ttf" - ] - }, - "default_encoder_params": { - "video": [ - "libx264" - ], - "audio": [ - "aac" - ], - "subtitle": [ - "subrip" - ], - "data": [], - "attachment": [] - }, - "remove_codec_names": { - "video": [], - "audio": [], - "subtitle": [], - "data": [], - "attachment": [] - } - }, - "avi": { - "label": ".avi - AVI (Audio Video Interleaved)", - "extension": "avi", - "codec_types": [ - "video", - "audio", - "subtitle", - "data", - "attachment" - ], - "codec_names": { - "video": [ - "4xm", - "8bps", - "a64_multi", - "a64_multi5", - "aasc", - "agm", - "aic", - "alias_pix", - "amv", - "anm", - "ansi", - "apng", - "arbc", - "argo", - "asv1", - "asv2", - "aura", - "aura2", - "av1", - "avrn", - "avrp", - "avs", - "avs2", - "avs3", - "avui", - "ayuv", - "bethsoftvid", - "bfi", - "binkvideo", - "bintext", - "bitpacked", - "bmp", - "bmv_video", - "brender_pix", - "c93", - "cavs", - "cdgraphics", - "cdtoons", - "cdxl", - "cfhd", - "cinepak", - "clearvideo", - "cljr", - "cllc", - "cmv", - "cpia", - "cri", - "cscd", - "cyuv", - "daala", - "dds", - "dfa", - "dirac", - "dnxhd", - "dpx", - "dsicinvideo", - "dvvideo", - "dxa", - "dxtory", - "dxv", - "escape124", - "escape130", - "exr", - "ffv1", - "ffvhuff", - "fic", - "fits", - "flashsv", - "flashsv2", - "flic", - "flv1", - "fmvc", - "fraps", - "frwu", - "g2m", - "gdv", - "gif", - "h261", - "h263", - "h263i", - "h263p", - "h264", - "hap", - "hnm4video", - "hq_hqa", - "hqx", - "huffyuv", - "hymt", - "idcin", - "idf", - "iff_ilbm", - "imm4", - "imm5", - "indeo2", - "indeo3", - "indeo4", - "indeo5", - "interplayvideo", - "ipu", - "jpeg2000", - "jpegls", - "jv", - "kgv1", - "kmvc", - "lagarith", - "ljpeg", - "loco", - "lscr", - "m101", - "mad", - "magicyuv", - "mdec", - "mimic", - "mjpeg", - "mjpegb", - "mmvideo", - "mobiclip", - "motionpixels", - "mpeg1video", - "mpeg2video", - "mpeg4", - "msa1", - "mscc", - "msmpeg4v1", - "msmpeg4v2", - "msmpeg4v3", - "msp2", - "msrle", - "mss1", - "mss2", - "msvideo1", - "mszh", - "mts2", - "mv30", - "mvc1", - "mvc2", - "mvdv", - "mvha", - "mwsc", - "mxpeg", - "notchlc", - "nuv", - "paf_video", - "pam", - "pbm", - "pcx", - "pfm", - "pgm", - "pgmyuv", - "pgx", - "photocd", - "pictor", - "pixlet", - "png", - "ppm", - "prores", - "prosumer", - "psd", - "ptx", - "qdraw", - "qpeg", - "qtrle", - "r10k", - "r210", - "rasc", - "rawvideo", - "rl2", - "roq", - "rpza", - "rscc", - "sanm", - "scpr", - "screenpresso", - "sga", - "sgi", - "sgirle", - "sheervideo", - "simbiosis_imx", - "smackvideo", - "smc", - "smvjpeg", - "snow", - "sp5x", - "speedhq", - "srgc", - "sunrast", - "svg", - "svq1", - "svq3", - "targa", - "targa_y216", - "tdsc", - "tgq", - "tgv", - "theora", - "thp", - "tiertexseqvideo", - "tiff", - "tmv", - "tqi", - "truemotion1", - "truemotion2", - "truemotion2rt", - "tscc", - "tscc2", - "txd", - "ulti", - "utvideo", - "v210", - "v210x", - "v308", - "v408", - "v410", - "vb", - "vble", - "vc1", - "vc1image", - "vcr1", - "vixl", - "vmdvideo", - "vmnc", - "vp3", - "vp4", - "vp5", - "vp6", - "vp6a", - "vp6f", - "vp7", - "vp8", - "vp9", - "vvc", - "wcmv", - "webp", - "wnv1", - "wrapped_avframe", - "ws_vqa", - "xan_wc3", - "xan_wc4", - "xbin", - "xbm", - "xface", - "xpm", - "xwd", - "y41p", - "ylc", - "yop", - "yuv4", - "zerocodec", - "zlib", - "zmbv" - ], - "audio": [ - "4gv", - "8svx_exp", - "8svx_fib", - "aac", - "aac_latm", - "ac3", - "acelp", - "adpcm_4xm", - "adpcm_adx", - "adpcm_afc", - "adpcm_agm", - "adpcm_aica", - "adpcm_argo", - "adpcm_ct", - "adpcm_dtk", - "adpcm_ea", - "adpcm_ea_maxis_xa", - "adpcm_ea_r1", - "adpcm_ea_r2", - "adpcm_ea_r3", - "adpcm_ea_xas", - "adpcm_g722", - "adpcm_g726", - "adpcm_g726le", - "adpcm_ima_alp", - "adpcm_ima_amv", - "adpcm_ima_apc", - "adpcm_ima_apm", - "adpcm_ima_cunning", - "adpcm_ima_dat4", - "adpcm_ima_dk3", - "adpcm_ima_dk4", - "adpcm_ima_ea_eacs", - "adpcm_ima_ea_sead", - "adpcm_ima_iss", - "adpcm_ima_moflex", - "adpcm_ima_mtf", - "adpcm_ima_oki", - "adpcm_ima_qt", - "adpcm_ima_rad", - "adpcm_ima_smjpeg", - "adpcm_ima_ssi", - "adpcm_ima_wav", - "adpcm_ima_ws", - "adpcm_ms", - "adpcm_mtaf", - "adpcm_psx", - "adpcm_sbpro_2", - "adpcm_sbpro_3", - "adpcm_sbpro_4", - "adpcm_swf", - "adpcm_thp", - "adpcm_thp_le", - "adpcm_vima", - "adpcm_xa", - "adpcm_yamaha", - "adpcm_zork", - "alac", - "amr_nb", - "amr_wb", - "ape", - "aptx", - "aptx_hd", - "atrac1", - "atrac3", - "atrac3al", - "atrac3p", - "atrac3pal", - "atrac9", - "avc", - "binkaudio_dct", - "binkaudio_rdft", - "bmv_audio", - "celt", - "codec2", - "comfortnoise", - "cook", - "derf_dpcm", - "dolby_e", - "dsd_lsbf", - "dsd_lsbf_planar", - "dsd_msbf", - "dsd_msbf_planar", - "dsicinaudio", - "dss_sp", - "dst", - "dts", - "dvaudio", - "eac3", - "evrc", - "fastaudio", - "flac", - "g723_1", - "g729", - "gremlin_dpcm", - "gsm", - "gsm_ms", - "hca", - "hcom", - "iac", - "ilbc", - "imc", - "interplay_dpcm", - "interplayacm", - "mace3", - "mace6", - "metasound", - "mlp", - "mp1", - "mp2", - "mp3", - "mp3adu", - "mp3on4", - "mp4als", - "mpegh_3d_audio", - "musepack7", - "musepack8", - "nellymoser", - "opus", - "paf_audio", - "pcm_alaw", - "pcm_bluray", - "pcm_dvd", - "pcm_f16le", - "pcm_f24le", - "pcm_f32be", - "pcm_f32le", - "pcm_f64be", - "pcm_f64le", - "pcm_lxf", - "pcm_mulaw", - "pcm_s16be", - "pcm_s16be_planar", - "pcm_s16le", - "pcm_s16le_planar", - "pcm_s24be", - "pcm_s24daud", - "pcm_s24le", - "pcm_s24le_planar", - "pcm_s32be", - "pcm_s32le", - "pcm_s32le_planar", - "pcm_s64be", - "pcm_s64le", - "pcm_s8", - "pcm_s8_planar", - "pcm_sga", - "pcm_u16be", - "pcm_u16le", - "pcm_u24be", - "pcm_u24le", - "pcm_u32be", - "pcm_u32le", - "pcm_u8", - "pcm_vidc", - "qcelp", - "qdm2", - "qdmc", - "ra_144", - "ra_288", - "ralf", - "roq_dpcm", - "s302m", - "sbc", - "sdx2_dpcm", - "shorten", - "sipr", - "siren", - "smackaudio", - "smv", - "sol_dpcm", - "sonic", - "sonicls", - "speex", - "tak", - "truehd", - "truespeech", - "tta", - "twinvq", - "vmdaudio", - "vorbis", - "wavesynth", - "wavpack", - "westwood_snd1", - "wmavoice", - "xan_dpcm", - "xma1", - "xma2" - ], - "subtitle": [ - "ass", - "dvb_subtitle", - "dvb_teletext", - "dvd_subtitle", - "eia_608", - "hdmv_pgs_subtitle", - "hdmv_text_subtitle", - "jacosub", - "microdvd", - "mpl2", - "pjs", - "realtext", - "sami", - "srt", - "ssa", - "stl", - "subrip", - "subviewer", - "subviewer1", - "text", - "ttml", - "vplayer", - "xsub" - ], - "data": [ - "bin_data", - "dvd_nav_packet", - "epg", - "klv", - "mpegts", - "otf", - "scte_35", - "timed_id3" - ], - "attachment": [ - "ttf" - ] - }, - "default_encoder_params": { - "video": [ - "libx264" - ], - "audio": [ - "aac" - ], - "subtitle": [], - "data": [], - "attachment": [] - }, - "remove_codec_names": { - "video": [], - "audio": [], - "subtitle": [], - "data": [], - "attachment": [] - } - }, - "mp4": { - "label": ".mp4 - MP4 (MPEG-4 Part 14)", - "extension": "mp4", - "codec_types": [ - "video", - "audio", - "subtitle", - "data", - "attachment" - ], - "codec_names": { - "video": [ - "4xm", - "8bps", - "a64_multi", - "a64_multi5", - "aasc", - "agm", - "aic", - "alias_pix", - "amv", - "anm", - "ansi", - "apng", - "arbc", - "argo", - "asv1", - "asv2", - "aura", - "aura2", - "av1", - "avrn", - "avrp", - "avs", - "avs2", - "avs3", - "avui", - "ayuv", - "bethsoftvid", - "bfi", - "binkvideo", - "bintext", - "bitpacked", - "bmp", - "bmv_video", - "brender_pix", - "c93", - "cavs", - "cdgraphics", - "cdtoons", - "cdxl", - "cfhd", - "cinepak", - "clearvideo", - "cljr", - "cllc", - "cmv", - "cpia", - "cri", - "cscd", - "cyuv", - "daala", - "dds", - "dfa", - "dirac", - "dnxhd", - "dpx", - "dsicinvideo", - "dvvideo", - "dxa", - "dxtory", - "dxv", - "escape124", - "escape130", - "exr", - "ffv1", - "ffvhuff", - "fic", - "fits", - "flashsv", - "flashsv2", - "flic", - "flv1", - "fmvc", - "fraps", - "frwu", - "g2m", - "gdv", - "gif", - "h261", - "h263", - "h263i", - "h263p", - "h264", - "hap", - "hevc", - "hnm4video", - "hq_hqa", - "hqx", - "huffyuv", - "hymt", - "idcin", - "idf", - "iff_ilbm", - "imm4", - "imm5", - "indeo2", - "indeo3", - "indeo4", - "indeo5", - "interplayvideo", - "ipu", - "jpeg2000", - "jpegls", - "jv", - "kgv1", - "kmvc", - "lagarith", - "ljpeg", - "loco", - "lscr", - "m101", - "mad", - "magicyuv", - "mdec", - "mimic", - "mjpeg", - "mjpegb", - "mmvideo", - "mobiclip", - "motionpixels", - "mpeg1video", - "mpeg2video", - "mpeg4", - "msa1", - "mscc", - "msmpeg4v1", - "msmpeg4v2", - "msmpeg4v3", - "msp2", - "msrle", - "mss1", - "mss2", - "msvideo1", - "mszh", - "mts2", - "mv30", - "mvc1", - "mvc2", - "mvdv", - "mvha", - "mwsc", - "mxpeg", - "notchlc", - "nuv", - "paf_video", - "pam", - "pbm", - "pcx", - "pfm", - "pgm", - "pgmyuv", - "pgx", - "photocd", - "pictor", - "pixlet", - "png", - "ppm", - "prores", - "prosumer", - "psd", - "ptx", - "qdraw", - "qpeg", - "qtrle", - "r10k", - "r210", - "rasc", - "rawvideo", - "rl2", - "roq", - "rpza", - "rscc", - "sanm", - "scpr", - "screenpresso", - "sga", - "sgi", - "sgirle", - "sheervideo", - "simbiosis_imx", - "smackvideo", - "smc", - "smvjpeg", - "snow", - "sp5x", - "speedhq", - "srgc", - "sunrast", - "svg", - "svq1", - "svq3", - "targa", - "targa_y216", - "tdsc", - "tgq", - "tgv", - "theora", - "thp", - "tiertexseqvideo", - "tiff", - "tmv", - "tqi", - "truemotion1", - "truemotion2", - "truemotion2rt", - "tscc", - "tscc2", - "txd", - "ulti", - "utvideo", - "v210", - "v210x", - "v308", - "v408", - "v410", - "vb", - "vble", - "vc1", - "vc1image", - "vcr1", - "vixl", - "vmdvideo", - "vmnc", - "vp3", - "vp4", - "vp5", - "vp6", - "vp6a", - "vp6f", - "vp7", - "vp8", - "vp9", - "vvc", - "wcmv", - "webp", - "wnv1", - "wrapped_avframe", - "ws_vqa", - "xan_wc3", - "xan_wc4", - "xbin", - "xbm", - "xface", - "xpm", - "xwd", - "y41p", - "ylc", - "yop", - "yuv4", - "zerocodec", - "zlib", - "zmbv" - ], - "audio": [ - "4gv", - "8svx_exp", - "8svx_fib", - "aac", - "aac_latm", - "ac3", - "acelp", - "adpcm_4xm", - "adpcm_adx", - "adpcm_afc", - "adpcm_agm", - "adpcm_aica", - "adpcm_argo", - "adpcm_ct", - "adpcm_dtk", - "adpcm_ea", - "adpcm_ea_maxis_xa", - "adpcm_ea_r1", - "adpcm_ea_r2", - "adpcm_ea_r3", - "adpcm_ea_xas", - "adpcm_g722", - "adpcm_g726", - "adpcm_g726le", - "adpcm_ima_alp", - "adpcm_ima_amv", - "adpcm_ima_apc", - "adpcm_ima_apm", - "adpcm_ima_cunning", - "adpcm_ima_dat4", - "adpcm_ima_dk3", - "adpcm_ima_dk4", - "adpcm_ima_ea_eacs", - "adpcm_ima_ea_sead", - "adpcm_ima_iss", - "adpcm_ima_moflex", - "adpcm_ima_mtf", - "adpcm_ima_oki", - "adpcm_ima_qt", - "adpcm_ima_rad", - "adpcm_ima_smjpeg", - "adpcm_ima_ssi", - "adpcm_ima_wav", - "adpcm_ima_ws", - "adpcm_ms", - "adpcm_mtaf", - "adpcm_psx", - "adpcm_sbpro_2", - "adpcm_sbpro_3", - "adpcm_sbpro_4", - "adpcm_swf", - "adpcm_thp", - "adpcm_thp_le", - "adpcm_vima", - "adpcm_xa", - "adpcm_yamaha", - "adpcm_zork", - "alac", - "amr_nb", - "amr_wb", - "ape", - "aptx", - "aptx_hd", - "atrac1", - "atrac3", - "atrac3al", - "atrac3p", - "atrac3pal", - "atrac9", - "avc", - "binkaudio_dct", - "binkaudio_rdft", - "bmv_audio", - "celt", - "codec2", - "comfortnoise", - "cook", - "derf_dpcm", - "dolby_e", - "dsd_lsbf", - "dsd_lsbf_planar", - "dsd_msbf", - "dsd_msbf_planar", - "dsicinaudio", - "dss_sp", - "dst", - "dts", - "dvaudio", - "eac3", - "evrc", - "fastaudio", - "flac", - "g723_1", - "g729", - "gremlin_dpcm", - "gsm", - "gsm_ms", - "hca", - "hcom", - "iac", - "ilbc", - "imc", - "interplay_dpcm", - "interplayacm", - "mace3", - "mace6", - "metasound", - "mlp", - "mp1", - "mp2", - "mp3", - "mp3adu", - "mp3on4", - "mp4als", - "mpegh_3d_audio", - "musepack7", - "musepack8", - "nellymoser", - "opus", - "paf_audio", - "pcm_alaw", - "pcm_bluray", - "pcm_dvd", - "pcm_f16le", - "pcm_f24le", - "pcm_f32be", - "pcm_f32le", - "pcm_f64be", - "pcm_f64le", - "pcm_lxf", - "pcm_mulaw", - "pcm_s16be", - "pcm_s16be_planar", - "pcm_s16le", - "pcm_s16le_planar", - "pcm_s24be", - "pcm_s24daud", - "pcm_s24le", - "pcm_s24le_planar", - "pcm_s32be", - "pcm_s32le", - "pcm_s32le_planar", - "pcm_s64be", - "pcm_s64le", - "pcm_s8", - "pcm_s8_planar", - "pcm_sga", - "pcm_u16be", - "pcm_u16le", - "pcm_u24be", - "pcm_u24le", - "pcm_u32be", - "pcm_u32le", - "pcm_u8", - "pcm_vidc", - "qcelp", - "qdm2", - "qdmc", - "ra_144", - "ra_288", - "ralf", - "roq_dpcm", - "s302m", - "sbc", - "sdx2_dpcm", - "shorten", - "sipr", - "siren", - "smackaudio", - "smv", - "sol_dpcm", - "sonic", - "sonicls", - "speex", - "tak", - "truehd", - "truespeech", - "tta", - "twinvq", - "vmdaudio", - "vorbis", - "wavesynth", - "wavpack", - "westwood_snd1", - "wmavoice", - "xan_dpcm", - "xma1", - "xma2" - ], - "subtitle": [ - "dvd_subtitle", - "eia_608", - "jacosub", - "microdvd", - "mov_text", - "mpl2", - "pjs", - "realtext", - "stl", - "subviewer", - "subviewer1", - "text", - "ttml", - "vplayer", - "webvtt" - ], - "data": [ - "bin_data", - "dvd_nav_packet", - "epg", - "klv", - "mpegts", - "otf", - "scte_35", - "timed_id3" - ], - "attachment": [] - }, - "default_encoder_params": { - "video": [ - "libx264" - ], - "audio": [ - "aac" - ], - "subtitle": [ - "mov_text" - ], - "data": [], - "attachment": [] - }, - "remove_codec_names": { - "video": [], - "audio": [], - "subtitle": [ - "hdmv_pgs_subtitle" - ], - "data": [], - "attachment": [] - } - } -} diff --git a/source/video_remuxer2/lib/ffmpeg b/source/video_remuxer2/lib/ffmpeg deleted file mode 160000 index b6c39ecaf..000000000 --- a/source/video_remuxer2/lib/ffmpeg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b6c39ecaf13556394df67d0413e115f87fb6f55c diff --git a/source/video_remuxer2/plugin.py b/source/video_remuxer2/plugin.py deleted file mode 100644 index 9ccd4e2d0..000000000 --- a/source/video_remuxer2/plugin.py +++ /dev/null @@ -1,285 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -""" - plugins.__init__.py - - Written by: Josh.5 - Date: 28 Aug 2021, (11:55 PM) - - Copyright: - Copyright (C) 2021 Josh Sunnex - - This program is free software: you can redistribute it and/or modify it under the terms of the GNU General - Public License as published by the Free Software Foundation, version 3. - - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License along with this program. - If not, see . - -""" -import json -import logging -import mimetypes -import os - -from unmanic.libs.unplugins.settings import PluginSettings - -from video_remuxer2.lib.ffmpeg import StreamMapper, Probe, Parser - -# Configure plugin logger -logger = logging.getLogger("Unmanic.Plugin.video_remuxer") - - -class Settings(PluginSettings): - settings = { - "dest_container": "mkv", - } - - def __init__(self, *args, **kwargs): - super(Settings, self).__init__(*args, **kwargs) - self.form_settings = { - "dest_container": self.__set_dest_container_form_settings() - } - - def __set_dest_container_form_settings(self): - containers_data = self.__read_containers_data() - select_options = [] - for cd_item in containers_data: - if cd_item == "template": - continue - select_options.append( - { - 'value': cd_item, - 'label': containers_data[cd_item].get('label'), - } - ) - values = { - "label": "Set the output container", - "input_type": "select", - "select_options": select_options, - } - return values - - def __read_containers_data(self): - containers_file = os.path.join(self.get_plugin_directory(), 'lib', 'containers.json') - with open(containers_file) as infile: - containers_data = json.load(infile) - return containers_data - - def get_configured_container_data(self): - dest_container = self.get_setting('dest_container') - containers_data = self.__read_containers_data() - dest_container = containers_data.get(dest_container) - if not dest_container: - # Load defaults - MKV - dest_container = containers_data.get('mkv') - return dest_container - - -class PluginStreamMapper(StreamMapper): - def __init__(self): - super(PluginStreamMapper, self).__init__(logger, ['video', 'audio', 'subtitle', 'data', 'attachment']) - self.settings = None - self.container_data = None - - def set_settings(self, settings): - self.settings = settings - - def test_stream_needs_processing(self, stream_info: dict): - if not self.container_data: - self.container_data = self.settings.get_configured_container_data() - - # Check if codec type is supported - codec_type = stream_info.get('codec_type', '').lower() - if codec_type not in self.container_data.get('codec_types'): - return True - - # Check if the codec name is supported for this container - codec_name = stream_info.get('codec_name', '').lower() - if codec_name not in self.container_data.get('codec_names', {}).get(codec_type, []): - return True - - # Stream will be copied over - return False - - def custom_stream_mapping(self, stream_info: dict, stream_id: int): - ident = { - 'video': 'v', - 'audio': 'a', - 'subtitle': 's', - 'data': 'd', - 'attachment': 't' - } - if not self.container_data: - self.container_data = self.settings.get_configured_container_data() - - # If codec type is not supported, remove it - codec_type = stream_info.get('codec_type', '').lower() - if codec_type not in self.container_data.get('codec_types'): - return { - 'stream_mapping': [], - 'stream_encoding': [], - } - - # If codec is not supported by the container or able to be transcoded, remove it - # Else if it is not supported by the container but is able to be transcoded, update it to the default - codec_name = stream_info.get('codec_name', '').lower() - if codec_name in self.container_data.get('remove_codec_names', {}).get(codec_type, []): - return { - 'stream_mapping': [], - 'stream_encoding': [], - } - elif codec_name not in self.container_data.get('codec_names', {}).get(codec_type, []): - stream_encoding = ['-c:{}:{}'.format(ident.get(codec_type), stream_id)] - # Fetch the default encoder params - default_encoder_params = self.container_data.get('default_encoder_params', {}).get(codec_type, []) - # Append to the stream encoding - stream_encoding += default_encoder_params - if not default_encoder_params: - # This container does not support this stream type and it is not configured to be able to convert it, - # Remove this stream - return { - 'stream_mapping': [], - 'stream_encoding': [], - } - else: - return { - 'stream_mapping': ['-map', '0:{}:{}'.format(ident.get(codec_type), stream_id)], - 'stream_encoding': stream_encoding, - } - - # Code will never get here - throw exception if it did - raise Exception("Failed to map container remux params for stream - ({},{})".format(codec_type, codec_name)) - - -def correct_mimetypes(): - mimetypes.add_type('video/x-m4v', '.m4v') - - -def on_library_management_file_test(data): - """ - Runner function - enables additional actions during the library management file tests. - - The 'data' object argument includes: - path - String containing the full path to the file being tested. - issues - List of currently found issues for not processing the file. - add_file_to_pending_tasks - Boolean, is the file currently marked to be added to the queue for processing. - - :param data: - :return: - - """ - # Get the path to the file - abspath = data.get('path') - - # Get file probe - probe = Probe(logger, allowed_mimetypes=['video']) - correct_mimetypes() - if not probe.file(abspath): - # File probe failed, skip the rest of this test - return data - - # Configure settings object (maintain compatibility with v1 plugins) - if data.get('library_id'): - settings = Settings(library_id=data.get('library_id')) - else: - settings = Settings() - - # Get stream mapper - mapper = PluginStreamMapper() - mapper.set_settings(settings) - mapper.set_probe(probe) - - # Set the input file - mapper.set_input_file(abspath) - - container_data = settings.get_configured_container_data() - container_extension = container_data.get('extension') - - if mapper.container_needs_remuxing(container_extension): - # Mark this file to be added to the pending tasks - data['add_file_to_pending_tasks'] = True - logger.debug("File '{}' should be added to task list. Probe found file needs to be processed.".format(abspath)) - else: - logger.debug("File '{}' is already the required format.".format(abspath)) - - return data - - -def on_worker_process(data): - """ - Runner function - enables additional configured processing jobs during the worker stages of a task. - - The 'data' object argument includes: - exec_command - A command that Unmanic should execute. Can be empty. - command_progress_parser - A function that Unmanic can use to parse the STDOUT of the command to collect progress stats. Can be empty. - file_in - The source file to be processed by the command. - file_out - The destination that the command should output (may be the same as the file_in if necessary). - original_file_path - The absolute path to the original file. - repeat - Boolean, should this runner be executed again once completed with the same variables. - - :param data: - :return: - - """ - # Default to no FFMPEG command required. This prevents the FFMPEG command from running if it is not required - data['exec_command'] = [] - data['repeat'] = False - - # Get the path to the file - abspath = data.get('file_in') - - # Get file probe - probe = Probe(logger, allowed_mimetypes=['video']) - correct_mimetypes() - if not probe.file(abspath): - # File probe failed, skip the rest of this test - return data - - # Configure settings object (maintain compatibility with v1 plugins) - if data.get('library_id'): - settings = Settings(library_id=data.get('library_id')) - else: - settings = Settings() - - # Get stream mapper - mapper = PluginStreamMapper() - mapper.set_settings(settings) - mapper.set_probe(probe) - - # Set the input file - mapper.set_input_file(abspath) - - container_data = settings.get_configured_container_data() - container_extension = container_data.get('extension') - - if mapper.container_needs_remuxing(container_extension): - # Map streams (copy from source to destination) - mapper.streams_need_processing() - - # Set the input file - mapper.set_input_file(abspath) - - # Set the output file - split_file_out = os.path.splitext(data.get('file_out')) - new_file_out = "{}.{}".format(split_file_out[0], container_extension.lstrip('.')) - mapper.set_output_file(new_file_out) - data['file_out'] = new_file_out - - # Get generated ffmpeg args - ffmpeg_args = mapper.get_ffmpeg_args() - - # Apply ffmpeg args to command - data['exec_command'] = ['ffmpeg'] - data['exec_command'] += ffmpeg_args - - # Set the parser - parser = Parser(logger) - parser.set_probe(probe) - data['command_progress_parser'] = parser.parse_progress - - return data diff --git a/source/video_remuxer2/requirements.txt b/source/video_remuxer2/requirements.txt deleted file mode 100644 index e69de29bb..000000000