meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
linux:multimedia:movie [2017/07/19 10:52] niziaklinux:multimedia:movie [2021/02/07 11:21] (current) niziak
Line 1: Line 1:
 +====== Movie ======
 +
 +===== Extract frames =====
 +  * Extract keyframes
 +    * **-hide_banner** we are using this parameter to hide ffmpeg compilation information
 +    * **-vsync vfr**: This is a parameter that tells the filter to use a variable bitrate video synchronization. If we do not use this parameter ffmpeg will fail to find only the keyframes and shoud extract other frames that can be not processed correctly.
 +<code bash>ffmpeg -i VIDEO0068.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr thumb%04d.bmp -hide_banner</code>
 +  * Extract one frame per second
 +<code bash>ffmpeg -i video.webm -vf fps=1 thumb%04d.jpg -hide_banner</code>
 +  * Extract one frame per 10 seconds
 +<code bash>ffmpeg -i video.webm -vf fps=1/10 thumb%04d.jpg -hide_banner</code>
 +  * Extract with different quality / to bmp
 +<code bash>ffmpeg -i video.webm -vf fps=1 -quality 90 thumb%04d.jpg -hide_banner</code>
 +<code bash>ffmpeg -i video.webm -vf fps=1 thumb%04d.bmp -hide_banner</code>
 +  * Extract only one frame
 +<code bash>ffmpeg -i video.webm -ss 00:00:07.000 -vframes 1 thumb.jpg</code>
 +
 +===== Chroma subsampling =====
 +[[https://en.wikipedia.org/wiki/Chroma_subsampling]]
 +{{ :linux:multimedia:sampling.jpg?200|}}
 +{{ :linux:multimedia:316-f6-chroma-subsampling-secondary_1.png?200|}}
 +  * j:a:b - j - horizontal sampling reference (usually 4). **a** number of chroma samples (Cr, Cb) in the first row of **j** pixels. **b** number of changes of chroma samples between firs and second row of **j** pixels.
 +  * 4:4:4 - (H265, H264) - no chroma subsampling - for every 4 pixels of luma, there are 4 pixels of colour
 +  * 4:2:2 - 50Mbit - (H264) for every 4 pixels of luma, there are 2 pixels of colour. Keying can produce bad edges.
 +  * 4:2:0 - 35MBit - (DVD, DV, JPEG, MPEG1, Blueray) - only alternatign lines are sampled for chroma. Chroma vertical resolution is halved.
 +
 +
 +===== Stabilisation =====
 +
 +==== To remove Little shaking in 1-pass ====
 +
 +<code bash>ffmpeg -threads 8 -i $1 -vf deshake -c:a copy -c:v utvideo yuv420p $1-deshake.mkv</code>
 +NOTE: No multithreading.
 +
 +==== To completely process shaky video in 2-pass| ====
 +
 +FFMpeg already contains plugins **vidstabdetect** and **vidstabtransform** [[http://public.hronopik.de/vid.stab/download.php]].
 +But latest version (supports multithreading) can be downloaded as statically linked binary from: [[https://www.johnvansickle.com/ffmpeg/]]
 +
 +<code bash>
 +ffmpeg -i $1 -vf vidstabdetect=shakiness=10:accuracy=15:result="tracefile.trf":show=1 -c:a copy -c:v utvideo ${PIX_FMT} ${OFILE}-vidstab1.mkv
 +ffmpeg -i $1 -vf vidstabtransform=input="tracefile.trf" -c:a copy -c:v utvideo ${PIX_FMT} ${OFILE}-vidstab2.mkv
 +</code>
 +NOTE: output from pass1 is also written as video to see motion vectors.
 +
 +
 +
 +
 +
 ===== Lossless ===== ===== Lossless =====
  
Line 4: Line 53:
   * Download for Windows: https://www.videohelp.com/software/Ut-Video-Codec-Suite   * Download for Windows: https://www.videohelp.com/software/Ut-Video-Codec-Suite
   * Supported by ffmpeg   * Supported by ffmpeg
-<code bash>ffmpeg -i $1 -vf deshake -c:a copy -c:v utvideo -pix_fmt yuv420p $1-deshake.mkv</code>+<code bash>ffmpeg -i $1 -vf deshake -c:a copy -c:v utvideo -pix_fmt yuv422p $1-deshake.mkv</code>
  
-===== mpeg2 =====+Comparison of file size: 
 +^ pixfmt ^ huffyuv ^ utvideo ^ 
 +| 444p           | 4104M   | 
 +| 422p   | 4077M   | 3204M   |  
 +| 420p           | 2556M   | 
 + 
 +The same video encoded using **utvideo** @422p is 78% of **huffyuv**. 
 +===== MPEG2 =====
 Highest quality (qscale 4-5 is far enough) Highest quality (qscale 4-5 is far enough)
 <code>-c:v mpeg2video -qscale:v 2</code> <code>-c:v mpeg2video -qscale:v 2</code>
 +==== DVD ====
 +DVD's VOBS can be simply concatenated to one big file:
 +<code bash>cat ./VIDEO_TS/*.VOB | ffmpeg -i - <out_name>.<out_format></code>
 +
 +<code bash>
 +#!/bin/bash -eu
 +
 +VOBS=""
 +while read VOB; do
 +    echo ${VOB}
 +    if [ -n "${VOBS}" ]; then
 + VOBS="${VOBS}|"
 +    fi
 +    VOBS="${VOBS}${VOB}"
 +done < <(ls -1 *.VOB)
 +
 +ffmpeg -i "concat:${VOBS}" -map 0:0 -map 0:1 -map 0:2 -c copy out.ts
 +</code>
 +More: [[https://newspaint.wordpress.com/2016/07/27/ripping-a-video-from-dvd-using-ffmpeg/]]
 +
  
 ===== H.264 params ===== ===== H.264 params =====