M
Multimedia Mike
multimedia.cx · Personal blog · on HN since 2009
Multimedia Mike writes about multimedia codecs, FFmpeg, reverse engineering, retro consoles like the Dreamcast, and single-board computers.
What HN saysHN cites it as evidence that YouTube uses FFmpeg, and for older notes on game console formats and compression.
23HN people shared it
9linked it in comments
17stories submitted
312story points
3 years agolast shared
2009people per year2026
Most-shared posts
- 1Google’s YouTube Uses FFmpeg5 people · 92 points · first shared 2011 · 40 comments on HN
- 2Asm.js performance closing in on GCC (Android and Desktop)2 people · 10 points · first shared 2014 · 2 comments on HN
- 3My SBC Collection1 people · 71 points · first shared 2023 · 48 comments on HN
- 4VP8: The Savior Codec1 people · 56 points · first shared 2010 · 22 comments on HN
- 5Understanding the Dreamcast GD-ROM Layout1 people · 53 points · first shared 2022 · 5 comments on HN
- 6Xbox Sphinx Protocol1 people · 13 points · first shared 2013 · 1 comments on HN
- 7ISO-9660 Compromise, Part 2: Finding Root1 people · 4 points · first shared 2021 · discussion on HN
- 8The Big VP8 Debug1 people · 2 points · first shared 2011 · discussion on HN
- 9Legal fights between forks on FFmpeg logo1 people · 2 points · first shared 2011 · discussion on HN
- 10Decoding VP8 On A Sega Dreamcast1 people · 2 points · first shared 2011 · discussion on HN
- 11Running Windows XP in 20161 people · 2 points · first shared 2017 · discussion on HN
- 12Reverse Engineering Clue Chronicles Compression1 people · 1 points · first shared 2019 · discussion on HN
- 13What Every Programmer Should Know (multimedia edition)1 people · 1 points · first shared 2012 · discussion on HN
- 14Looking at today's VP8 open-sourcing1 people · 1 points · first shared 2010 · discussion on HN
- 15Evolution of Multimedia Fiefdoms1 people · 1 points · first shared 2014 · discussion on HN
What HN people wrote when they linked it
canucker2016 · 2023-12-12
Google's use of ffmpeg: https://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/
For encoding, recently, they've built their own ASIC to deal with H264 and VP9 encoding (for 7-33x faster encoding compared to CPU-only): https://arstechnica.com/gadgets/2021/04/youtube-is-now-building-its-ow…
anonacct37 · 2023-10-08
As someone who once had access to internal fleetwide profiling information, yes.
There is older evidence based on quirks in encoding. https://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/
randomifcpfan · 2023-02-04
Circumstantial evidence that they used to: https://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/
These days they use special hardware accelerators: https://gwern.net/doc/cs/hardware/2021-ranganathan.pdf
pvg · 2017-03-30
No, compression was used extensively. Just often hand-rolled and for specific things. https://multimedia.cx/eggs/nes-compression/ has a link to an RLE implementation used in some Zelda game.
samworm · 2014-01-10
It is interesting that YouTube isn't mentioned in this blogpost, despite there being good evidence that ffmpeg has been used there[1].
The fuzz testing they mention is based around constructing malformed (or at least "exotic") input files and then monitoring for failures... ie simulating exactly the kind of attack someone might use against YouTube's transcoding infrastructure.
[1] http://multimedia.cx/eggs/googles-youtube-uses-ffmpeg/
astrange · 2013-05-31
> JPEG encoding, for instance, utilizes an O(n*log(n)) frequency analysis algorithm called a Discrete Cosine Transform.
Scuse me?
JPEG's frequency transform is a set of fixed linear transforms and is always 8x8, so this step is just O(n) of the area of the image. Also, it's not really "a DCT", just any approximation that will look good when run through the approximation of the opposite transform at the other side.
See http://multimedia.cx/eggs/dct-pr/.
The compression steps after are the most difficult, since they have poor ILP and can involve division. But JPEG is really simple, it's not a burden these days.
One interesting part of it is minimizing the memory use of your application, by using the smallest possible ring buffer for pixels rather than keeping the whole image in memory at once.
woodall · 2010-09-09
For those who didn't know
"black box" reverse engineering - systems are observed without examining internal structure.
"white box" reverse engineering - the inner workings of the system are inspected.
http://www.chillingeffects.org/reverse/faq.cgi#QID188
http://multimedia.cx/eggs/black-box-re/
mikemol · 2010-08-26
It's very much a case-by-case thing. On my quad-core Phenom 9650, with 8GB of RAM, I tried building FFMPEG using -j1 through -j10. Build times dropped until I got to -j9, which meant that, for my system, the fastest build occured when I ran -jN where N was 2x my CPU cores. This is the only place I documented it: http://multimedia.cx/eggs/ffmpeg-and-multiple-build-threads/#comment-1…
DarkShikari · 2009-07-25
Some various complaints:
1. http://hardwarebug.org/
Mans covers a lot of incredible retardation here, particularly on ARM and PPC platforms, such as cases where GCC generates 2-3 times the number of instructions necessary for no good reason.
1b. http://x264dev.multimedia.cx/?p=62#comments
Until extremely recently, GCC's handling of multiplications of non-native types has been hilariously bad, up to and including loading the value zero into a register and multiplying by it.
2. General bugginess all over the place, particularly with non-x86 platforms. The number of failed unit tests for ffmpeg with gcc 4.4 on PPC64 was staggering.
Of course, commercial compilers are buggy as well, so this is not really exclusive to GCC; the latest ICC miscompiles large chunks of ffmpeg and Mans has been quite busy submitting bug reports for armcc.
3. Tendency to get worse with every new release; this trend was finally reversed with 4.3 and 4.4, the latter of which was the first compiler to beat 2.9.5 in performance (in ffmpeg, at least):
http://multimedia.cx/eggs/last-performance-smackdown-for-awhile/
4. Tendency to declare obvious bugs to be not bugs; for example, failures in the register allocator for inline assembly in which it couldn't allocate 7 registers for the inline assembly despite 7 registers being available (but only inconsistently, on some platforms and some versions, for no apparent reason). Don't have links to the gcc bugtracker on me for these.
5. Incredibly…