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 revision Previous revision
Next revision
Previous revision
linux:multimedia:movie [2017/07/19 10:52]
niziak
linux: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 =====