用户下载的视频标题里有个斜杠,保存直接失败;macOS 上传的文件名在 Linux 上"明明一样却不相等";Windows 上文件名结尾的空格被系统偷偷删掉。这篇把我这三年给文件名"打补丁"的全过程写出来,包括最终那个能用的 sanitize 函数。
阅读全文
技术博客
分享开发技巧、工具使用教程与行业动态
客户问"要不要上 AV1 省带宽"。我没敢直接答,跑了一轮实测:同画质下 AV1 比 H.265 省 22%,但编码慢 6 倍,而且老设备解码不了。这篇写完整的实测数据、SVT-AV1 与 libaom 的参数怎么调,以及我们最后的决策——不是"用不用",而是"给谁用"。
阅读全文
做 HLS 的时候我默认用 TS 切片,直到要做低延迟才发现必须换 fMP4。一开始我不理解为什么——TS 不是用得好好的吗?后来算了一下封装开销、看了 fMP4 的结构,才明白这不是赶时髦:一份文件同时给 HLS 和 DASH 用,省掉一半存储和 CDN 缓存。这篇写 fMP4 的结构、CMAF 是什么、以及低延迟怎么来的。
阅读全文
为了提速加了 Redis 缓存,结果踩了三个坑:一个 key 永远不命中(穿透)、一个热点 key 过期瞬间把数据库打垮(击穿)、一批 key 同时过期导致雪崩,还有一个"数据更新了页面还是旧的"(一致性)。这篇写清楚这四个问题的成因、解法,以及我们在 Django 里的落地代码。
阅读全文
客户给的 HDR 素材,我们按普通流程转完,画面发灰发暗。折腾了一轮才搞明白:HDR 不是"亮度更高",而是换了传输曲线和色域,转 SDR 必须做 tone mapping。这篇写 HDR 的三个要素、PQ 与 HLG 的区别、ffmpeg 的 tone mapping 参数怎么调,以及交付前的检查清单。
阅读全文
用 Real-ESRGAN 处理一批老素材,客户说"人脸变得很奇怪"。我一看确实:超分"生成"出了不存在的纹理,人脸细节被重构成另一张脸。这次之后我建了一套超分的质量控制流程和成本估算方法。这篇写超分到底在做什么、会产生哪些伪影、哪些内容绝对不能超分,以及做完之后的验收流程。
阅读全文
后台的任务列表页越点越慢,最后要 8 秒才出得来。我跟着 PostgreSQL 的慢查询日志一路查下去,发现是索引缺失、N+1、大偏移分页和批量写入四个问题叠在一起。这篇把排查工具、EXPLAIN 怎么读、以及每一处改动的效果都写下来。
阅读全文
客户要"电影感",我用 eq 滤镜调饱和度对比度,怎么调都不对。后来拿到一个 .cube 文件,用 lut3d 一加载就对了。这中间踩了三个坑:Log 素材要先做色彩空间转换、8bit 上调色会断层、以及"LUT 太重怎么减强度"。这篇写完整工作流,包括怎么用波形图和矢量图验证。
阅读全文
同一个 mp4,电脑上一切正常,客户说手机上打不开、电视上黑屏、微信里转圈。我拿着 ffprobe 的输出一项项对照设备规格,才发现问题出在 10bit、HEVC、profile level 这些"电脑播放器全都支持、移动设备各有各的脾气"的参数上。这篇写完整的排查流程和一份"最保守兼容"的参数模板。
阅读全文
worker 数我是照着"CPU × 2 + 1"抄的,结果高峰期 502 不断,改配置重启又必然中断几秒。压测了一轮之后我才搞清楚:worker 数、worker 类型、超时和优雅重启是四件不同的事。这篇写完整的调优过程、实测数据和我们现在的零停机发布流程。
阅读全文