深夜提醒

现在是深夜,建议您注意休息,不要熬夜哦~

🏮 🏮 🏮

新年快乐

祝君万事如意心想事成!

share-image
中
ESC

FFmpeg 9.0.1 Codename Lei: Remembering Lei Xiaohua, the Man Who Led Me Into FFmpeg

English 阅读中文版

The Pause Brought by a Screenshot

This morning, scrolling through the Releases page on the FFmpeg website, I saw that the latest stable release of the 9.0 branch had been marked:

FFmpeg 9.0.1 Lei 官网 Release 页面

The page reads FFmpeg 9.0.1 “Lei”, released 2026-08-12. This codename wasn’t chosen at random — it commemorates the late young Chinese developer and PhD student at Communication University of China, Lei Xiaohua. He is better known by his nickname, “Lei Shen” (Thor).

To others, Lei may be just another version codename; but to me, the name is far too concrete. It instantly pulled me back more than a decade, to the me who was still converting videos with Format Factory and knew nothing about codecs.

In the Pre-AI Era, You Could Actually Learn Things on CSDN

My first systematic encounter with FFmpeg was through the article series Lei Shen wrote on CSDN.

That was the early, pre-AI era. Article quality on CSDN was generally decent back then, gathering a large crowd of developers willing to write seriously. Lei Shen was among the very best of them. His FFmpeg series started from basic concepts like filters, codecs, and containers, and went on to RTMP pushing, stream-pull testing, and source-code analysis — richly illustrated, peeled apart layer by layer with great clarity.

Before reading his articles, all I could do was transcode with Format Factory. Click a button, wait for the progress bar to finish, with no idea what was happening behind the scenes. After reading his blog, I began to understand: transcoding isn’t just “changing the format,” but a whole pipeline of decoding, resampling, re-encoding, and muxing; livestream latency isn’t just “slow network,” but trade-offs across GOP, buffering, and every layer of the protocol stack.

When I later worked on CDN, live-stream push/pull, video slicing, HLS encryption, and burn-in HUDs, the foundation all grew out of those articles of his. On August 1, when I wrote “Burning Workout Data Into Video”, I even made a point of mentioning: “Speaking of FFmpeg, my first systematic exposure was more than a decade ago, reading CSDN blogger Lei Xiaohua’s article series.” Little did I know that just over half a month later I’d see the news that the FFmpeg project had named the 9.0 series “Lei” on August 4. It felt like some kind of echo across the air. I hadn’t even known a new version had been released before that.

What a Loss — Such Promise

Lei Shen was still very young when he passed. Given the quality of his output and the depth of his digging, if he had kept writing, he surely would have left much more behind. Every time his name comes up, I think: what a loss — such promise.

This FFmpeg 9.0.1 codename, whatever the internal community debate about naming rules may be, at least gives people like me — whom he guided through the door — a reason to stop and pay tribute. Code iterates and people leave, but knowledge and tools remain, to be combined, remade, and passed on by the next wave in new ways. The workout-data burn-in script, the Rust HUD renderer, and the HLS encryption upload tool I’m writing now all stand on the shoulders of the giant called FFmpeg. And my own shoulders were first lifted up by Lei Shen.

9.0 Is What a “Major Release” Should Look Like

FFmpeg 9.0 is no minor patch-up. It’s a major bump — all seven core libraries advanced their major version numbers:

  • libavutil 61
  • libavcodec 63
  • libavformat 63
  • libavdevice 63
  • libavfilter 12
  • libswscale 10
  • libswresample 7

This means the ABI changed across the board, and every application and distribution depending on FFmpeg has to recompile and adapt. This kind of “great purge” is something FFmpeg only allows itself in major versions.

The volume of changes this time is substantial: four and a half months, over 160 authors, more than 2,200 commits, nearly 85,000 lines added and 33,000 deleted. The numbers alone tell you this is a release long in the making.

Several Changes That Caught My Eye

1. The swscale rewrite

This may be the most far-reaching — yet least conspicuous on the feature list — piece of work in 9.0. swscale is the module in FFmpeg responsible for pixel format conversion and scaling, and over the past twenty years it accumulated a mass of hand-written code for specific formats. During this cycle Niklas Haas poured more than 300 commits into libswscale, refactoring it from a “pile of format-specific code” into a system built on basic operations (read, swizzle, linear transform, scale, pack) + an optimizer + backends.

In 9.0 this new architecture can already be invoked explicitly by users: a new SwsBackend selector supports a C reference implementation, x86 SIMD chained kernels, AArch64 NEON chained kernels, and a Vulkan SPIR-V backend — the same conversion graph can run on either CPU or GPU.

What I appreciate even more is the correctness engineering: constant computation switched from floating point to exact 64-bit rational arithmetic; with SWS_BITEXACT enabled, even the Vulkan backend uses the NoContraction decoration to forbid the GPU from auto-fusing multiply-adds. For people doing video archiving and transcoding, this “reproducibility” matters more than raw speed.

2. Native support for animated WebP

Ticket #4907, opened in 2015, was finally closed out by Ramiro Polla. For ten years countless people asked “why does FFmpeg only decode the first frame of a WebP” — 9.0 now decodes animated WebP correctly.

3. Dolby Vision Profile 7 splitting

Dolby Vision Profile 7, used on UHD Blu-ray, interleaves the base layer and enhancement layer within a single HEVC stream. The new dovi_split bitstream filter in 9.0 can split them apart, while libavformat also establishes a Dolby Vision stream group, so the signal isn’t lost during demux, split, and remux. For people doing Blu-ray encoding and metadata processing, this chain is finally complete.

