From: Good Guy Date: Sun, 21 Nov 2021 22:13:16 +0000 (-0700) Subject: Andrea-s formats and codecs improvements X-Git-Tag: 2021-11~3 X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcin-manual-latex.git;a=commitdiff_plain;h=a5d793d4b19799c05f4179a79a0843e6b7fe50c9;hp=6d77693541c26d53220eb95c9b30ea302bd9da82 Andrea-s formats and codecs improvements --- diff --git a/CinelerraGG_Manual.tex b/CinelerraGG_Manual.tex index 8089d99..6849500 100644 --- a/CinelerraGG_Manual.tex +++ b/CinelerraGG_Manual.tex @@ -53,7 +53,6 @@ svgnames, \addappheadtotoc \begin{appendices} \include{parts/Quickstart} -\include{parts/Formats} \include{parts/Developer} \include{parts/AuxilaryPrograms} \include{parts/Real-World} diff --git a/parts/Quickstart.tex b/parts/Quickstart.tex index 346eaab..aaefc14 100644 --- a/parts/Quickstart.tex +++ b/parts/Quickstart.tex @@ -276,3 +276,173 @@ At this time, or even earlier if you think you might make a mistake or if you ar \label{sub:play_your_new_media} The file you created in the Render step should now be playable. You can test this in \CGG{} most easily by going to the Resource window in the lower right corner, clicking on the Media folder, and dragging and dropping the last video to the Viewer window. There is a separate set of transport buttons on the bottom on that screen to use for playing. + +\section{Overview on Formats and Codecs}% +\label{sec:overview_formats} +\index{format} +\index{codec} + + +Here is an overview of the formats (also called containers) and codecs that are used in \CGG{}, by ffmpeg and the internal engine. Roughly speaking these are divided into uncompressed codecs (or codecs with \textit{Intraframe} compression, which can be lossy or lossless) and compressed codecs of \textit{Interframe} type (LongGOP, almost always with lossy compression). The All-I (intraframe) codecs are suitable for editing because a cut or other operation on the timeline corresponds to the exact frame on which you are operating. The interframe types use Groups of Pictures (GOP) and a cut or other operation is accurate (and requires no further calculation) only if it coincides with the beginning of the GOP, and not with an internal frame. There is also color compression: Color Space \textit{bit-depth} and \textit{Chroma-Subsampling} for YUV models. In addition, heavy compression requires the system to do more encoding/decoding work on the timeline. High quality codecs have high bit rates and bit depths but this also affects the performance of the system, not to mention the increased disk space usage. Some formats implement both audio and video streams, others audio only or video only. + +\subsection{FFmpeg Video Formats}% +\label{sec:FFmpeg_video} + +FFmpeg supports hundreds of codecs and formats. Some are proprietary and cannot be implemented in FFmpeg or can be voluntarily compiled as non-free; others are proprietary but their use is free; finally there are the Open formats/codecs, fully supported and well documented. We are only describing here a selection of the most well-known and most frequently used ones. + +\subsubsection{High Quality} +\label{ssub:ffmpeg_video_high_quality} + +High quality formats are also called Mezzanine codecs, Digital Intermediate, Preservation codecs or Editing codecs. These have no compression or intraframe lossless or near-lossless compression and are suitable for editing, post-processing, mastering and archiving. They are also used for the interchange of files between different programs. They take up a lot of disk space and require a powerful system. + +\begin{description} + \item[MKV] Open, highly configurable and extensively documented. Can have seeking problems. Belongs to the Matroska family. + \newline Presets: \textit{ffv1, ffvyuv} + \item[MXF] Created by Avid. It is probably the best and most advanced container for editing. + \newline Presets: \textit{DNxHR, ffv1, AVC\_Intra\_100} + \item[MOV] Created by Apple. It is a suitable format for editing because it organizes the files within the container into hierarchically structured \textit{atoms} described in a header. This brings simplicity and compatibility with various software and does not require continuous encoding/decoding in the timeline. + \newline Presets: \textit{DNxHR, ffv1, CineformHD, huffyuv} + \item[PRO] Different extension, but it is still mov. Prores is proprietary and there are no official encoders except the original Adobe one. The engine used by ffmpeg is the result of reverse engineering and, according to Adobe, does not guarantee the same quality and performance of the original\protect\footnote{https://support.apple.com/en-us/HT200321}. + \newline Presets: \textit{ProRes} + \item[QT] Different extension, but it is always mov. + \newline Presets: \textit{DNxHD, magicyuv, raw, utvideo} + \item[MP4] mostly used for General Purpose. It belongs to the large MPEG family. + \newline Presets: \textit{AVC\_Intra\_100} + \item[RGB] Raw format. + \newline Presets: \textit{raw} + \item[YUV] Raw format. + \newline Presets: \textit{raw} + \item[AVI] Old and limited format (no multi streams, no subtitles, limited metadata) but with high compatibility. + \newline Presets: \textit{ffv1} +\end{description} + +\subsubsection{General Purpose} +\label{ssub:ffmpeg_video_general_purpose} + +These are also called Delivery codecs. They are the most used and widespread being suitable for streaming, video sharing, watching TV, smartphones, plus more. Because of lossy compression type Interframe, they produce smaller files with variable quality. They are not suitable for editing, compositing and color correction. Further rendering of these formats worsens the quality exponentially. The most used codecs have hardware support (vaapi, vdpau, nvenc) that make them more efficient. + +\begin{description} + \item[MOV] Created by Apple. It is a suitable format for editing because it organizes the files within the container into hierarchically structured "atoms" described in a header. This brings simplicity and compatibility with various software and does not require continuous encoding/decoding in the timeline. + \newline Presets: \textit{Presets: mov} + \item[QT] Different exstension, but it is always mov. + \newline Presets: \textit{mjpeg, DV, Div, CinePack} + \item[MP4] The most popular. Many other formats belong to this family (MPEG); + \newline h264 is actually x264, open, highly configurable and documented; h265/HEVC is actually x265, open, highly configurable and documented. x264-5 is for encoding only. + \newline Presets: \textit{h265, h265, mjpeg, mpeg2, obs2youtube} + \item[WEBM] Open; similar to mp4 but not as widespread (it is used by YouTube). In \CGG{} there are specific Presets with \texttt{.youtube} extension, but they are still webm. + \newline Presets: \textit{VP8, VP9, AV1} + \item[MKV] Open, highly configurable and widely documented. It might have seeking problems. It belongs to the Matroska family. + \newline Presets: \textit{Theora, VP8, VP9} + \item[AVI] Old and limited format (no multistreams, no subtitles, limited metadata) but with high compatibility. + \newline Presets: \textit{asv, DV, mjpeg, xvid} + \item[MPG] Parent of the MPEG family, to which MP4 also belongs. Mpeg is used by \CGG{} as default for proxies and mpeg-2 is the standard for Video DVDs. + \newline Presets: \textit{mpeg, mpeg2} +\end{description} + +\subsubsection{Image Sequences} +\label{ssub:ffmpeg_image_sequences} + +The image sequences can be uncompressed, with lossy or lossless compression but always Intraframe. They are suitable for post-processing that is compositing (VFX) and color correction. + +\begin{description} + \item[DPX] Film standard; uncompressed; high quality. \textit{Log} type. + \item[PNG] Uncompressed or lossless compression. Supports alpha channel. + \item[WEBP, TIFF, GIF, JPEG, ...] Variable compression, size and quality. +\end{description} + +\subsubsection{Old Pro Formats} +\label{ssub:ffmpeg_old_pro_formats} + +Some formats, though used in the past in the pro field, are disappearing with the evolution of technologies. DVD is becoming more and more niche, while Bluray is still widespread (also as a backup); DV/HDV remains only as a support for old Camcorders with magnetic tapes. DV is still a quality format, with intraframe compression; HDV is mpeg-2 compressed. + +\begin{description} + \item[AVI] old and limited format but with high compatibility. + \newline Presets: \textit{DV\_pal, DV\_ntsc, mjpeg} + \item[QT] belongs to the Apple mov family. + \newline Presets: \textit{DV, mjpeg} + \item[M2TS] format for Bluray (mpeg4). Bluray player devices need a standard Bluray disc structure (bdwrite) for playback\protect\footnote{\CGG{} offers specific functionality for creating DVDs/Blurays}. + \newline Presets: \textit{AVC422, Lossless, Bluray, hevc} + \item[MP4] Belongs to the MPEG family. Motionjpeg has jpeg compression, then Intraframe, so it maintains good quality and fluidity in editing. It is now an old and limited codec. + \newline Presets: \textit{mjpeg} +\end{description} + +\subsection{FFmpeg Audio Formats}% +\label{sub:FFmpeg_audio} + +Audio formats and codecs take much less resources and space than video ones, so they are often used without compression for maximum quality. However these are compressed formats and codecs widely used in streaming and sharing. + +\subsubsection{High Quality} +\label{ssub:ffmpeg_audio_high_quality} + +\begin{description} + \item[FLAC] Open; used for storing music. It has lossless compression. + \newline preset: \textit{flac} + \item[PCM] Raw format that encodes the signal with \textit{modified pulse modulation} (pcm). FFmpeg does not support pcm audio if you use mp4 as a container. + \newline Presets: \textit{s8, s16, s24, s32} + \item[WAV] Raw format created by Microsoft. 32-bit addressing leading to the 4 GB recording limit. It is a widely used standard. + \newline Presets: \textit{s24le, s32le} + \item[W64] Wave format created by Sony to override the 4GB recording limit. Poorly supported. + \newline Presets: \textit{s16le, s24le, s32le} + \item[MKA] Open, highly configurable and documented. It belongs to the Matroska family. Uncompressed pcm type. + \newline Presets: \textit{s16le, s24le, s32le} +\end{description} + +\subsubsection{General Purpose} +\label{ssub:ffmpeg_audio_general_purpose} + +\begin{description} + \item[MP3] Belongs to the MPEG family. The most widely used in streaming and sharing. + \newline preset: \textit{mp3} + \item[OGG] Open, highly configurable and documented. It belongs to the Matroska family. Flac has lossless compression; opus is compressed but modern and of good quality, superior to mp3. Vorbis is compressed and dated, but lightweight and compatible. + \newline Presets: \textit{flac, opus, vorbis} + \item[PRO] Created by Apple; compressed audio codec, competing with mp3. + \newline Presets: \textit{acc256k} +\end{description} + +\subsection{\CGG{} Internal Engine}% +\label{sub:internal_engine} + +FFmpeg is the default engine, but you can also use its internal engine, which is limited in supported formats but efficient and of high quality. + +\subsubsection{Video general purpose} +\label{ssub:internal_general_purpose} + +\begin{description} + \item[RAW DV] supports the DV standard. + \newline Presets: \textit{dv} + \item[MPEG Video] highly configurable. Extension \texttt{.m2v}. + \newline Presets: \textit{mpeg1, mpeg2} + \item[OGG Theora/Vorbis] Open, easily configurable. Theora for video, Vorbis for audio. + \newline Presets: \textit{theora, vorbis} +\end{description} + +\subsubsection{Image Sequences} +\label{sub:internal_image_sequences} + +There are quite a few formats available. + +\begin{description} + \item[EXR Sequence] OpenEXR (Open Standard) is a competing film standard to DPX, but \textit{Linear} type. + \item[Ppm Sequence] is RGB Raw. + \item[Tga Sequence] is RGB(A) compressed or uncompressed. + \item[Tiff Sequence] is RGB(A) or RGB(A)-Float with various compression types. + \item[Jpg, gif Sequences] lossy compressed and limited formats. +\end{description} + +\subsubsection{Audio general purpose} +\label{sub:internal_audio_general_purpose} + +\begin{description} + \item[AC3] widely used multichannel standard (Dolby Digital). Format with lossy compression. + \newline Presets: \textit{ac3} + \item[Apple/SGI AIFF] Created by Apple; is an uncompressed format (pcm type) or with 32/64-bit floating point compression. + \newline Presets: \textit{aif} + \item[Sun/Next AU] created by Sun and used in Unix environment, now in disuse. It can be of pcm type or with lossy compression. + \newline Presets: \textit{au} + \item[Flac] Open, lossless compression, very good quality. + \newline preset: \textit{flac} + \item[Microsoft WAV] created by Microsoft. It can have 16-24-32-bit linear or float compression. + \newline Presets: \textit{wav} + \item[MPEG Audio] Very widespread standard. Extension \texttt{.mp3}. + \newline Presets: \textit{mp3} +\end{description} diff --git a/parts/Rendering.tex b/parts/Rendering.tex index cfb1e59..cbdcaf9 100644 --- a/parts/Rendering.tex +++ b/parts/Rendering.tex @@ -215,6 +215,8 @@ information on all these options can be found at \href{https://ffmpeg.org/ffmpeg-all.html#Format-Options}{ffmpeg.org} sections 19 and 21. See also \nameref{sub:modifying_ffmpeg_cinelerra}. +Render presets in \CGG{} should work Out Of the Box. You can still configure the \textit{Global Options} and \textit{Private Options} manually. Finding the combination of parameters that best suits your needs, or simply finding working (\textit{legal}) combinations, requires studying each codec in depth. You can start by looking in Wikipedia until you get to download and study the \textit{white papers} of the codecs of interest. In any case, you must then start a long experimental phase, trying presets with different configurations or creating new ones, until you get satisfactory results. If you create new presets it is a good idea to make them known on the mailing list ({\small \url{https://lists.cinelerra-gg.org/mailman/listinfo/cin}}) or on the MantisBT Bug Tracker ({\small \url{https://www.cinelerra-gg.org/bugtracker/my_view_page.php}}) so that they can be integrated into subsequent versions of \CGG{}. For an introduction see \nameref{sec:overview_formats}. + \section{Some Specific Rendering}% \label{sec:some_specific_rendering}