User Tools

Site Tools


ffmpeg

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
ffmpeg [2020/07/07 18:50]
sdbs [dropped frame re-interpolation] linkify filter docs
ffmpeg [2021/12/11 23:21] (current)
sdbs improve commando
Line 8: Line 8:
 If you're on Windows, it's technically possible to install ''ffmpeg'' and use it directly ((from https://ffmpeg.zeranoe.com/builds/)), but since the windows Command Prompt sucks ass comfort-wise and scripting-wise, it's recommended to just [[https://docs.microsoft.com/en-us/windows/wsl/install-win10|install Ubuntu as part of the Windows Subsystem for Linux]], and then ''apt-get install ffmpeg''. If you're on Windows, it's technically possible to install ''ffmpeg'' and use it directly ((from https://ffmpeg.zeranoe.com/builds/)), but since the windows Command Prompt sucks ass comfort-wise and scripting-wise, it's recommended to just [[https://docs.microsoft.com/en-us/windows/wsl/install-win10|install Ubuntu as part of the Windows Subsystem for Linux]], and then ''apt-get install ffmpeg''.
  
-If you're on Linux, you know what to do 8-)+If you're on Linux, you already know what to do 8-)
  
 ===== Techniques ===== ===== Techniques =====
Line 16: Line 16:
 ==== Basic conversions ==== ==== Basic conversions ====
  
-''fffmpeg'' is pretty clever, it can correctly guess the codecs and reasonable default settings by the file extension, so all of the following will work as expected (and retain metadata((like ID3 tags and their FLAC, OGG, WAV, etc. equivalents))!):+''ffmpeg'' is pretty clever, it can correctly guess the codecs and reasonable default settings by the file extension, so all of the following will work as expected (and retain metadata((like ID3 tags and their FLAC, OGG, WAV, etc. equivalents))!):
  
 <code bash> <code bash>
Line 60: Line 60:
  
 <code bash> <code bash>
-ls *.jpg | xargs -I xyz echo "file 'xyz'" > list.txt+ls -1 | grep 'jpg$' | xargs -I xyz echo "file 'xyz'" > list.txt
 </code> </code>
  
Line 67: Line 67:
 </code> </code>
  
-It's up to preference, all end up with a list of all JPGs in current directory, in ''list.txt''.+It's up to preference, all end up with a list of all JPGs in current directory, in ''list.txt''(Though the first command can handle a bit more files.)
  
 == 2. list to video == == 2. list to video ==
Line 115: Line 115:
 ''mpdecimate'''s defaults are pretty okay, but the result may not look too good if the frame drops are frequent and long. I've had pretty good results using its ''max'' parameter which limits the amount of frames dropped in a single stretch of video, e.g. ''-vf mpdecimate=max=15'' which drops at most 15 frames (i.e. half a second assuming 30 FPS), meaning interpolation won't happen everywhere and the video will remain faithfully choppy. ''mpdecimate'''s defaults are pretty okay, but the result may not look too good if the frame drops are frequent and long. I've had pretty good results using its ''max'' parameter which limits the amount of frames dropped in a single stretch of video, e.g. ''-vf mpdecimate=max=15'' which drops at most 15 frames (i.e. half a second assuming 30 FPS), meaning interpolation won't happen everywhere and the video will remain faithfully choppy.
  
-''minterpolate'', on the other hand, defaults to semi-smart motion compensated interpolation, and that //might// just be what you want, but it generally gives pretty funky results. Fortunately, it also has a "blend" mode, which just averages the start and end frames and crossfades them, which gives much more agreeable outputs for simple frame drop situations.+''minterpolate'', on the other hand, defaults to semi-smart motion compensated interpolation, and that //might// just be what you want, but it generally gives pretty funky results. Fortunately, it also has a "blend" mode, which just averages the start and end frames and crossfades them, which gives much more agreeable outputs for simple frame drop situations. It is also generally much faster, I was getting near or above real-time speeds using "blend", whereas motion compensation dropped the processing speed to 0.01x.
  
 **TL;DR**: Full command(s) including the filter pipeline: **TL;DR**: Full command(s) including the filter pipeline:
Line 129: Line 129:
 ffmpeg -i choppy_video.mp4 -vf mpdecimate,minterpolate smoother_video.mp4 ffmpeg -i choppy_video.mp4 -vf mpdecimate,minterpolate smoother_video.mp4
 </code> </code>
 +
 +ffmpeg - skipping - remove duplicate frames after effects
 +
 +=== what is `N/FRAME_RATE/TB` ===
 +
 +  *  except the use of `FRAME_RATE` variable the `N/FRAME_RATE/TB` is equal to the example below from ffmpeg documentation ([source](https://ffmpeg.org/ffmpeg-filters.html#Examples-123))
 +  * 
 +<code>    
 +    > Set fixed rate of 25 frames per second:  
 +    > `setpts=N/(25*TB)`
 +</code>    
 +
 +  *   the math behind it perfectly explained in What is video timescale, timebase, or timestamp in ffmpeg? 
 +       it basically calculates timestamp for each frame and multiplies it with timebase `TB` to enhance precision
  
 ==== mp4 compatibility ==== ==== mp4 compatibility ====
Line 151: Line 165:
  
 No silver bullet, you'll just have to try different things for different devices. A database of crappy players and appropriate ''ffmpeg'' settings would be great. No silver bullet, you'll just have to try different things for different devices. A database of crappy players and appropriate ''ffmpeg'' settings would be great.
 +
 +
 +==== random ====
 +
 +https://ottverse.com/ffmpeg-drawtext-filter-dynamic-overlays-timecode-scrolling-text-credits/
 +
 +===== Other cheatsheets =====
 +  * [[https://gist.github.com/steven2358/ba153c642fe2bb1e47485962df07c730|FFmpeg cheat sheet]]
 +  * [[https://devhints.io/ffmpeg]]
 +  * [[https://gist.github.com/nickkraakman/e351f3c917ab1991b7c9339e10578049|FFmpeg Cheat Sheet for 360º video]]
ffmpeg.1594140650.txt.gz · Last modified: 2020/07/07 18:50 by sdbs