meta data for this page
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| linux:multimedia:movie [2016/03/30 09:08] – niziak | linux:multimedia:movie [2021/02/07 11:21] (current) – niziak | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Movie ====== | ||
| - | ==== mpeg2 ==== | + | ===== 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> | ||
| + | * Extract one frame per second | ||
| + | <code bash> | ||
| + | * Extract one frame per 10 seconds | ||
| + | <code bash> | ||
| + | * Extract with different quality / to bmp | ||
| + | <code bash> | ||
| + | <code bash> | ||
| + | * Extract only one frame | ||
| + | <code bash> | ||
| + | |||
| + | ===== Chroma subsampling ===== | ||
| + | [[https:// | ||
| + | {{ : | ||
| + | {{ : | ||
| + | * 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> | ||
| + | NOTE: No multithreading. | ||
| + | |||
| + | ==== To completely process shaky video in 2-pass| ==== | ||
| + | |||
| + | FFMpeg already contains plugins **vidstabdetect** and **vidstabtransform** [[http:// | ||
| + | But latest version (supports multithreading) can be downloaded as statically linked binary from: [[https:// | ||
| + | |||
| + | <code bash> | ||
| + | ffmpeg -i $1 -vf vidstabdetect=shakiness=10: | ||
| + | ffmpeg -i $1 -vf vidstabtransform=input=" | ||
| + | </ | ||
| + | NOTE: output from pass1 is also written as video to see motion vectors. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Lossless ===== | ||
| + | |||
| + | Use UT Video codec as better alternative to HUFYUV: [[https:// | ||
| + | * Download for Windows: https:// | ||
| + | * Supported by ffmpeg | ||
| + | <code bash> | ||
| + | |||
| + | Comparison of file size: | ||
| + | ^ pixfmt ^ huffyuv ^ utvideo ^ | ||
| + | | 444p | ||
| + | | 422p | 4077M | 3204M | | ||
| + | | 420p | ||
| + | |||
| + | 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) | ||
| < | < | ||
| + | ==== DVD ==== | ||
| + | DVD's VOBS can be simply concatenated to one big file: | ||
| + | <code bash>cat ./ | ||
| - | ==== H.264 params ==== | + | <code bash> |
| + | #!/bin/bash -eu | ||
| + | |||
| + | VOBS="" | ||
| + | while read VOB; do | ||
| + | echo ${VOB} | ||
| + | if [ -n " | ||
| + | VOBS=" | ||
| + | fi | ||
| + | VOBS=" | ||
| + | done < <(ls -1 *.VOB) | ||
| + | |||
| + | ffmpeg -i " | ||
| + | </ | ||
| + | More: [[https:// | ||
| + | |||
| + | |||
| + | ===== H.264 params | ||
| CRF (Constant Rate Factor), 0..51 (0-lossless) | CRF (Constant Rate Factor), 0..51 (0-lossless) | ||
| * 17..23 very good, no blocking efect during fast movement | * 17..23 very good, no blocking efect during fast movement | ||
| Line 12: | Line 94: | ||
| < | < | ||
| - | ==== FFMpeg params ==== | + | ===== FFMpeg params |
| 2.5Mbps bitrate with tolerance 300k | 2.5Mbps bitrate with tolerance 300k | ||
| < | < | ||
| - | === Resize === | + | ==== Resize |
| to half of size (using video filter [[https:// | to half of size (using video filter [[https:// | ||
| < | < | ||
| - | === Audio recompress === | + | ==== Audio recompress |
| 1 channel audio (mono), audio quality 7 [[https:// | 1 channel audio (mono), audio quality 7 [[https:// | ||
| < | < | ||
| - | ==== Examples ==== | + | ===== Examples |
| - | === Change container === | + | ==== Change container |
| < | < | ||
| - | === Recompress === | + | ==== Copy video and compress audio ==== |
| + | Create mono mp3 audio stream: | ||
| + | <code bash> | ||
| + | |||
| + | ==== Remove audio ==== | ||
| + | <code bash> | ||
| + | |||
| + | ==== Recompress | ||
| < | < | ||
| ffmpeg -i input.mp4 -b 1000000 output.mp4 | ffmpeg -i input.mp4 -b 1000000 output.mp4 | ||
| Line 42: | Line 131: | ||
| < | < | ||
| - | === Cut === | + | ==== Cut ==== |
| Cut input from 11:20 to 1:45:50: | Cut input from 11:20 to 1:45:50: | ||
| Line 66: | Line 155: | ||
| Copy chosen streams and resize to 50%, recompress video stream: | Copy chosen streams and resize to 50%, recompress video stream: | ||
| - | < | + | < |
| + | ==== Deinterlace ==== | ||
| + | <code bash> ffmpeg -i test.ts -vf yadif -vcodec ... -acodec ... test.mp4</ | ||
| vidia | vidia | ||
| Line 74: | Line 165: | ||
| https:// | https:// | ||
| + | ===== Issues ===== | ||
| + | * **deprecated pixel format used, make sure you did set range correctly** | ||
| + | * when using **yuv420p** pixel format | ||