From 6390f75ff1e5df03ec11e0e03c6f57767cdac41e Mon Sep 17 00:00:00 2001 From: Sofus Rose Date: Thu, 8 Dec 2016 22:37:22 -0500 Subject: [PATCH] Using array; start wipe of globals. Need to complete arg functions, globals transition, and modularization of develop() before a lot of code cleanup, then the plugin system. That'll deserve a merge, where I'll branch into the big califrames, then start committing modular features. Before 2.1.0 I'll do some RCs for myself, reevaluate the colorspace bug, and that'll be it! --- DEPENDENCIES | 22 --- README.md | 309 +++----------------------------- binaries/DEPENDENCIES | 43 +++++ convmlv.sh | 185 ++++++++++++++++++- docs/MANPAGE | 281 ----------------------------- docs/buildDocs.sh | 4 +- docs/docs.pdf | Bin 130641 -> 0 bytes geany-project | 54 ++++++ mkrelease.sh | 13 +- src/core/argFuncs.sh | 365 ++++++++++++++++++++++++++++++++++++++ src/core/develop.sh | 6 +- src/core/parsing.sh | 14 +- src/documentation/help.sh | 2 - src/helpers/utility.sh | 8 + 14 files changed, 697 insertions(+), 609 deletions(-) delete mode 100644 DEPENDENCIES create mode 100644 binaries/DEPENDENCIES delete mode 100644 docs/MANPAGE delete mode 100644 docs/docs.pdf create mode 100644 geany-project create mode 100644 src/core/argFuncs.sh diff --git a/DEPENDENCIES b/DEPENDENCIES deleted file mode 100644 index f8cce8b..0000000 --- a/DEPENDENCIES +++ /dev/null @@ -1,22 +0,0 @@ -Besides the tarball, you need a few external deps. - -For your distribution: - -First, install libc6:i386 for 64-bit systems. - -Debian: sudo apt-get install $(./convmlv.sh -K 0) -Ubuntu: sudo apt-get install $(./convmlv.sh -K 1) -Fedora: sudo yum install $(./convmlv.sh -K 2) -Mac (Homebrew): brew install $(./convmlv.sh -K 3) - -For Python (make sure you're using python3): - -sudo python3 -m pip install $(./convmlv -Y) - - -Binary Source Code: - -mlv2badpixels.sh: http://www.magiclantern.fm/forum/index.php?topic=16054 -raw2dng: http://www.magiclantern.fm/forum/index.php?topic=5404.0 -mlv_dump: http://www.magiclantern.fm/forum/index.php?topic=7122.0 -cr2hdr: http://www.magiclantern.fm/forum/index.php?topic=7139.0 diff --git a/README.md b/README.md index 23da1bb..41a9fec 100644 --- a/README.md +++ b/README.md @@ -3,305 +3,42 @@ RAW ML Formats to Workable Images/Movies Developer ======= I needed a workflow to provide me full control over development for filmmaking with Magic Lantern (beyond mlrawviewer's excellent preview!), while keeping things simple by providing defaults for everything. -So, I wrote this: A converter from ML formats (RAW, MLV, DNG sequences) to many usable formats (EXR, DPX, and yes, Prores) with many, many features in between! -Generically, as a DNG developer, it's very capable as well, even if all the ML formats are ignored. +**So**, I wrote this: A program that converts from RAW formats (MLV, RAW, DNG, CR2) to workable formats (EXR, MOV, DPX, DNxHD, MJPEG, etc.) with many, many features in between (color management, filters, dual iso, demosaic, etc.) -I make shorts with convmlv :D so here's some examples of it (back at v1.7) in action!! +It's extensible, letting you write plugins controlling/filtering any leg of the journey from raw to developed. Config file syntax also makes it a kind of "make for productions"; with configs and one command, you can develop your whole project from unsorted raw footage to editable, proxied, organized stuff! + +I use it myself :D so here's some shorts with it (back at v1.7) in action!! http://youtu.be/yi-G7sXHB1M http://youtu.be/yi-G7sXHB1M -See [http://www.magiclantern.fm/forum/index.php?topic=16799.0](http://www.magiclantern.fm/forum/index.php?topic=16799.0) for more info. +## Installation +Supported platforms are Linux and Mac. To install, copy/paste the following into a terminal: -**The pdf found in the source and in the release, under docs->docs.pdf, is up to date. Refer to it for tutorials, tips, documentation, etc.!!** +1. **Extract tarball**. Rename it "convmlv" and put it somewhere useful. `cd` to that directory. +2. **Install Deps**: `sudo apt-get install $(./convmlv.sh -K )`. Replace as indicated below: + * For Debain, use the number "0" + * For Fedora, replace `apt-get` with `yum` and use the number "2". + * For Mac, replace `sudo apt-get` with `brew` and use the number "3". *Requires Homebrew to be installed. -Full help page is below: +3. **Install Python deps**: `sudo python3 -m pip install $ (./convmlv.sh -Y)` +4. (Optional) **Add to Path**: `sudo ln -s $(pwd)/convmlv.sh /usr/local/bin/convmlv` -```text -Usage: - ./convmlv.sh [FLAGS] [OPTIONS] files - -INFO: - A program allowing you to develop ML files into workable formats. Many useful options are exposed. - --> Defaults: Compressed 16-bit Linear EXR. 10-bit Prores4444 MOV. - --> Color Defaults: Linear (1.0) Gamma on sRGB Gamut, using Camera White Balance. - - --> Acceptable Inputs: MLV, RAW (requires raw2dng), Folder containing DNGs. - --> Option Input: From command line or config file (specify with -C). - - --> Forum Post: http://www.magiclantern.fm/forum/index.php?topic=16799. - --> A note: BE CAREFUL WITH OPTIONS. Wrong values will give very strange errors. Read this page well!! - - It's as simple or complex as you need it to be: 'convmlv -m .mlv' is enough for good-looking output! - -VERSION: 2.0.1 - -MANUAL DEPENDENCIES: - Place these in RES_PATH (see OPTIONS, BASIC). Keep in mind you also need dist. and pip packages. - --> See 'Dist Deps' and 'Python Deps' +You're done! For more info, see the Documentation (especially the PDF has a guide to this). - -- mlv_dump: Required binary. http://www.magiclantern.fm/forum/index.php?topic=7122.0 - -- color-core: Required folder of LUTs. See convmlv repository. - -- sRange.py: Required script. See convmlv repository. - - -- raw2dng: For DNG extraction from RAW. http://www.magiclantern.fm/forum/index.php?topic=5404.0 - -- mlv2badpixels.sh: For bad pixel removal. https://bitbucket.org/daniel_fort/ml-focus-pixels/src - -- cr2hdr: For Dual ISO Development. Two links: http://www.magiclantern.fm/forum/index.php?topic=16799.0 - -- balance.py: For Auto White Balance. See convmlv repository. - -- color-ext: Extra LUTs, providing more color resources. See convmlv repository. +## Documentation +Especially the PDF is designed as a tutorial; take a look! -OPTIONS, BASIC: - -v, --version version - Print out version string. - -h, --help help - Print out this help page. - - -C, --config config - Designates config file to use. - - -o, --outdir OUTDIR - The path in which files will be placed. - -P, --res-path RES_PATH - The path in which all manual dependencies are looked for. - --> Default: Current Directory. - - --dcraw DCRAW - The path to dcraw. - --mlv-dump MLV_DUMP - The path to mlv_dump. - --raw-dump RAW_DUMP - The path to raw2dng. - --badpixels MLV_BP - The path to mlv2badpixels.sh (by dfort). - --cr-hdr CR_HDR - The path to cr2hdr. - --srange SRANGE - The path to sRange.py. - --balance BAL - The path to balance.py. - --python PYTHON - The path or command used to invoke Python 3. Default is python3 on Linux, python on Mac. - - -T, --threads [int] THREADS - Override amount of utilized process threads. Default is MAX - 1. - - -OPTIONS, OUTPUT: - -i IMAGE - Will output image sequence. - - -t [0:3] IMG_FMT - Image output format. - --> 0: EXR (default), 1: TIFF, 2: PNG, 3: Cineon (DPX)." - - -m MOVIE - Will output a Prores4444 file. - - -p [0:3] PROXY - Create proxies alongside main output. - --> 0: No proxies (Default). 1: H.264 proxy. 2: JPG proxy sequence. 3: Both. - - --> JPG proxy will always be in sRGB Gamma/sRGB Gamut. H.264 proxy is color managed. - --> JPG proxy *won't* be developed w/o IMAGE. H.264 proxy *will* be developed no matter what, if specified here. - --> Why? JPG is for potential use in editing. H.264 is for a quick visual preview of convmlv's output. - - -s [0%:100%] PROXY_SCALE - the size, in %, of the proxy output. - --> Default: 50%. - - -k KEEP_DNGS - Specify if you want to keep the DNG files. - --> Run convmlv on the top level folder of former output to reuse saved DNGs from that run! - - -r - FRAME_RANGE - Specify to process an integer frame range. - --> You may use the characters 's' and 'e', such that s = start frame, e = end frame. - --> Indexed from 0 to (# of frames - 1). Develops from 1 to ($ of frames) - --> A single number may be writted to develop that single frame. - --> DO NOT try to reuse DNGs while developing a larger frame range. - - - --uncompress UNCOMP - Turns off lossless image compression. Otherwise: - --> TIFF: ZIP, EXR: PIZ, PNG: lvl 0, DPX: RLE. - - -OPTIONS, RAW DEVELOPMENT: - -d [0:3] DEMO_MODE - Demosaicing algorithm. Higher modes are slower + better. - --> 0: Bilinear. 1: VNG (default). 2: PPG. 3: AHD. - - -f FOUR_COLOR - Interpolate as RGBG. Fixes weirdness with VNG/AHD, at the cost of sharpness. - - -H [0:9] HIGHLIGHT_MODE - Highlight management options. - --> 0: White, clipped highlights. 1: Unclipped but colored highlights. 2: The defail of 1, but adjusted to grey. - --> 3-9: Highlight reconstruction. Can cause flickering. Start at 5, then adjust to color (down) or to white (up). - - -c [0:3] CHROMA_SMOOTH - Apply shadow/highlight chroma smoothing to the footage. - --> 0: None (default). 1: 2x2. 2: 3x3. 3: 5x5. - --> MLV input Only. - - -n [int] WAVE_NOISE - Apply wavelet denoising. - --> Default: None. Subtle: 25. Medium: 50. Strong: 125. - - -N - TEMP_NOISE - Apply temporal denoising. - --> A: 0 to 0.3. B: 0 to 5. A reacts to abrupt noise (splotches), B reacts to noise over time (fast motion causes artifacts). - --> Subtle: 0.03-0.04. High: 0.15-0.04. High, Predictable Motion: 0.15-0.07 - - -Q [i-i:i-i] HQ_NOISE - Apply 3D denoising filter. - --> In depth explanation: https://mattgadient.com/2013/06/29/in-depth-look-at-de-noising-in-handbrake-with-imagevideo-examples/ . - --> Spacial/Temporal (S/T). S will soften/blur/smooth, T will remove noise without doing that but may create artifacts. - --> Luma/Chroma (L/C). L is the detail, C is the color. Each one's denoising may be manipulated Spacially or Temporally. - - --> Option Value: -:- - --> Weak: 2-1:2-3. Medium: 3-2:2-3. Strong: 7-7:5-5 - - --> DONT combine with TEMP_NOISE. - - -O [i-i-i-i] REM_NOISE - Yet another spatial denoiser, with 4 choices of 24 modes. - --> See https://ffmpeg.org/ffmpeg-filters.html#removegrain for list of modes. - - --> Option Value: --- - --> I truly cannot tell you what values will be helpful to you; there are too many... Look at the link! - - --shallow SHALLOW - Output smaller, 8-bit files. - --> Read why this is a bad idea: http://www.cambridgeincolour.com/tutorials/bit-depth.htm - - -OPTIONS, COLOR: - -g [0:4] GAMMA - Output gamma. A curve applied to the output, for easier viewing/grading. - --> 0: Standard (Around 2.2). 1: Linear (Default). - --> Requires color-ext: 2: Cineon. 3: C-Log2 4: S-Log3 - - --> "Standard" grades to the gamut specification, and to 2.2 if that's not given. - - -G [0:6] GAMUT - Output gamut. The range of colors that can exist in the output. - --> 0: sRGB (Default). 1: Adobe RGB. 2: Rec.709. 3: XYZ (Always Linear Gamma). - --> Requires color-ext: 4: Rec2020 5: DCI-P3 6: Sony S-Gamut3.cine +**The Forum Thread** at [http://www.magiclantern.fm/forum/index.php?topic=16799.0](http://www.magiclantern.fm/forum/index.php?topic=16799.0) is always up to date. - -w [0:2] WHITE - This is a modal white balance setting. - --> 0: Auto WB (requires balance.py). 1: Camera WB (default). 2: No Change. - --> AWB uses the Grey's World algorithm. - - -A [i:i:i:i] SHARP - Lets you sharpen, or blur, your footage. - --> BE CAREFUL. Wrong values will give you strange errors. - --> Size/Strength (S/T). S is the size of the sharpen/blur effect, T is the strength of the sharpen/blur effect. - --> Luma/Chroma (L/C). L is the detail, C is the color. Luma sharpening more effective. - - --> Option Value: ::: - --> LS and CS must be ODD, between 3 and 63. Negative LT/CT values blur, while positive ones sharpen. - --> Strong Sharp: 7:3:7:3 Strong Blur: 7,-3:7,-3. Medium Sharp: 5:1:3:0 - - -l LUT - Specify a LUT to apply after Color Management. - --> Supports cube, 3dl, dat, m3d. - --> Specify -l multiple times, to apply multiple LUTs in sequence. - - -S [int] SATPOINT - Specify the 14-bit uint saturation point of your camera. You don't usually need to. - --> Worth setting globally, as it's a per-camera setting. Must be correct for highlight reconstruction/unclipped highlights. - --> Lower from 15000 if -H1 yields purple highlights, until they turn white. - --> You can determine the optimal value using the max pixel value of 'dcraw -D -j -4 -T'. - - --white-speed [int] WHITE_SPD - Manually specify samples used to calculate AWB. - - --allow-white-clip WHITE_CLIP - Let the White Balance multipliers clip. - - -OPTIONS, FEATURES: - -D DESHAKE - Auto-stabilize the video using ffmpeg's "deshake" module. - --> You may wish to crop/scale the output later, to avoid edge artifacts. - - -u DUAL_ISO - Process as dual ISO. - --> Requires cr2hdr. - - -b BADPIXELS - Fix focus pixels issue using dfort's script. - --> Requires mlv2badpixels.sh. - - -a BADPIXEL_PATH - Use your own .badpixels file. Does NOT require mlv2badpixels.sh - --> How to: http://www.dl-c.com/board/viewtopic.php?f=4&t=686 - - -F DARKFRAME - This is the path to a "dark frame MLV"; effective for noise reduction. - --> How to: Record 5 sec w/lens cap on & same settings as footage. Pass MLV in here. - --> If the file extension is '.darkframe', the file will be used as a preaveraged dark frame. - - -R darkframe_output - Specify to create a .darkframe file from passed in MLV. - --> Usage: 'convmlv -R .MLV' - --> Averages .MLV to create .darkframe. - --> THE .darkframe EXTENSION IS ADDED FOR YOU. - - -OPTIONS, INFO: - -q settings - Output MLV settings. - - -K [0:3] Dist Deps - Output package dependecies, for use with common package managers. - --> 0: Debian, 1: Ubuntu, 2: Fedora, 3: Homebrew (Mac) - - --> Deps Install (Debian): sudo apt-get install $(./convmlv.sh -K 0) - --> Deps Install (Ubuntu): sudo apt-get install $(./convmlv.sh -K 1) - --> Deps Install (Fedora): sudo yum install $(./convmlv.sh -K 2) - --> Deps Install (Homebrew Mac): brew install $(./convmlv.sh -K 3) - - -Y Python Deps - Lists Python dependencies. Works directly with pip. - -->Install (Cross-Platform): sudo python3 -m pip install $ (./convmlv -Y) - - -M Manual Deps - Lists manual dependencies, which must be downloaded by hand. - --> Manually place all in RES_PATH. See http://www.magiclantern.fm/forum/index.php?topic=16799.0 . - - -COLOR MANAGEMENT: - INTRO Images aren't simple. They are often stored, processed, and viewed as a result of complex transformations usually called, - in applications, color management. Understanding it is required as a colourist, and encouraged as a DPs and Cinematographers. - - --> Intro: http://www.cambridgeincolour.com/tutorials/color-management1.htm - --> Understanding Gamma: http://www.cambridgeincolour.com/tutorials/gamma-correction.htm - --> Color Spaces: http://www.cambridgeincolour.com/tutorials/color-spaces.htm - --> Conversions: http://www.cambridgeincolour.com/tutorials/color-space-conversion.htm - --> Monitor Calibration: http://www.cambridgeincolour.com/tutorials/monitor-calibration.htm - - PIPELINE convmlv is a color managed application, designed to retain quality from RAW footage: - - -- mlv_dump writes camera-specific color transformation matrices as metadata in developed DNGs. - --> This defines the camera's gamut. - -- dcraw applies these matrices, then transforms the newly developed image to the super-wide XYZ colorspace. - --> All color detail is preserved, and if now in a well-defined colorspace. - --> No gamma has been applied - the image is now Linear XYZ. - -- ffmpeg applies the specified (up to) x64 resolution 3D LUTs, in .cube format. - --> Use -g and -G to specify Gamma/Gamut combinations. - --> The output employs DATA, not LEGAL, values. The resulting image is flatter, but retains all shadow/highlight detail. - --> -l specified LUTs are applied afterwards. - - 3D LUTS The included LUTs, found in the convmlv repository, are key to convmlv's color management solution: - -- color-core: The required LUTs, including sRGB (default), Adobe RGB, and Rec709 in Standard and Linear gamma. - -- color-ext: Optional LUTs, including Rec2020, DCI-P3, etc. in Standard/Linear gammas, but also in Log formats. - - Create Your Own LUTs using LUTCalc, for any grading format output: https://cameramanben.github.io/LUTCalc/ (watch his tutorials). - --> Note that convmlv only accepts up to 64x64x64 LUTs. You can resize LUTs using pylut (https://pypi.python.org/pypi/pylut). - --> The pylut command to resize is 'pylut .cube --resize 64'. Alternatively, you can use pylut from Python (2X only). - - --> I reccommend Legal --> Data LUTs, as this conserves shadow/highlight detail for grading. Legal --> Legal looks better, but with detail loss. - - -CONFIG FILE: - Config files, another way to specify options, can save you time & lend you convenience in production situations. - - GLOBAL: /home/sofus/convmlv.conf - LOCAL: Specify -C/--config. - - - SYNTAX: - Most options listed above have an uppercased VARNAME, ex. OUTDIR. You can specify such options in config files, as such: - - - - One option per line only. Indentation by tabs or spaces is allowed, but not enforced. - - Comments Lines starting with # are comments. - - You may name a config using: - - CONFIG_NAME - - Flags If the value is a true/false flag (ex. IMAGE), simply specifying VARNAME is enough. There is no VALUE. - - OPTION ORDER OF PRECEDENCE Options override each other as such: - -LOCAL options overwrite GLOBAL options. - -COMMAND LINE options overwrite LOCAL & GLOBAL options. - -FILE SPECIFIC options overwrite ALL ABOVE options. - - - File-Specific Block: A LOCAL config file lets you specify options for specific input names: - - / - ...options here will only be - * - - You must use the truncated (no .mlv or .raw) input name after the /. Nested blocks will fail. - - With a single config file, you can control the development options of multiple inputs as specifically and/or generically - as you want. Batch developing everything can then be done with a single, powerful commmand. - +**The PDF** found *in the release* is up to date, including tutorials, tips, explanations, plugin API, and more. +**The Help Page** is the most up to date; just run `convmlv -h` or look at docs-->MANPAGE in the release tarball. -Contact me with any feedback or questions at convmlv@sofusrose.com, PM me (so-rose) on the ML forums, or post on the thread! +## Development +To build the PDF and MANPAGE using LATEX, run `docs/buildDocs.sh`. You can clean it up using `docs/cleanDocs.sh`. +To make a release tarball, simply place all the manual binary deps into the `binaries` dir and run `./mkrelease.sh`. -``` - -Run 'sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" docs/MANPAGE' to strip colors from MANPAGE after generating through less. This is done automatically in 'docs/buildDocs.sh. +The source code is located in `src`, where you'll find bash and Python code, as well as the builtin plugins. convmlv.sh itself imports all the src's, and acts as a kind of program selector; develop is but one option. diff --git a/binaries/DEPENDENCIES b/binaries/DEPENDENCIES new file mode 100644 index 0000000..6347111 --- /dev/null +++ b/binaries/DEPENDENCIES @@ -0,0 +1,43 @@ +Besides the tarball, you need a few external deps. + +For your distribution: + +First, install libc6:i386 for 64-bit systems. + +Debian: sudo apt-get install $(./convmlv.sh -K 0) +Ubuntu: sudo apt-get install $(./convmlv.sh -K 1) +Fedora: sudo yum install $(./convmlv.sh -K 2) +Mac (Homebrew): brew install $(./convmlv.sh -K 3) + +For Python (make sure you're using python3): + +sudo python3 -m pip install $(./convmlv -Y) + + +Binary Source Code, distributed under GPLv2: + +# Copyright (C) 2016 Magic Lantern Team +# +# 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 2 +# 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, write to the +# Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +#/ + +Source code found at links below: + +mlv2badpixels.sh: http://www.magiclantern.fm/forum/index.php?topic=16054 +raw2dng: http://www.magiclantern.fm/forum/index.php?topic=5404.0 +mlv_dump: http://www.magiclantern.fm/forum/index.php?topic=7122.0 +cr2hdr: http://www.magiclantern.fm/forum/index.php?topic=7139.0 diff --git a/convmlv.sh b/convmlv.sh index 2d2d14e..d21ac59 100755 --- a/convmlv.sh +++ b/convmlv.sh @@ -33,6 +33,12 @@ fi #BASIC FUNCTIONS +#NOTE: How to use a nested array in an associative array: +# declare -a outArray=${assocArray[key]} + +#NOTE: How to place nested array in an associative array: +# assocArray[key]="( \"hello\" \"world\" )". Notice the escaped internal "". + readlinkF() { #readlink -f, but works on all platforms (including mac). target=$1 @@ -69,9 +75,32 @@ setPaths() { #Repends on SRC_PATH, BIN_PATH, and PYTHON. Run this function if ei COLOR_LUTS=("${SCRIPT_LOCATION}/color-core" "${SCRIPT_LOCATION}/color-ext") #One can add more with options, but these are the defaults. DCRAW="dcraw" + + #new array method +#BINARY PATHS + SETTINGS[bin_mlvdump]="${SETTINGS[path_bin]}/mlv_dump" #Path to mlv_dump location. + SETTINGS[bin_rawdump]="${SETTINGS[path_bin]}/raw2dng" #Path to raw2dng location. + SETTINGS[bin_cr2hdr]="${SETTINGS[path_bin]}/cr2hdr" #Path to cr2hdr location. + SETTINGS[bin_mlv2badpixels]="${SETTINGS[path_bin]}/mlv2badpixels.sh" + SETTINGS[bin_dcraw]="dcraw" + +#PYTHON PATHS + SETTINGS[bin_python_balance]="${SETTINGS[path_src]}/imgProcessing/balance.py" + SETTINGS[bin_python_sRange]="${SETTINGS[path_src]}/imgProcessing/sRange.py" + + SETTINGS[bin_balance]="${SETTINGS[path_python]} ${SETTINGS[bin_python_balance]}" + SETTINGS[bin_sRange]="${SETTINGS[path_python]} ${SETTINGS[bin_python_sRange]}" + +#COLOR PATHS + SETTINGS[col_lutList]="( \"${SETTINGS[path_script]}/color-core\" \"${SETTINGS[path_script]}/color-ext\" )" #One can add more with options, but these are the defaults. } setDefaults() { #Set all the default global variables. Run during "parseAll". + +#SETTINGS ARRAY GENERATION + unset SETTINGS + declare -g SETTINGS + #DEPENDENCIES DEB_DEPS="imagemagick dcraw ffmpeg python3 python3-pip libimage-exiftool-perl libc6-i386" #Dependency package names (Debian). List with -K option. UBU_DEPS="imagemagick dcraw ffmpeg python3 python3-pip libimage-exiftool-perl libc6-i386" #Dependency package names (Ubuntu). List with -K option. @@ -87,6 +116,23 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". else PYTHON="python" fi + + #new array method + SETTINGS[deps_deb]="imagemagick dcraw ffmpeg python3 python3-pip libimage-exiftool-perl libc6-i386" #Dependency package names (Debian). List with -K option. + SETTINGS[deps_ubu]="imagemagick dcraw ffmpeg python3 python3-pip libimage-exiftool-perl libc6-i386" #Dependency package names (Ubuntu). List with -K option. + SETTINGS[deps_fed]="ImageMagick dcraw ffmpeg python3 python-pip perl-Image-ExifTool glibc-devel.i686" #Dependency package names (Fedora). List with -K option. + SETTINGS[deps_brew]="imagemagick dcraw ffmpeg python3 exiftool" + + SETTINGS[deps_pip]="numpy tifffile" #You dont need Pillow. Thats just to make balance.py a bit more portable. + SETTINGS[deps_man]="mlv_dump raw2dng cr2hdr mlv2badpixels.sh balance.py sRange.py color-core" + + if [[ $OSTYPE == "linux-gnu" ]]; then + SETTINGS[path_python]="python3" + elif [[ $OSTYPE == "darwin11" ]]; then + SETTINGS[path_python]="python3" + else + SETTINGS[path_python]="python" + fi #PATHS @@ -100,6 +146,18 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". OUTDIR="./raw_conv" isOutGen=false + + #new array method + SETTINGS[path_script]=$(dirname "$(readlinkF "$0")") + SETTINGS[path_src]="$SCRIPT_LOCATION/src" #Source components will always be looked for here. + SETTINGS[path_bin]="./binaries" + + SETTINGS[path_config_global]="${HOME}/convmlv.conf" + SETTINGS[path_config_local]="" #No local config by default. + + setPaths #Set all the paths using the current SRC_PATH and BIN_PATH. + + SETTINGS[path_output]="./raw_conv" #OUTPUT MOVIE=false @@ -112,6 +170,19 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". isJPG=false isH264=false KEEP_DNGS=false + + #new array method + SETTINGS[develop_movie]=false + SETTINGS[develop_images]=false + RES_IN="" + SETTINGS[raw_fps]=24 #Will be read from .MLV or .RAW. + SETTINGS[img_format]="exr" + SETTINGS[img_compress]=true + SETTINGS[proxy_jpg]=false + SETTINGS[proxy_h264]=false + SETTINGS[proxy_scale]="50%" + SETTINGS[develop_keep-raw]=false + #~ COMPRESS="" #FRAME RANGE FRAME_RANGE="" #UPDATED LATER WHEN FRAME # IS AVAILABLE. @@ -119,6 +190,13 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". FRAME_END="" RANGE_BASE="" isFR=true + + #new array method + SETTINGS[frame_range]="" #UPDATED LATER WHEN FRAME # IS AVAILABLE. + SETTINGS[frame_start]="1" + SETTINGS[frame_end]="" + #~ RANGE_BASE="" #Where the raw argument frame range is spit into. + #~ isFR=true #True when frame range needn't be touched. #RAW DEVELOPOMENT HIGHLIGHT_MODE="0" @@ -126,10 +204,34 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". DEMO_MODE="1" DEPTH="-W -6" DEPTH_OUT="-depth 16" - WAVE_NOISE="" #Used to be NOISE_REDUC. Wavelet noise reduction. + WAVE_NOISE="" FOUR_COLOR="" CHROMA_SMOOTH="--no-cs" + #new array method + SETTINGS[dev_blacklevel]="2048" #MODE DETERMINE AFTER PARSE + SETTINGS[dev_satpoint]="standard" #MODE DETERMINE AFTER PARSE + #Options: standard, + SETTINGS[dcraw_satpoint]="" + + SETTINGS[dcraw_high-mode]="0" + SETTINGS[dev_demosaic]="ppg" #MODE DETERMINE AFTER PARSE. + #OPTIONS: bilin, vng, ppg, ahd. + SETTINGS[dcraw_demosaic]="2" + + SETTINGS[dev_csmooth]="none" #MODE DETERMINE AFTER PARSE. + #OPTIONS: none, 2x2, 3x3, 5x5 + SETTINGS[dcraw_csmooth]="--no-cs" + SETTINGS[cr2hdr_csmooth]="--no-cs" + SETTINGS[mlvfs_csmooth]="" + + SETTINGS[dev_depth]="16" #MODE DETERMINE AFTER PARSE. + SETTINGS[dcraw_depth]="-W -6" + SETTINGS[im_depth]="-depth 16" + + SETTINGS[nr_wave]="" + SETTINGS[dcraw_four-color]="" + #COLOR MANAGEMENT GAMMA="1 1" #As far as dcraw is concerned, output is linear. SPACE="5" #dcraw only outputs Linear XYZ. LUTs convert onwards. @@ -137,6 +239,21 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". COLOR_GAMUT="srgb" COLOR_VF="" #Standard (~2.4) sRGB LUT by default: ${CORE_LUT}/lin_xyz--srgb_srgb.cube . This is used in VF_FILTERS colorDesc="" + + #new array method + SETTINGS[col_gamma]="lin" + SETTINGS[dcraw_gamma]="1 1" + + SETTINGS[col_gamut]="srgb" + SETTINGS[dcraw_space]="5" + + #Again, the dcraw-specific stuff is assembled down the line. + #~ GAMMA="1 1" #As far as dcraw is concerned, output is linear. + #~ SPACE="5" #dcraw only outputs Linear XYZ. LUTs convert onwards. + #~ COLOR_GAMMA="lin" #STANDARD marks it such that it will correspond to the gamut + #~ COLOR_GAMUT="srgb" + #~ COLOR_VF="" #Standard (~2.4) sRGB LUT by default: ${CORE_LUT}/lin_xyz--srgb_srgb.cube . This is used in VF_FILTERS + #~ colorDesc="" #FEATURES DUAL_ISO=false @@ -147,10 +264,27 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". useDF=false DARK_PROC="" RES_DARK="" - SETTINGS_OUTPUT=false - MK_DARK=false DARK_OUT="" BLACK_LEVEL="" + + #new array method + SETTINGS[dev_diso]=false + + SETTINGS[dev_badpixel]=false #MODE DETERMINE AFTER PARSE + SETTINGS[path_badpixel-cust]="" + SETTINGS[dcraw_badpixel]="" + + SETTINGS[cali_bias_num]=-1 #0 to index, -1 denotes not used. + SETTINGS[cali_dark_num]=-1 #0 to index, -1 denotes not used. + SETTINGS[cali_flat_num]=-1 #0 to index, -1 denotes not used. + + SETTINGS[cali_bias_path]="" + SETTINGS[cali_dark_path]="" + SETTINGS[cali_flat_path]="" + + SETTINGS[cali_out_path]="" #The filename (sans extension) finished calibration frames are spit out to. + + #~ DARK_PROC="" #Variable where dcraw darkframe snipper can be found. #White Balance WHITE="" @@ -160,6 +294,12 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". isScale=false SATPOINT="" + WHITE="" + GEN_WHITE=false + CAMERA_WB=true + WHITE_SPD=15 + isScale=false + #FFMPEG Filters FFMPEG_FILTERS=false #Whether or not FFMPEG filters are going to be used. V_FILTERS="" @@ -178,6 +318,41 @@ setDefaults() { #Set all the default global variables. Run during "parseAll". SHARP="" sharpDesc="" + #new array method + SETTINGS[ffilters]=false #Whether or not FFMPEG filters are going to be used. + #~ V_FILTERS="" + #~ V_FILTERS_PROX="" + #~ FILTER_ARR=() + SETTINGS[ffilters_temp-noise]="" + #~ TEMP_NOISE="" #Temporal noise reduction. + #~ tempDesc="" + SETTINGS[ffilters_luts]="()" + #~ LUTS=() #lut3d LUT application. Supports multiple LUTs, in a chain; therefore it is an array. + #~ lutDesc="" + SETTINGS[ffilters_deshake]="" + #~ DESHAKE="" #deshake video stabilisation. + #~ deshakeDesc="" + SETTINGS[ffilters_hqnoise]="" + #~ HQ_NOISE="" #hqdn3d noise reduction. + #~ hqDesc="" + SETTINGS[ffilters_remnoise]="" + #~ REM_NOISE="" #removegrain noise reduction + #~ remDesc="" + SETTINGS[ffilters_sharp]="" + #~ SHARP="" + #~ sharpDesc="" + + SETTINGS[raw_cam-name]="Unknown" + SETTINGS[raw_frames]="Unknown" + SETTINGS[raw_resolution]="Unknown" + SETTINGS[raw_iso]="Unknown" + SETTINGS[raw_aperture]="Unknown" + SETTINGS[raw_flength]="Unknown" + SETTINGS[raw_shutter]="Unknown" + SETTINGS[raw_rec-time]="Unknown" + SETTINGS[raw_rec-date]="Unknown" + SETTINGS[raw_kelvin]="Unknown" + baseSet() { #All camera attributes are reset here. CAM_NAME="Unknown" FRAMES="Unknown" @@ -214,6 +389,7 @@ source "$SRC_PATH/helpers/format.sh" source "$SRC_PATH/programs/califrame.sh" source "$SRC_PATH/helpers/utility.sh" source "$SRC_PATH/core/parsing.sh" +source "$SRC_PATH/core/argFuncs.sh" source "$SRC_PATH/helpers/error.sh" source "$SRC_PATH/core/develop.sh" source "$SRC_PATH/core/proc.sh" @@ -276,6 +452,9 @@ case "$PROGRAM" in #Do the development step, using the globals that exist. develop "$ARG" + #Experimental Assoc Array + unset SETTINGS + #RESET ARGS & REPARSE OPTIONS - same as in convmlv.sh. #Big parse/reparse, making sure global, local, command line options all override each other correctly. set -- $INPUT_ARGS #Reset the argument input for reparsing. diff --git a/docs/MANPAGE b/docs/MANPAGE deleted file mode 100644 index 89abbca..0000000 --- a/docs/MANPAGE +++ /dev/null @@ -1,281 +0,0 @@ -Usage: - ./convmlv.sh [FLAGS] [OPTIONS] files - -INFO: - A program allowing you to develop ML files into workable formats. Many useful options are exposed. - --> Defaults: Compressed 16-bit Linear EXR. 10-bit Prores4444 MOV. - --> Color Defaults: Linear (1.0) Gamma on sRGB Gamut, using Camera White Balance. - - --> Acceptable Inputs: MLV, RAW (requires raw2dng), Folder containing DNGs. - --> Option Input: From command line or config file (specify with -C). - - --> Forum Post: http://www.magiclantern.fm/forum/index.php?topic=16799. - --> A note: BE CAREFUL WITH OPTIONS. Wrong values will give very strange errors. Read this page well!! - - It's as simple or complex as you need it to be: 'convmlv -m .mlv' is enough for good-looking output! - -VERSION: 2.0.1 - -MANUAL DEPENDENCIES: - Place these in RES_PATH (see OPTIONS, BASIC). Keep in mind you also need dist. and pip packages. - --> See 'Dist Deps' and 'Python Deps' - - -- mlv_dump: Required binary. http://www.magiclantern.fm/forum/index.php?topic=7122.0 - -- color-core: Required folder of LUTs. See convmlv repository. - -- sRange.py: Required script. See convmlv repository. - - -- raw2dng: For DNG extraction from RAW. http://www.magiclantern.fm/forum/index.php?topic=5404.0 - -- mlv2badpixels.sh: For bad pixel removal. https://bitbucket.org/daniel_fort/ml-focus-pixels/src - -- cr2hdr: For Dual ISO Development. Two links: http://www.magiclantern.fm/forum/index.php?topic=16799.0 - -- balance.py: For Auto White Balance. See convmlv repository. - -- color-ext: Extra LUTs, providing more color resources. See convmlv repository. - -OPTIONS, BASIC: - -v, --version version - Print out version string. - -h, --help help - Print out this help page. - - -C, --config config - Designates config file to use. - - -o, --outdir OUTDIR - The path in which files will be placed. - -P, --res-path RES_PATH - The path in which all manual dependencies are looked for. - --> Default: Current Directory. - - --dcraw DCRAW - The path to dcraw. - --mlv-dump MLV_DUMP - The path to mlv_dump. - --raw-dump RAW_DUMP - The path to raw2dng. - --badpixels MLV_BP - The path to mlv2badpixels.sh (by dfort). - --cr-hdr CR_HDR - The path to cr2hdr. - --srange SRANGE - The path to sRange.py. - --balance BAL - The path to balance.py. - --python PYTHON - The path or command used to invoke Python 3. Default is python3 on Linux, python on Mac. - - -T, --threads [int] THREADS - Override amount of utilized process threads. Default is MAX - 1. - - -OPTIONS, OUTPUT: - -i IMAGE - Will output image sequence. - - -t [0:3] IMG_FMT - Image output format. - --> 0: EXR (default), 1: TIFF, 2: PNG, 3: Cineon (DPX)." - - -m MOVIE - Will output a Prores4444 file. - - -p [0:3] PROXY - Create proxies alongside main output. - --> 0: No proxies (Default). 1: H.264 proxy. 2: JPG proxy sequence. 3: Both. - - --> JPG proxy will always be in sRGB Gamma/sRGB Gamut. H.264 proxy is color managed. - --> JPG proxy *won't* be developed w/o IMAGE. H.264 proxy *will* be developed no matter what, if specified here. - --> Why? JPG is for potential use in editing. H.264 is for a quick visual preview of convmlv's output. - - -s [0%:100%] PROXY_SCALE - the size, in %, of the proxy output. - --> Default: 50%. - - -k KEEP_DNGS - Specify if you want to keep the DNG files. - --> Run convmlv on the top level folder of former output to reuse saved DNGs from that run! - - -r - FRAME_RANGE - Specify to process an integer frame range. - --> You may use the characters 's' and 'e', such that s = start frame, e = end frame. - --> Indexed from 0 to (# of frames - 1). Develops from 1 to ($ of frames) - --> A single number may be writted to develop that single frame. - --> DO NOT try to reuse DNGs while developing a larger frame range. - - - --uncompress UNCOMP - Turns off lossless image compression. Otherwise: - --> TIFF: ZIP, EXR: PIZ, PNG: lvl 0, DPX: RLE. - - -OPTIONS, RAW DEVELOPMENT: - -d [0:3] DEMO_MODE - Demosaicing algorithm. Higher modes are slower + better. - --> 0: Bilinear. 1: VNG (default). 2: PPG. 3: AHD. - - -f FOUR_COLOR - Interpolate as RGBG. Fixes weirdness with VNG/AHD, at the cost of sharpness. - - -H [0:9] HIGHLIGHT_MODE - Highlight management options. - --> 0: White, clipped highlights. 1: Unclipped but colored highlights. 2: The defail of 1, but adjusted to grey. - --> 3-9: Highlight reconstruction. Can cause flickering. Start at 5, then adjust to color (down) or to white (up). - - -c [0:3] CHROMA_SMOOTH - Apply shadow/highlight chroma smoothing to the footage. - --> 0: None (default). 1: 2x2. 2: 3x3. 3: 5x5. - --> MLV input Only. - - -n [int] WAVE_NOISE - Apply wavelet denoising. - --> Default: None. Subtle: 25. Medium: 50. Strong: 125. - - -N - TEMP_NOISE - Apply temporal denoising. - --> A: 0 to 0.3. B: 0 to 5. A reacts to abrupt noise (splotches), B reacts to noise over time (fast motion causes artifacts). - --> Subtle: 0.03-0.04. High: 0.15-0.04. High, Predictable Motion: 0.15-0.07 - - -Q [i-i:i-i] HQ_NOISE - Apply 3D denoising filter. - --> In depth explanation: https://mattgadient.com/2013/06/29/in-depth-look-at-de-noising-in-handbrake-with-imagevideo-examples/ . - --> Spacial/Temporal (S/T). S will soften/blur/smooth, T will remove noise without doing that but may create artifacts. - --> Luma/Chroma (L/C). L is the detail, C is the color. Each one's denoising may be manipulated Spacially or Temporally. - - --> Option Value: -:- - --> Weak: 2-1:2-3. Medium: 3-2:2-3. Strong: 7-7:5-5 - - --> DONT combine with TEMP_NOISE. - - -O [i-i-i-i] REM_NOISE - Yet another spatial denoiser, with 4 choices of 24 modes. - --> See https://ffmpeg.org/ffmpeg-filters.html#removegrain for list of modes. - - --> Option Value: --- - --> I truly cannot tell you what values will be helpful to you; there are too many... Look at the link! - - --shallow SHALLOW - Output smaller, 8-bit files. - --> Read why this is a bad idea: http://www.cambridgeincolour.com/tutorials/bit-depth.htm - - -OPTIONS, COLOR: - -g [0:4] GAMMA - Output gamma. A curve applied to the output, for easier viewing/grading. - --> 0: Standard (Around 2.2). 1: Linear (Default). - --> Requires color-ext: 2: Cineon. 3: C-Log2 4: S-Log3 - - --> "Standard" grades to the gamut specification, and to 2.2 if that's not given. - - -G [0:6] GAMUT - Output gamut. The range of colors that can exist in the output. - --> 0: sRGB (Default). 1: Adobe RGB. 2: Rec.709. 3: XYZ (Always Linear Gamma). - --> Requires color-ext: 4: Rec2020 5: DCI-P3 6: Sony S-Gamut3.cine - - -w [0:2] WHITE - This is a modal white balance setting. - --> 0: Auto WB (requires balance.py). 1: Camera WB (default). 2: No Change. - --> AWB uses the Grey's World algorithm. - - -A [i:i:i:i] SHARP - Lets you sharpen, or blur, your footage. - --> BE CAREFUL. Wrong values will give you strange errors. - --> Size/Strength (S/T). S is the size of the sharpen/blur effect, T is the strength of the sharpen/blur effect. - --> Luma/Chroma (L/C). L is the detail, C is the color. Luma sharpening more effective. - - --> Option Value: ::: - --> LS and CS must be ODD, between 3 and 63. Negative LT/CT values blur, while positive ones sharpen. - --> Strong Sharp: 7:3:7:3 Strong Blur: 7,-3:7,-3. Medium Sharp: 5:1:3:0 - - -l LUT - Specify a LUT to apply after Color Management. - --> Supports cube, 3dl, dat, m3d. - --> Specify -l multiple times, to apply multiple LUTs in sequence. - - -S [int] SATPOINT - Specify the 14-bit uint saturation point of your camera. You don't usually need to. - --> Worth setting globally, as it's a per-camera setting. Must be correct for highlight reconstruction/unclipped highlights. - --> Lower from 15000 if -H1 yields purple highlights, until they turn white. - --> You can determine the optimal value using the max pixel value of 'dcraw -D -j -4 -T'. - - --white-speed [int] WHITE_SPD - Manually specify samples used to calculate AWB. - - --allow-white-clip WHITE_CLIP - Let the White Balance multipliers clip. - - -OPTIONS, FEATURES: - -D DESHAKE - Auto-stabilize the video using ffmpeg's "deshake" module. - --> You may wish to crop/scale the output later, to avoid edge artifacts. - - -u DUAL_ISO - Process as dual ISO. - --> Requires cr2hdr. - - -b BADPIXELS - Fix focus pixels issue using dfort's script. - --> Requires mlv2badpixels.sh. - - -a BADPIXEL_PATH - Use your own .badpixels file. Does NOT require mlv2badpixels.sh - --> How to: http://www.dl-c.com/board/viewtopic.php?f=4&t=686 - - -F DARKFRAME - This is the path to a "dark frame MLV"; effective for noise reduction. - --> How to: Record 5 sec w/lens cap on & same settings as footage. Pass MLV in here. - --> If the file extension is '.darkframe', the file will be used as a preaveraged dark frame. - - -R darkframe_output - Specify to create a .darkframe file from passed in MLV. - --> Usage: 'convmlv -R .MLV' - --> Averages .MLV to create .darkframe. - --> THE .darkframe EXTENSION IS ADDED FOR YOU. - - -OPTIONS, INFO: - -q settings - Output MLV settings. - - -K [0:3] Dist Deps - Output package dependecies, for use with common package managers. - --> 0: Debian, 1: Ubuntu, 2: Fedora, 3: Homebrew (Mac) - - --> Deps Install (Debian): sudo apt-get install $(./convmlv.sh -K 0) - --> Deps Install (Ubuntu): sudo apt-get install $(./convmlv.sh -K 1) - --> Deps Install (Fedora): sudo yum install $(./convmlv.sh -K 2) - --> Deps Install (Homebrew Mac): brew install $(./convmlv.sh -K 3) - - -Y Python Deps - Lists Python dependencies. Works directly with pip. - -->Install (Cross-Platform): sudo python3 -m pip install $ (./convmlv -Y) - - -M Manual Deps - Lists manual dependencies, which must be downloaded by hand. - --> Manually place all in RES_PATH. See http://www.magiclantern.fm/forum/index.php?topic=16799.0 . - - -COLOR MANAGEMENT: - INTRO Images aren't simple. They are often stored, processed, and viewed as a result of complex transformations usually called, - in applications, color management. Understanding it is required as a colourist, and encouraged as a DPs and Cinematographers. - - --> Intro: http://www.cambridgeincolour.com/tutorials/color-management1.htm - --> Understanding Gamma: http://www.cambridgeincolour.com/tutorials/gamma-correction.htm - --> Color Spaces: http://www.cambridgeincolour.com/tutorials/color-spaces.htm - --> Conversions: http://www.cambridgeincolour.com/tutorials/color-space-conversion.htm - --> Monitor Calibration: http://www.cambridgeincolour.com/tutorials/monitor-calibration.htm - - PIPELINE convmlv is a color managed application, designed to retain quality from RAW footage: - - -- mlv_dump writes camera-specific color transformation matrices as metadata in developed DNGs. - --> This defines the camera's gamut. - -- dcraw applies these matrices, then transforms the newly developed image to the super-wide XYZ colorspace. - --> All color detail is preserved, and if now in a well-defined colorspace. - --> No gamma has been applied - the image is now Linear XYZ. - -- ffmpeg applies the specified (up to) x64 resolution 3D LUTs, in .cube format. - --> Use -g and -G to specify Gamma/Gamut combinations. - --> The output employs DATA, not LEGAL, values. The resulting image is flatter, but retains all shadow/highlight detail. - --> -l specified LUTs are applied afterwards. - - 3D LUTS The included LUTs, found in the convmlv repository, are key to convmlv's color management solution: - -- color-core: The required LUTs, including sRGB (default), Adobe RGB, and Rec709 in Standard and Linear gamma. - -- color-ext: Optional LUTs, including Rec2020, DCI-P3, etc. in Standard/Linear gammas, but also in Log formats. - - Create Your Own LUTs using LUTCalc, for any grading format output: https://cameramanben.github.io/LUTCalc/ (watch his tutorials). - --> Note that convmlv only accepts up to 64x64x64 LUTs. You can resize LUTs using pylut (https://pypi.python.org/pypi/pylut). - --> The pylut command to resize is 'pylut .cube --resize 64'. Alternatively, you can use pylut from Python (2X only). - - --> I reccommend Legal --> Data LUTs, as this conserves shadow/highlight detail for grading. Legal --> Legal looks better, but with detail loss. - - -CONFIG FILE: - Config files, another way to specify options, can save you time & lend you convenience in production situations. - - GLOBAL: /home/sofus/convmlv.conf - LOCAL: Specify -C/--config. - - - SYNTAX: - Most options listed above have an uppercased VARNAME, ex. OUTDIR. You can specify such options in config files, as such: - - - - One option per line only. Indentation by tabs or spaces is allowed, but not enforced. - - Comments Lines starting with # are comments. - - You may name a config using: - - CONFIG_NAME - - Flags If the value is a true/false flag (ex. IMAGE), simply specifying VARNAME is enough. There is no VALUE. - - OPTION ORDER OF PRECEDENCE Options override each other as such: - -LOCAL options overwrite GLOBAL options. - -COMMAND LINE options overwrite LOCAL & GLOBAL options. - -FILE SPECIFIC options overwrite ALL ABOVE options. - - - File-Specific Block: A LOCAL config file lets you specify options for specific input names: - - / - ...options here will only be - * - - You must use the truncated (no .mlv or .raw) input name after the /. Nested blocks will fail. - - With a single config file, you can control the development options of multiple inputs as specifically and/or generically - as you want. Batch developing everything can then be done with a single, powerful commmand. - - - -Contact me with any feedback or questions at convmlv@sofusrose.com, PM me (so-rose) on the ML forums, or post on the thread! diff --git a/docs/buildDocs.sh b/docs/buildDocs.sh index ef6ab50..9d436e7 100755 --- a/docs/buildDocs.sh +++ b/docs/buildDocs.sh @@ -7,4 +7,6 @@ DDIR="$ROOT_DIR/docs" $ROOT_DIR/convmlv.sh -h | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > $DDIR/MANPAGE pdflatex $DDIR/docs.tex #> /dev/null pdflatex $DDIR/docs.tex #> /dev/null #Compile twice to get TOC to show. -rm -f $DDIR/docs.aux $DDIR/docs.log $DDIR/docs.out $DDIR/docs.toc $DDIR/texput.log > /dev/null +mv ./docs.pdf $DDIR + +rm -f ./docs.aux ./docs.log ./docs.out ./docs.toc ./texput.log > /dev/null diff --git a/docs/docs.pdf b/docs/docs.pdf deleted file mode 100644 index 706e2c03907f2746b15b6c444a0fb77934c4e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130641 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

