There was big enough interest in the Command Line version of AMCDX Video Patcher so at some point I made a fast solution to be able to run the app in command line mode. The only problem it still had all UI (Qt) dependencies. I finally found some free time and made UI less CLI version. JSON structure and implemented features are the same
NOTE: when you pass JSON as a string don’t forget to handle correctly string in the string case. eg: ./AMCDXVideoPatcherCLI “{“processor”: “mov_meta”} ” is wrong ./AMCDXVideoPatcherCLI “{\”processor\”: \”mov_meta\”}” is correct
This is a minor release with some critical bugs fixed and MXF Metadata edit initial work
Features: 1) MXF Metadata editor (color range and color characteristics) 2) Added Linux Installer
Bugs Fixed: 1) Fixed crash when patching from ProRes 422 to ProRes 444 2) Fixed support of mxf files with size > 4GB 3) Fixed CLI JSON as a string input
Version 0.6.0 Released: 1) VC3 support (works only VC3 to VC3 profiles should be identical) 2) Added command-line version 3) File To File improved performance on Windows 4) Blur functionality was disabled
Starting v0.6.0 you can run AMCDX Video Patcher without UI, in other words, you can run it as a command-line app. AMCDX Video Patcher accept as a parameter JSON (it could be JSON string or path to JSON file) for example: AMCDXVideoPathcer /Users/test/test.json or AMCDXVideoPathcer "{ "processor": "f2f", "params": {...}}"
there are 2 fields: “processor” and “params” a) processor defines what processor do you want to run. The value should be a String and should have one of 3 values: 1) “f2f” – run File To File processor 2) “frame” – run Frame Editor 3) “mov_meta” – run MOV/MP4 Metadata Editor b) params define processor parameters. The value should be a JSON object each processor has a different structure.
Number of frames to insert from the Source to the Target file (Integer)
src_rect
A rectangle of the Source file frame that should be inserted to the Target file frame (*), (**)
dst_rect
Rectangle of Target file frame where should be inserted rectangle from the Source file (*), (**)
(*) rect fields are optional if these fields are not set – the full-frame will be processed (**) rect fields work only for ProRes codec, in VC3/AVCI/XAVC case these properties will be ignored
path to png file to apply or a folder where to save PNGs (String)
in_point
Video file IN Point (Integer, frame number)
duration
Number of frames to modify with PNG image or Number of frames to save to png (Integer)
mode
Can be one of 2 values “to_png” or “from_png”(String) to_png means we save selected rectangle to PNG files to the folder set by “png_path” from_png means we modify the selected rectangle by PNG files set by “png_path”
rect
A rectangle of the Video file that should be modified or saved to PNG
*All fields are optional *“in_file” is a Boolean field if it set to false it means Atom will be removed and other fields will be ignored. if “in_file” set to true it means we modify existing atom or add and modify newly added atom
headers_to_the_end
Defines if we should move headers to the end of the file or leave it as it (Boolean, Optional)
timecode
in_file: if set to true Timecode track will be added (Boolean, Optional) tc: timecode in format “hh:mm:ss:frame” (String, Optional) drop_flag: set DF/NDF (Boolean, Optional)
reel: { in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) text: Reel name (String, Optional) }
nclc
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) primaries: Color Primaries (Integer, Optional) transfer: Transfer Function (Integer, Optional) matrix: Color Matrix (Integer, Optional)
gama
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) gamma: Gamma value (Float, Optional)
pasp
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) h_spacing: Pixel width (Integer, Optional) v_spacing: Pixel height (Integer, Optional)
fiel
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) order: Field Order (Integer, Optional)
mdcv
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) preset: MDCV Presets (Integer, Optional) max_lum: Max display mastering luminance (Float, Optional) min_lum: Min display mastering luminance (Float, Optional)
clli
in_file: if set to false atom will be deleted otherwise added or edited existing (Boolean, Optional) max_cll: Max content light level (Integer, Optional) max_fall: Max frame average light level (Integer, Optional)
I decided to post a roadmap of features planned on this 2020 year 1) [File To File] VC3 to VC3 (MOV, MXF) – Done 2) [File To File] AVCI to AVCI (MOV, MXF) – In Progress 3) [Metadata Editor] MOV Edit list editing 4) [Metadata Editor] MXF Metadata Editing – In Progress 5) [File To File] Apply to File stored on AWS S3 – In Progress 6) [File To File] Apply to File stored on Google Drive
P.S. Feature requests for the year 2021 can be posted in the comments for this post
Version 0.5.0 is released. Its all about performance 1) Encoder now ~x2 faster 2) [All Processors] Improved threading model 4) [File To File] fixed insert from 422 to 444