4. TLS certificate verification by default

This one deserves to be singled out. FFmpeg announced it back in 8.0, and 9.0 makes it official: the peer TLS certificate is verified by default. If your scripts had been scraping by on “ignore certificate errors,” they will now break. Painful in the short term; the right thing in the long run.

5. Other odds and ends worth noting

  • HE-AAC 960-sample frame decoding, supporting DAB+ digital radio
  • Playdate handheld video encoder/muxer (400×240, 1-bit — even the little yellow crank-handheld can play video now)
  • ONNX Runtime DNN backend, with CUDA and DirectML support
  • A pile of old things removed: the standalone CELT decoder, the Sonic codec, OpenMAX, the NPP filter, legacy NVENC preset aliases…

From Lei Shen to My Video Pipeline

After reading the changelog, I instinctively thought about how I use FFmpeg today.

That workout-video HUD burn-in pipeline from a while back is essentially everyday FFmpeg usage stacked up:

ffmpeg -y -i 1.MP4 \
-framerate 1 -start_number 0 -i hud_%05d.png \
-filter_complex "[0:v]scale=-2:1080[vm];[1:v][vm]scale2ref[hs][vs];[vs][hs]overlay=0:0[v]" \
-map "[v]" -map 0:a:0 \
-c:v libx264 -preset veryfast -crf 23 -c:a aac -b:a 128k \
-f hls -hls_time 120 -hls_playlist_type vod \
-hls_key_info_file keyinfo.txt \
-hls_segment_filename seg_%05d.ts index.m3u8

In this one command — scale2ref, overlay, HLS, AES-128, multi-input mapping — everything grew bit by bit from the foundation laid by Lei Shen’s articles back then. The live-stream push/pull, slicing and encryption, and burn-in HUD work I did later never actually left that origin point.

That FFmpeg 9.0’s codename is Lei feels, to me, like saying: the person who guided me in back then now has his name written into this project’s milestones. The open-source community is sometimes strange like that — a person’s traces live on in ways you never expect.

Not Only Lei Shen

Actually, Lei Xiaohua is not the only technologist who has left us in recent years.

Zuo Er Duo Hao Zi (Chen Hao) died of a sudden heart attack in 2023 at just 47. His blog “CoolShell” was where many people learned computer fundamentals and engineering thinking; he later founded MegaEase to build cloud-native infrastructure. Not everyone agreed with his articles and opinions, but his passion for technology and his blunt advice to young people influenced a whole crowd of programmers.

Situ Zhengmei (Zhong Qincheng) died of illness in 2020 at just 36. In front-end circles hardly anyone doesn’t know avalon.js — he truly dug deep into the DOM, MVVM, and JavaScript frameworks. On the way into the trade, many front-end engineers read his blog or his source-code analyses.

And still more left no names behind — the peers who departed early from long-term high-intensity work and bodies burned out. They might be the colleague at the next desk over, the author of some niche tool on GitHub, or the tech lead still replying to messages deep into the night. They get no trending topics, no memorial repositories, yet they too are part of what this industry consumes.

Whenever I think of these people, I don’t think first of their technical achievements, but of a number: 26, 36, 47. All far too young.

It’s a strange thing to say, but it seems that once you’re over 35, people despise you as old; only when you die does everyone say: how could someone so young be gone — what a loss. Between the industry’s contempt and its regret lies only one life.

Final Words: Beyond the Code

Every time Lei Shen’s passing is mentioned, one topic is unavoidable: your body is the capital of the revolution.

The industry climate these past few years hasn’t been good. People who write code seriously and make deep content don’t necessarily get the exposure and rewards of those hyping concepts; many positions treat the human body as a consumable, and with long-term high-intensity operation, cases of sudden health crises keep occurring. Bad money driving out good isn’t just a content-platform phenomenon — it’s in the workplace too.

In truth, similar problems aren’t limited to the workplace. In many organizations, once the hierarchy becomes unequal, the weaker side easily gets treated as a resource for hitting targets rather than an individual with limits. Time, body, and emotions are all computed into output — only the person doesn’t count. This phenomenon doesn’t pick its setting; it only checks whether power is out of balance.

All the more in times like these must I remind myself: don’t exchange your health for short-term KPIs.

FFmpeg 9.0.1 is a solid release. A fully broken ABI, the swscale rewrite, the Vulkan backend, the completed Dolby Vision chain, default TLS verification… these changes will keep the downstream ecosystem busy digesting for months. But for ordinary users, after upgrading it will most likely just feel “faster, more stable, with more supported formats.”

And that codename, Lei, will at least make me look one extra time during this upgrade.

Not to chase the new, but to remember: some guides, though no longer in the group chat or the commit log, have names that deserve to be remembered by a release. And we who come after — besides writing good code — must also live well ourselves.

文章作者:阿文
文章链接: https://www.awen.me/post/9608cc08.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客!

评论

0 条评论
😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️✋ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐⛎ ♈♉♊ ♋♌♍ ♎♏♐ ♑♒♓ 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘❌⭕ 🛑⛔📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭❗ ❕❓❔ ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️✅ 🈯💹❇️ ✳️❎🌐 💠Ⓜ️🌀 💤🏧🚾 ♿🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️
加载中...

留言反馈

😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️✋ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐⛎ ♈♉♊ ♋♌♍ ♎♏♐ ♑♒♓ 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘❌⭕ 🛑⛔📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭❗ ❕❓❔ ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️✅ 🈯💹❇️ ✳️❎🌐 💠Ⓜ️🌀 💤🏧🚾 ♿🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️