e#^na$X0)Y9Iy8<_&X%sF-Y1i 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 diff --git a/geany-project b/geany-project new file mode 100644 index 0000000..9a9eb37 --- /dev/null +++ b/geany-project @@ -0,0 +1,54 @@ +[editor] +line_wrapping=false +line_break_column=72 +auto_continue_multiline=true + +[file_prefs] +final_new_line=true +ensure_convert_new_lines=false +strip_trailing_spaces=false +replace_tabs=false + +[indentation] +indent_width=4 +indent_type=1 +indent_hard_tab_width=8 +detect_indent=false +detect_indent_width=false +indent_mode=2 + +[project] +name=convmlv +base_path=/home/sofus/subhome/src/convmlv + +[long line marker] +long_line_behaviour=1 +long_line_column=72 + +[files] +current_page=4 +FILE_NAME_0=14583;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fcore%2Fdevelop.sh;0;4 +FILE_NAME_1=3473;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fcore%2Fparsing.sh;0;4 +FILE_NAME_2=1070;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fcore%2FargFuncs.sh;0;4 +FILE_NAME_3=3159;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fconvmlv.sh;0;4 +FILE_NAME_4=8629;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fcore%2Fproc.sh;0;4 +FILE_NAME_5=2653;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fdocumentation%2Fhelp.sh;0;4 +FILE_NAME_6=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fdocumentation%2FTODO.sh;0;4 +FILE_NAME_7=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fhelpers%2Ferror.sh;0;4 +FILE_NAME_8=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fhelpers%2Fformat.sh;0;4 +FILE_NAME_9=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fhelpers%2Fplatform.sh;0;4 +FILE_NAME_10=2653;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fhelpers%2Futility.sh;0;4 +FILE_NAME_11=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2FimgProcessing%2FimgMath.sh;0;4 +FILE_NAME_12=0;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fprograms%2Fcaliframe.sh;0;4 +FILE_NAME_13=1;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fsofus%2Fsubhome%2Fsrc%2Fconvmlv%2Fsrc%2Fprograms%2FshotSettings.sh;0;4 + +[VTE] +last_dir=/home/sofus + +[prjorg] +source_patterns=*.c;*.C;*.cpp;*.cxx;*.c++;*.cc;*.m; +header_patterns=*.h;*.H;*.hpp;*.hxx;*.h++;*.hh; +ignored_dirs_patterns=.*;CVS; +ignored_file_patterns=*.o;*.obj;*.a;*.lib;*.so;*.dll;*.lo;*.la;*.class;*.jar;*.pyc;*.mo;*.gmo; +generate_tag_prefs=0 +external_dirs= diff --git a/mkrelease.sh b/mkrelease.sh index 8137bb2..912e42a 100755 --- a/mkrelease.sh +++ b/mkrelease.sh @@ -3,16 +3,16 @@ VERSION=$(echo "$(./convmlv.sh -v)" | sed -e 's/\./\_/g') #HOW TO USE (Linux and Mac): -# 1. Update version above. -# 2. Put mlv2badpixels.sh, mlv_dump, raw2dng, and cr2hdr into a "binaries" folder in the repository. -# 3. Run this script, with one argument representing the path to the binaries. -# 4. A release tarball will automatically be created in "release" in the repository. +# 1. Make sure everything is up to date. +# 2. Put mlv2badpixels.sh, mlv_dump, raw2dng, and cr2hdr into the "binaries" folder in the repository. +# 3. A release tarball will automatically be created in "release" in the repository. ## It's reccommended that BINPATH is a folder in REP_PATH. REP_PATH="$(pwd)" BINPATH="${REP_PATH}/binaries" SRCPATH="${REP_PATH}/src" +DOCPATH="${REP_PATH}/docs" RELEASE="${REP_PATH}/release" mkdir -p "$RELEASE" @@ -25,5 +25,10 @@ else echo "Platform not yet supported! Contact me at contact@sofusrose.com." fi +$DOCPATH/cleanDocs.sh > /dev/null +$DOCPATH/buildDocs.sh > /dev/null + cd $REP_PATH tar -czvf $RELEASE/convmlv-${VERSION}-${PLATFORM}.tar.gz binaries/ src/ CHANGELOG licence convmlv.sh color-core/ color-ext DEPENDENCIES docs/MANPAGE docs/docs.pdf docs/workflow.txt configs/* + +$DOCPATH/cleanDocs.sh > /dev/null diff --git a/src/core/argFuncs.sh b/src/core/argFuncs.sh new file mode 100644 index 0000000..d93de10 --- /dev/null +++ b/src/core/argFuncs.sh @@ -0,0 +1,365 @@ +argOUTDIR() { + val="$1" + OUTDIR="$val" + SETTINGS[path_output]="$val" +} + +argBIN_PATH() { + val="$1" + BIN_PATH=="$val" + SETTINGS[path_bin]=="$val" +} + +argDCRAW() { + val="$1" + DCRAW="$val" + SETTINGS[bin_dcraw]="$val" +} + +argMLV_DUMP() { + val="$1" + MLV_DUMP="$val" + SETTINGS[bin_mlvdump]="$val" +} + +argRAW_DUMP() { + val="$1" + RAW_DUMP="$val" + SETTINGS[bin_rawdump]="$val" +} + +argMLV_BP() { + val="$1" + MLV_BP="$val" +} + +argCR_HDR() { + val="$1" + CR_HDR="$val" +} + +argPYTHON() { + val="$1" + PYTHON="$val" +} + +argTHREADS() { + val="$1" + THREADS="$val" +} + +argIMAGE() { + IMAGES=true +} + +argIMG_FMT() { + val="$1" + case ${val} in + "0") IMG_FMT="exr" + ;; + "1") IMG_FMT="tiff" + ;; + "2") IMG_FMT="png" + ;; + "3") IMG_FMT="dpx" + ;; + *) invOption "Invalid Image Format Choice: ${mode}" + ;; + esac +} + +argMOVIE() { + MOVIE=true +} + +argPROXY() { + val="$1" + case ${val} in + "0") isJPG=false; isH264=false + ;; + "1") isJPG=false; isH264=true + ;; + "2") isJPG=true; isH264=false + ;; + "3") isJPG=true; isH264=true + ;; + *) invOption "Invalid Proxy Choice: ${PROXY}" + ;; + esac +} + +argPROXY_SCALE() { + val="$1" + PROXY_SCALE=val + + proxy_num=`echo "$PROXY_SCALE" | cut -d'%' -f 1` + if [[ ! ( ($proxy_num -le 100 && $proxy_num -ge 5) && $proxy_num =~ ^-?[0-9]+$ ) ]];then + invOption "Invalid Proxy Scale: ${PROXY_SCALE}" + fi +} + +argKEEP_RAWS() { + val="$1" + KEEP_DNGS=true +} + +argFRAME_RANGE() { + val="$1" + RANGE_BASE="$val" + isFR=false +} + +argUNCOMP() { + isCOMPRESS=false +} + +argDEMO_MODE() { + val="$1" + DEMO_MODE="$val" +} + +argHIGHLIGHT_MODE() { + val="$1" + HIGHLIGHT_MODE="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + +argOUTDIR() { + val="$1" + OUTDIR="$val" +} + diff --git a/src/core/develop.sh b/src/core/develop.sh index 4f6278d..286f220 100644 --- a/src/core/develop.sh +++ b/src/core/develop.sh @@ -123,9 +123,9 @@ develop() { #Establish Basic Directory Structure. OUTDIR=$(readlinkF "$OUTDIR") - if [ $OUTDIR != $PWD ] && [ $isOutGen == false ]; then - mkdir -p $OUTDIR #NO RISKS. WE REMEMBER THE LUT.py. RIP ad-hoc HALD LUT implementation :'( . - isOutGen=true + if [ $OUTDIR != $PWD ]; then + mkdir -p $OUTDIR + #NO RISKS. WE REMEMBER THE LUT.py. RIP ad-hoc HALD LUT implementation :'( . fi local FILE="${OUTDIR}/${TRUNC_ARG}" diff --git a/src/core/parsing.sh b/src/core/parsing.sh index 2317114..29d5c30 100644 --- a/src/core/parsing.sh +++ b/src/core/parsing.sh @@ -2,10 +2,12 @@ #desc: All config and command line parsing happens here. +#MAIN FUNCTIONS + parseConf() { - file=$1 #The File to Parse - argOnly=$2 #If true, will only use file-specific blocks. If false, will ignore file-specific blocks. - CONFIG_NAME="None" + local file=$1 #The File to Parse + local argOnly=$2 #If true, will only use file-specific blocks. If false, will ignore file-specific blocks. + local CONFIG_NAME="None" if [[ -z $file ]]; then return; fi if [[ ! -f $file ]]; then return; fi @@ -46,9 +48,7 @@ parseConf() { ;; "MLV_BP") MLV_BP=`echo "${line}" | cut -d$' ' -f2` ;; - "SRANGE") CR_HDR=`echo "${line}" | cut -d$' ' -f2` - ;; - "BAL") PYTHON_SRANGE=`echo "${line}" | cut -d$' ' -f2`; setPaths + "CR_HDR") CR_HDR=`echo "${line}" | cut -d$' ' -f2` ;; "PYTHON") PYTHON=`echo "${line}" | cut -d$' ' -f2`; setPaths ;; @@ -96,7 +96,7 @@ parseConf() { proxy_num=`echo "$PROXY_SCALE" | cut -d'%' -f 1` if [[ ! ( ($proxy_num -le 100 && $proxy_num -ge 5) && $proxy_num =~ ^-?[0-9]+$ ) ]]; then invOption "Invalid Proxy Scale: ${PROXY_SCALE}"; fi ;; - "KEEP_DNGS") KEEP_DNGS=true + "KEEP_RAWS") KEEP_DNGS=true ;; "FRAME_RANGE") RANGE_BASE=`echo "${line}" | cut -d$' ' -f2`; isFR=false ;; diff --git a/src/documentation/help.sh b/src/documentation/help.sh index c5af9e2..e1ee8d4 100644 --- a/src/documentation/help.sh +++ b/src/documentation/help.sh @@ -52,8 +52,6 @@ $(head "OPTIONS, BASIC:") --raw-dump $(cVal RAW_DUMP) - The path to raw2dng. --badpixels $(cVal MLV_BP) - The path to mlv2badpixels.sh (by dfort). --cr-hdr $(cVal CR_HDR) - The path to cr2hdr. - --srange $(cVal SRANGE) - The path to sRange.py. - --balance $(cVal BAL) - The path to balance.py. --python $(cVal PYTHON) - The path or command used to invoke Python 3. Default is python3 on Linux, python on Mac. -T, --threads [int] $(cVal THREADS) - Override amount of utilized process threads. Default is MAX - 1. diff --git a/src/helpers/utility.sh b/src/helpers/utility.sh index 10601e3..876d651 100644 --- a/src/helpers/utility.sh +++ b/src/helpers/utility.sh @@ -81,3 +81,11 @@ runSim() { cat $PIPE | $cmd1 & $cmdOrig | tee $PIPE | $cmd2 #The magic of simultaneous execution ^_^ #~ cat $PIPE | tr 'e' 'a' & echo 'hello' | tee $PIPE | tr 'e' 'o' #The magic of simultaneous execution ^_^ } + +strArr() { + #usage: strArr arg1 arg2 ... + #desc: Formats the args into a string ready to insert into an associative array. + #return: A string ready to insert into an associative array. + + echo "TO BE WRITTEN" +}