I've used earlier versions of convmlv in my own short films: \url{https://www.youtube.com/watch?v=a7iSjEfch5s&t=5s} and \url{https://www.youtube.com/watch?v=yi-G7sXHB1M&t=1s}.
So you may judge for yourself, I suppose ;) .
\subsection{Important Links}
The Forum Post: \url{http://www.magiclantern.fm/forum/index.php?topic=16799.0}\\
The Git Repository: \url{https://github.com/so-rose/convmlv}\\
This Release: \url{https://github.com/so-rose/convmlv/releases}\\
\subsection{What can it do?}
This entire document is dedicated to the answer! In short, it is a program \textbf{allowing you to develop .RAW, .MLV, or sequences of .DNGs
into workable image and video formats}. Many useful options are exposed.\\
It can be as simple - 'convmlv -m footage.mlv' is valid - or as complex as you need it to be, for example with automation and color management.
\subsection{Terminal: Not So Scary! I swear!}
I swear, it's actually quite intuitive! Here's a crash course. First, open it up. You'll see a prompt, something like this:
\begin{lstlisting}[language=bash]
user@computer:~
\end{lstlisting}
You're in your \textbf{Home Folder}, often abbreviated by a ~. Let's look at what files and folders there are:
\begin{lstlisting}[language=bash]
ls #List - Press enter!
\end{lstlisting}
Look at all those files! But let's say I wanted to go to Desktop:
\begin{lstlisting}[language=bash]
cd Desktop #Change Directory, with one option: Desktop!
\end{lstlisting}
Notice the prompt has changed:
\begin{lstlisting}[language=bash]
user@computer:~/Desktop
\end{lstlisting}
You can type ls again to list stuff on your Desktop. If you want to go back up to home, type 'cd ..' (.. means up, . means current directory). And, you're set!\\
If you want to learn more, there's a lot of reading material out there. Start here: \url{https://www.digitalocean.com/community/tutorials/an-introduction-to-the-linux-terminal}.
\item Four Color Mode, -r: When the VNG and AHD demosaicing modes get strange, this option tends to fix things.
\item Highlight Reconstruction, -H: Highlights are values too bright for detail. A mode of 2 will attempt to fix them up a bit,
while modes of 3 to 9 tries to regain the detail using varying color tones. A mode of 1 will let colored highlights through; this will
usually look nasty unless you tune the Saturation Point (see below).
\end{itemize}
\subsection{Noise Reduction}
convmlv includes no less than 6 ways (including Darkframe Subtraction below) to reduce noise in your footage! See 'convmlv -h' for a very thorough explanation of each option.
Combining them will either condemn you or unblind you :) .
\begin{itemize}
\item Chroma Smooth, -c: Color noise can often be twarted just by blurring the color channels. Numbers from 0 to 3 make this blur
stronger. \textit{Note this only works on MLV input footage.}
\item Wavelet Denoise, -n: RAW processing is a great point in the pipeline to do some wavelet denoising, which reduces
noise at an acceptable detail loss. A setting of 50 can take the edge off.
\item Temporal Denoise, -N: This denoising engine is best played with - see convmlv -h. A good starting point is '-N 0.03-0.04'.
\item HQ Denoise, -Q: This is Handbrake's denoising filter, explained here in great detail:
\url{https://mattgadient.com/2013/06/29/in-depth-look-at-de-noising-in-handbrake-with-imagevideo-examples/}. A good starting
point is '-Q 3-2:2-3'.
\item Removegrain, -O: This one is very weird. You can choose 4 combinations of 24 modes, listed here:
In convmlv, the White Balance you shot with is used by default. You can also do Auto White Balance, or ignore it entirely, with modes of the -w option:
Long story short, convmlv uses LUTs for everything. This may change in the future, as I'm working on a project called
openlut (\url{https://github.com/so-rose/openlut}), but for now, these LUTs are part of the convmlv installation (in color-core and color-ext folders).\\
The -g option lets you choose a gamma, while the -G option lets you choose a gamut. You'll notice staples like sRGB, XYZ, etc. .
The fancier gamma/gamuts require you to have the 'color-ext' folder in your installation - you should have this, unless you manually omitted it.
If you want to grade to your own gamma/gamut, I suggest using LUTCalc (https://cameramanben.github.io/LUTCalc/) to generate a corresponding LUT.\\
Currently lacking is 1D LUT support, and x65 3D LUT support. Once openlut is integrated, these problems will go away.
\subsection{Fixing Saturation Point}
Sometimes, dcraw gets something called the "saturation point" of your camera wrong. This will manifest itself as nasty, purple highlights when using
-H 1, and will screw up highlight reconstruction (-H 3 to 9) and possibly -H 2 as well when it happens.\\
To fix it, lower it incrementally from 15000 until the highlights turn white. Trial and error is the easy way to do this:
\begin{lstlisting}[language=bash]
convmlv -i -S 15000 footage.mlv #Setting the sat point.
\end{lstlisting}
If you want a more scientific solution, then develop one DNG yourself using 'dcraw -D -j -4 -T'. The largest 0 to 1 pixel value, multiplied by 2\^14 (14 bits),
is the theoretical optimal number.\\
I don't find this to be a problem at all in my everyday life, because most DNGs have this data properly set. However, some don't, in which case you want to fix it!
convmlv can processing Dual ISO footage! Simply specify -u:
\begin{lstlisting}[language=bash]
convmlv -i -u footage.mlv #Dual ISO - the easy way!
\end{lstlisting}
Dual ISO is a method of increasing the dynamic range of your shots, at the cost of shadow/highlight resolution. It can create some
absolutely \textbf{stunning} footage.
\subsection{Bad/Focus Pixels}
On some cameras, focus pixel issues are rampant. These will be static, colored dots, that end up ruining footage. To fix it, simply specify -b:
\begin{lstlisting}[language=bash]
convmlv -i -b footage.mlv #Fixing focus pixels.
\end{lstlisting}
Note that, due to a dcraw bug, processing Dual ISO footage won't remove all the focus pixels. I suggest you use MLVFS (see the tip) in conjunction with convmlv,
which solves this issue.\\
In the same vein, but still different, is the issue of bad camera pixels. As your camera ages, pixels will die; as such, you want to interpolate around
them. This must be done manually, as described here: \url{http://www.dl-c.com/board/viewtopic.php?f=4&t=686}.\\
You end up with a .badpixels file, which you want to apply to your footage to clean these dead pixels up. This is simple to do:
\begin{lstlisting}[language=bash]
convmlv -i -a mycamera.badpixels footage.mlv #Fix bad pixels.
\end{lstlisting}
You can freely combine the focus pixel fix with or without the bad pixels fix.
There are three ways to specify options in convmlv. Each overwrites the last one:
\begin{itemize}
\item Global Config: Found in \textit{homedir}/convmlv.conf, if it exists.
\item Local Config: Found at the path specified by -C or --config.
\item Command Line Options: Passed when calling convmlv.
\end{itemize}
So, if I specified 'GAMMA 2' in the Global, but then specified '-g 3' on the command line,
then the output gamma would be set to mode 3.
\subsection{Syntax}
All valid config files begin the same way:
\begin{verbatim}
CONFIG\_NAME <name>
\end{verbatim}
\textbf{Comments} start with a \#. They are ignored.\\
You specify options like so:
\begin{verbatim}
<VARNAME> <VALUE>
\end{verbatim}
If VARNAME is a true/false flag, then specifying it is enough - there's no VALUE.\\
Each command line option has a corresponding VARNAME. The VALUE is what you'd type into the terminal.
\subsection{File-Specific Blocks}
You can even specify options for specific files! That is to say, these options will only be triggered if the name of the file
you're developing matches. This lets you essentially program how all the footage of your production is developed, all in one config file.\\
This only works for LOCAL config files. The way to use this feature is the File-Specific Block:
\begin{verbatim}
File-Specific Block: Config per specific filename.
/ <TRUNCATED INPUTNAME>
...options here will only be used for the specified filename.
*
\end{verbatim}
You must use the truncated (no .mlv or .raw) input name after the /. Nested blocks will fail.
\section{Tips and Tricks}
Using this in real situations, I've come up with some time savers you might find useful!
\subsection{Batch Processing}
Batch processing files can be done with a *. For example, to process all .MLV files in a directory:
\begin{lstlisting}[language=bash]
convmlv -i *.MLV #Develops all MLV files in the current directory.
\end{lstlisting}
Combine this with config files and the file-specific blocks, and you may only have to run a single
command to develop an entire project of footage in a completely customized way.
\subsection{Develop Anywhere Without Dependency Error}
Something you should absolutely have in your Global Config is RES\_PATH. This is the folder where all your manual dependencies (mlv-dump, etc.) are looked for.
By default it's the current directory, but point it at the folder containing mlv-dump, raw2dng, etc. in your Global Config, and you'll
be able to develop MLVs anywhere on the system!
F
\subsection{Thread Count}
Though the script auto-detects available threads, you can of course customize this: