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 |
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 ===== |
==== 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> |
| |
<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> |
| |
</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 == |
''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: |
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 ==== |
| |
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]] |