FFmpeg is powerful technology, yet approaching it can be very daunting. So we decided to create an approachable guide for intermediate devs.
Feedback is very much appreciated.
Not to criticize the guide, it's brilliant!
If asked for improvements, I'd suggest adding a table of contents.<p>Slightly off topic, but the guide does suggests reading time. It's interesting that people keep using read estimates for technical/scientific/professional documentation. This one says it's a 58 minute read. Not 1 hour, not 59 minutes, but spot on 58 minutes.<p>Now, I'm not a novice in using ffmpeg and I think I'm at least an average person. I can tell you that it would take me a _lot_ longer to read this guide in a meaningful manner.<p>But, a brilliant guide. I'm definitely going to use it to expand my ffmpeg knowledge.
Wow are you the guy from: "Interview with FFMPEG enthusiast in 2022": <a href="https://www.youtube.com/watch?v=9kaIXkImCAM" rel="nofollow">https://www.youtube.com/watch?v=9kaIXkImCAM</a> ? :)
There's a myriad of ffmpeg examples on the web so I wish there was something like <a href="https://explainshell.com/" rel="nofollow">https://explainshell.com/</a> specifically for ffmpeg (including parsing filters). I can imagine it could even include visualization, e.g. a two-way mapping between CLI parameter and on-screen rectangle for picture-in-picture/watermark removal coordinates, cut marks in video timeline, tree of input/output streams, tree of filters... so a CLI parser+generator.
While, I’ve been collecting useful one-liners for some time, there was always friction to apply them: search my notes, copy, paste, edit, etc.<p>As of recently, I finally landed on a solution I feel very comfortable with:<p>- Write templated one-liners (could be longer scripts too), automatically replacing which files to apply them to.<p>- Wrap the one-liners with a tiny elisp function with a meaningful name.<p>- From Emacs, I can now easily apply these wonderful one-liners to either the current file or a list of them, without having to remember details nor tweak the commands. Fuzzy searching to apply commands works great.<p>You can see an ffmpeg example in a recent post <a href="https://xenodium.com/seamless-command-line-utils" rel="nofollow">https://xenodium.com/seamless-command-line-utils</a>
I can only recommend this tool to help you build pipelines in a visual way:
<a href="https://ffmpeg.guide" rel="nofollow">https://ffmpeg.guide</a><p>Not affiliated, just a happy user
Thanks so much for crafting and sharing this guide.<p>Echoing some of the cookie comments[0], another issue with the popup is that in macOS Safari 16.1 with an adblocker extension enabled, the page looks like this: <a href="https://imgur.com/a/0SZRSTw" rel="nofollow">https://imgur.com/a/0SZRSTw</a> . As noted in the screenshot, the five various buttons to accept, reject, save, etc. do not work to dismiss the notice.<p>[0] <a href="https://news.ycombinator.com/item?id=33774040" rel="nofollow">https://news.ycombinator.com/item?id=33774040</a>
A guide like this is always welcome. My biggest struggle with FFmpeg was to find clear documentation, tutorials and examples about API usage. All the guides out there (including this one) is for the command line version, or if the tutorial focuses on the API, it's probably outdated. Every time I have to go back and do something with FFMPEG I have to just plainly read the code of FFPlay to "catch-up" with the workflow.<p>And don't get me started on that time I had modify the FFmpeg libs to provide support and implement an H264 encode/decoder on a custom architecture!!
I'm on a project right now where I'm using FFMPeg.<p>It turns out that for the Apple stuff it loses a lot of color information. Compressor captures this color information by using ICC profiles that it generates from (the quick time headers of?) a .mov file in non obvious ways. Gamma, contrast, and chroma are lost in transit.<p>This is perhaps not a huge deal since we're dealing with a proprietary file format anyway, but it does mean I had to stop using FFMPeg in the project, which was a shame.
'The term "codec" is a mix of the words "coder & encoder". Those are the magic parts before and after the "decoded frames".'<p>I thought "codec" was a portmanteau of <i>co</i>der & <i>dec</i>oder. A coder and encoder are the same thing.
Using ffmpeg to stream for gaming: <a href="https://drewdevault.com/2022/10/12/In-praise-of-ffmpeg.html" rel="nofollow">https://drewdevault.com/2022/10/12/In-praise-of-ffmpeg.html</a>
This is a very comprehensive guide with actually reasonable examples and suggestions!<p>I think there's really not much more to add here, because eventually you'll be deep in the rabbithole that is FFmpeg, and you'll be browsing mailing lists, visiting Stack Exchange, etc. to get help.<p>Cross-referencing the FFmpeg wiki wherever possible would be good, as there is so much outdated information on the Internet, and at least the wiki is a somewhat up-to-date reference.
Sorry, I didnt find the guide very useful-- too much info, it looks like its written for PhD students rather than averge users.<p>Sometime ago I bought a book "FFMPEG Zero to Hero" by Nick Ferrano-- I recommdend that instead. The book contains more practical info tahts immeditely useful, but not always easy to find online
Slightly off-topic: Recently I needed a way to add chapter information to 200 or so local MP4 video files of varying codecs (though mostly H264). It wasn't hard to get the job done with FFmpeg, though I was very surprised that adding such simple metadata to an MP4 container, with `-codec copy`, takes a surprisingly long time (around 5 or so minutes for an ~8GB file). I don't know why that is, as I am unfamiliar with the MP4 container format's internals, though I do assume that no re-encoding/transcoding was done (again, due to -codec copy). And it most certainly wasn't a simply copy-paste of the video data into a new file either, as that would've been way quicker. Nevertheless I just let the script do its thing overnight.
I really appreciate this guide. I use FFmpeg on the daily and still frequently have to glance at guides and whatnot (for things I haven't scripted), to the point that I needed to find a good frontend. The best I have come across, for macOS anwyay, is ffWorks [1].<p>I bought it earlier this year and it has been a game-changer for me when I need to do certain types of conversions that are just cumbersome for me to look up or that I don't have scripted.<p>So as much as I appreciate the guide, for anyone (on Mac) looking for a front-end, ffWorks is what you want. Well worth the money for heavy users.<p>[1]: <a href="https://www.ffworks.net/" rel="nofollow">https://www.ffworks.net/</a>
I haven't read through this entire thing (yet), just skimmed it to get a feel for it. I've been incorporating ffmpeg into projects and using it for personal homelab use for over a decade now and this has to be the most complete guide I've seen on the subject. It's extremely thorough but seems to be written in a way that a beginning could pick up and use. Massive props to the author(s) here; this was no easy task and developers everywhere will benefit from it. I've shared it with my team in the hopes that it will make future projects easier.
This is all very interesting, but I don't want to know all of this information, and I don't want to have to know it. What I need is some kind of wrapper with sane defaults, such that when I perform some kind of operation on a video file, I only have to specify the parameters that matter to me. The last time I tried to work like that, the bitrate was unusable afterwards. I don't want to have to think about the bitrate to create a clip of a video.
Hey I love your effort. Unfortunately ffmpeg is not a tool that can be properly demystified in one post. Other's have already suggested this but on a desktop browser this guide desperately needs a more visible ToC.<p>Also one thing I did last year was add floating text to videos with ffmpeg's drawtext plugin, something I think people often want to do. For example adding reactions, or subs. I'd very much appreciate more guides on how to do that.
ooof! That's really good work. As suggested, a link to a navigation index would be nice. Would make it a separate html page with a big fat link at the start of your guide, or use an html table as layout and no, html table as layout are _not_ harmful.<p>Something which is worth of interest: AMD is supposed to have published AV1 hardware encoding/decoding ffmpeg code (this one is "oooof!" too... if it is cross-platform, or at least elf/linux).
See also: <a href="https://wiki.archlinux.org/title/FFmpeg" rel="nofollow">https://wiki.archlinux.org/title/FFmpeg</a>
The ultimate guide for me would include how to extract a short clip from a longer video specifying the start time in (minutes:)seconds and the duration or, alternatively, stop time.<p>Actually I created a GUI to do exactly that, calling the ffmpeg executable.<p>So? It doesn't work as it should. Depending in what point you start, you will find a very noticeable interval with black video. I do understand why it happens, but that's not the point.
I wrote two scripts for ffmpeg, one to concatenate reddit video of different formats, with or without audio, and another to create a 2 by 2 mosaic video with xstack.<p>It works pretty well.<p>Only limitation is caused by python and windows, because my command line is too long (a lot of video paths, and a lot of filters).
What I use FFmpeg for is to chop large videos and I love it for that, it’s very fast. But Im no expert so I just created a user friendly batch file to set the in and outs and file input and output and a simple help with examples when I forget the params.
Get introduction to ffmeg, but it misses a lot of pro use cases.<p>Mine would be to find out, if ffmpeg can create a chunked stream as an output (basically one like most TV stations use nowadays) which outputs parts and a updates m3u8 playlist with it...
Anyone else get five whole screens (1440p) of nothing but cookie shenanigans?<p>I thought it was the wrong link at first. Clicking reject all does nothing.