- 博客(77)
- 收藏
- 关注
原创 CRF 不是万能钥匙:ffmpeg 码率控制、两遍编码与码率分配实战
事情的起点是一个很普通的客户问题:“为什么你们转出来的 1080p 电影是 800M,隔壁服务商是 4G?是不是你们偷偷降了码率?我第一反应是"没降啊,我们一直用-crf 23但话到嘴边又咽回去了——因为我发现自己其实也说不清-crf 23到底意味着多大的码率、多大的文件。后来我花了一周,把 ffmpeg 里几种码率控制模式从头捋了一遍,又拿同一段素材跑了十几组对比。CRF不是万能的,CQ不是CRFCBR和VBR是两回事,2-pass才是精确控制大小的终极手段。用错模式,轻则浪费带宽,重则画质崩坏。
2026-10-29 16:17:17
201
原创 一个 m3u8 文件里藏了多少坑:HLS 解析、AES 解密与无损合并实战
给下载器加 m3u8 支持的时候,我心里想的是件特别简单的事:读文件 → 拿到一串.ts地址 → 挨个下载 → 拼起来。半小时的活。结果第一个视频就让我改了四个小时:先是段地址 404,一查是相对路径没拼 base;拼上之后下载下来了,合并完却发现是花屏,原来是AES-128加密的段没解密就拼;等解密逻辑写完,又遇到一个 fMP4 的流,EXT-X-MAP的初始化段没下,整条流直接废掉。最后我把 m3u8 翻了个底朝天,才发现它的复杂度全藏在细节里。
2026-10-29 16:16:32
474
原创 开了硬件加速反而更慢:hwdownload/hwupload 的拷贝陷阱与零拷贝实践
我们的转码服务上了 GPU 机器,我把命令改成,满怀期待地跑了一次。scalesubtitles滤镜只能在 CPU 上跑,所以帧必须hwdownload),滤镜处理完再hwupload)给 NVENC。这两次拷贝 + 中间的 CPU 处理,开销比省下的解码时间还大。这篇把这个机制讲清楚:帧到底在哪里、什么时候会被拷贝、怎么避免,以及什么时候干脆别用硬件加速。:硬件加速的三个环节(解码/滤镜/编码)里,——大部分滤镜只有 CPU 实现,一旦用上就必须在显存和内存之间来回拷贝(hwdownload。
2026-10-15 21:05:15
319
原创 怎么知道这次升级没搞坏画质:转码质量回归流水线
有次我们把 ffmpeg 从 5.1 升级到 6.0(为了用新的 AV1 编码器)。升级过程很顺利,测试也过了——我们测的是"能不能转码成功"和"耗时有没有变慢"。半个月后,客户反馈"最近几批视频好像没以前清楚"。我对比了新旧版本转出来的文件,。原因大概是新版本里 x265 的某个默认参数变了(或者 libx265 的子版本变了),而我们的参数里没显式指定那一项。。每次改动之后,画质是变好还是变坏,全靠感觉——而感觉是不可靠的,尤其是这种 1~2 分的细微变化。
2026-10-15 21:04:36
537
原创 上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
那天下午两点零几分,用户在群里问:“下载是不是挂了?我打开站点,页面能开,但一点下载就 502。SSH 上去看,gunicorn 进程还在,CPU 不高,内存正常,磁盘也够——。花了 35 分钟才定位到:数据库连接耗尽了。原因是一条慢查询在高峰时段被放大,请求堆积,用户不断刷新让请求翻倍,最后连接池打满,整个站点的写操作全部卡死。恢复只用了 5 分钟(杀掉长事务 + 重启应用),但事后复盘做了两天。。没有监控、没有告警、日志里也什么都看不出来。
2026-10-15 21:03:19
140
原创 用户说“卡顿“,服务器一切正常:播放质量监测与 QoE 指标
定义:从用户点击播放到画面出现第一帧的时间。目标:< 2 秒(业界常用:< 2s 优秀,2~5s 可接受,> 5s 会明显流失用户)。注意:不是"到canplay",而是到画面真的出来loadeddata或者首帧渲染事件)。
2026-10-15 21:02:29
249
原创 备份没验证过就等于没有:pg_dump、PITR 和我们的第一次真实恢复演练
我们有个跑了两年的备份脚本:每天凌晨 3 点pg_dump,压缩后传到对象存储,保留 30 天。它一直"工作良好"——因为我从不检查。直到有天需要回滚一批误删的数据。我登上去看备份目录,发现,之后每天都是 0 字节。查了半天才明白:三个月前我们给数据库加了张表,备份账号没有那张表的权限,pg_dump从那天起就一直在失败退出——而脚本里没有检查退出码,cron 的报错邮件也早就被忽略了。。我们从来没真的恢复过一次。那次之后我们重做了整个备份体系,并且做了第一次完整的恢复演练。
2026-10-15 21:01:37
168
原创 24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
客户有批 23.976fps 的电影素材,要在 PAL 制式的电视渠道播出(25fps)。(90 分钟变成 86 分 20 秒),而且(音调升高)。客户那边排期按 90 分钟排的,直接对不上。——改变时长(加速)、保持时长(增删帧)、或者生成新帧(插值)。而 24→25 在广播行业有一套约定俗成的做法(加速 4%,音高也跟着升,观众已经习惯了)。:三种转换方式:-rfps(增删帧,,画面可能顿挫)、setpts(改时间戳,,等于加速/减速)、minterpolate(运动补偿生成新帧,最平滑但慢)
2026-10-12 09:51:24
302
原创 接入支付之后我睡不着:异步回调、幂等、掉单与对账的完整方案
一次支付涉及这些步骤:关键点:支付平台的"权威数据源"是它自己那边。你的本地订单只是"待确认"。所以第 6 步的依据只能是:绝不能依据同步返回的参数——那个参数是 GET 请求带回来的,任何人都能构造。我的处理:页面上写"支付结果确认中,请稍候刷新"——因为异步通知可能还没到。前端过几秒再查一次订单状态(轮询),通常 1~3 秒内就能确认。用户体验上的关键:不要在同步返回页写"支付失败",因为它不可靠。写"确认中",然后靠轮询给结果。不验签的回调接口等于公开的后门——任何人 POST 一个 就能白嫖。
2026-10-12 09:50:31
172
原创 一个 4 小时的视频单机转码太慢:切片并行编码与无缝拼接
本文由 VidDown(https://www.viddown.cn)支持。VidDown 是一个免费的在线工具集先做个实测(8 核机器,1080p 素材,libx265 preset slow):8 线程只快了 4.4 倍,效率 55%。而且 preset 越慢(编码越复杂),加速比越差——因为复杂模式下帧间的依赖分析更多。原因是视频编码天然串行:x264/x265 用的是"帧级并行 + 帧内并行(WPP/tiles)",能榨出一些并行度,但有上限。所以我们换个思路:不跟编码器较劲,把任务本身拆开。每个
2026-10-12 09:49:45
166
原创 给自己的视频加一道隐形标记:不可见水印、内容指纹与溯源能做什么
客户是做原创课程的,有天发现自己的视频被整段搬到另一个平台,对方还打上了自己的 logo。他们来找我们:“能不能证明这是我的?(解决发现)和(解决证明)。很多人把它们混为一谈,但原理和用法完全不同。这篇写清楚两者的区别、不可见水印的原理和一个能跑的简化实现,以及。。VidDown 是一个免费的在线工具集不改文件,只对内容算特征(感知哈希),用于"在海量的网络内容里找到跟我相似的"——项目里那篇视频指纹的文章讲过。是把信息(比如分发 ID)到像素里,肉眼不可见,事后能提取出来,用于证明来源。
2026-10-12 09:48:49
524
原创 备份没验证过就等于没有:pg_dump、PITR 和我们的第一次真实恢复演练
我们有个跑了两年的备份脚本:每天凌晨 3 点pg_dump,压缩后传到对象存储,保留 30 天。它一直"工作良好"——因为我从不检查。直到有天需要回滚一批误删的数据。我登上去看备份目录,发现,之后每天都是 0 字节。查了半天才明白:三个月前我们给数据库加了张表,备份账号没有那张表的权限,pg_dump从那天起就一直在失败退出——而脚本里没有检查退出码,cron 的报错邮件也早就被忽略了。。我们从来没真的恢复过一次。那次之后我们重做了整个备份体系,并且做了第一次完整的恢复演练。
2026-10-12 09:44:26
300
原创 字幕做完别急着交付:时间轴、重叠、超长行与乱码的自动检查
我们出了一批带字幕的视频,交付后客户退回来说字幕有问题。这些问题人工看很难发现(尤其是"0.4 秒"这种),但它们会让观众觉得"这字幕做得不专业"。后来我写了个检查脚本,交付前自动跑一遍,输出问题清单。这篇写完整的检查项、行业参考阈值和脚本实现。本文由 VidDown()支持(≥ 0.7~0.83 秒)、(≤ 7 秒)、(中文 ≤ 9 字/秒,英文 ≤ 20 字符/秒)、(中文 ≤ 16~20,英文 ≤ 42)、(≥ 2 帧)、(必须是 UTF-8)、(与音频对齐对比)。
2026-10-09 20:48:35
166
原创 四个机位颜色都不一样:多机位色彩统一的匹配与批量应用
客户一场活动四个机位(两台同型号微单、一台运动相机、一台手机)。。调色师手动统一,一条 2 小时的素材要花半天。我做了自动色彩匹配:以主机位为参考,计算其他机位到参考的"颜色映射",然后批量应用。,而且一致性比人手工调的更好(人调会出现"前半小时和后半小时不一样")。这篇写完整的做法,包括(它对某些色差无效)和(色卡校准)。本文由 VidDown()支持(拍摄时拍色卡,算出精确的校正矩阵/LUT,)>(不需要前期准备,效果够用)>(最灵活,最慢)。自动匹配的核心是。
2026-10-09 20:47:55
224
原创 上传 2GB 文件别让 Django 接:分片上传、对象存储直传与秒传
我们的工具站有几个功能需要用户上传文件(视频处理、PDF 合并、格式转换)。小文件没问题,直到有人传了一个 2GB 的录屏。→→ 保存。后来重做了整套上传:前端切片、并发传、直传对象存储、支持断点续传和秒传。服务端只在最后做一次合并和校验。这篇写完整的方案选择和实现细节。本文由 VidDown()支持:大文件上传不要让应用服务器"中转"。推荐(服务端只签发预签名 URL,字节不经过 Django)。init(创建上传任务)→ 前端切片并发 PUT 到预签名 URL →complete。
2026-10-09 20:47:13
234
原创 自动给视频挑一张能看的封面:帧评分、构图与批量生成
我们有批视频要生成封面图(列表页展示用)。。100 个视频里大概 20 个不能用,得人工重新挑。。改完之后人工干预率从 20% 降到 13%,而且剩下那 13% 是"审美偏好"问题(比如想要特定构图),不是"不能用"。这篇写完整的做法:五个评分维度、权重怎么调、怎么批量跑,以及哪些情况必须人工兜底。本文由 VidDown()支持:核心是:清晰度(拉普拉斯方差)、曝光(亮度分布)、色彩丰富度(直方图熵)、人脸(有无/大小/是否睁眼)、构图(三分法/居中)。
2026-10-09 20:46:31
194
原创 没有原片怎么判断画质:无参考质量评估(NR-VQA)能做什么
自然图像(拍出来的好照片)的统计特性是有规律的——比如相邻像素的归一化亮度(MSCN 系数)服从某种分布(高斯-like)。劣化(压缩、模糊、噪声)会让这个分布"变形"。计算图像的 MSCN 系数(减去局部均值、除以局部标准差);提取这些系数的统计特征(高斯拟合参数 + 相邻系数的相关性);用一个训练好的 SVM 回归模型把这些特征映射成质量分。输出:0~100,越低越好(0 = 高质量,100 = 很差)。需要模型文件:因为是监督学习,需要训练好的模型(OpenCV 提供和。
2026-10-09 20:45:45
373
原创 从视频画面里提取文字:OCR、文字检测与结构化输出
我用"字符级准确率"(识别正确的字符数 ÷ 总字符数)。对于检索用途,这个准确率已经足够(检索只要求"关键词出现在候选集里")。
2026-09-28 23:34:16
374
原创 文件没问题但网页播不了:播放器接入实战与那些“环境问题
有次客户反馈:“视频在你们网页上播不了,一片黑。我把文件下载下来用 VLC、PotPlayer、ffprobe 全查了一遍——。本地播放器一点问题没有。这类"文件没问题但网页播不了"的情况,我后来遇到过十几种,全都是环境问题。这篇把它们整理成一份清单。:浏览器原生<video>只支持——Chrome/Firefox 播 HLS 必须上(基于 MSE)。(m3u8/mp4/ts 的 Content-Type 错了播放器直接拒绝)、(跨域要,带凭证时不能用)、
2026-09-28 23:33:31
206
原创 交付前的最后一道关:视频自动验收清单与脚本
用 JSON 描述"这次交付要满足什么""name": "客户A-课程交付-v2",},"video": {},"audio": {},},不同客户/不同项目用不同的规格文件,放在specs/目录里版本管理。换客户只要换规格文件,不用改脚本;规格变更有记录(Git);可以直接把客户的验收文档翻译成规格文件。
2026-09-28 23:32:42
236
原创 十年后还能打开吗:视频长期归档的格式选择、校验与迁移
—但它是防范"勒索软件加密了你所有在线副本"和"误删"的唯一手段。云存储的版本控制也能起到类似作用(开启版本保留 + 对象锁)。
2026-09-28 23:31:59
276
原创 # VP9 还是 H.265?一次压缩选型翻车后的复盘
去年做存储优化,我面临一个选择:同样一部 1080p 电影,用 VP9 还是 H.265(HEVC)压?当时拍脑袋选了 H.265,结果在和上连吃两记闷棍。这篇文章把那次选型的前因后果摊开,给同样纠结的人省点时间——参数表网上到处是,但"为什么选错"的经验很少人写。
2026-08-26 14:54:28
256
原创 用 yt-dlp 把 B 站合集扒成“带章节“的文件名(一篇讲透)
说实话,B 站合集(以前叫视频列表、频道合集)用浏览器插件一个个点,几百个视频能点到手抽筋。我真正想要的是:一行命令把整季扒下来,文件名里带序号、带分 P 标题,最好弹幕、封面、清晰度自选也一并到位,丢进播放器能按顺序连播。这篇文章不打算只给你一条命令,而是把我和 B 站斗智斗勇半年攒下的全套配置、参数含义、以及各种诡异报错讲透。先声明:下自己买过的课程、UP 主标明可转载的内容完全没问题;扒别人原创合集拿去二传赚钱,不地道也违规,自己把握分寸。下面只谈技术。
2026-08-26 14:52:59
463
原创 下载的视频打不开?moov atom 丢失、索引损坏——视频文件修复的完整指南
你下载了一个视频,进度条跑满了 100%,文件大小也正常——但双击打不开。播放器要么直接报错,要么进度条能拖但画面不动。你重新下载了一遍,还是同样的问题。这不是下载的问题,是。最常见的原因是 MP4 文件的 moov atom(元数据索引)丢失或放在了文件末尾。这篇文章讲清楚视频文件的内部结构、常见的损坏类型、以及每种情况的修复方法。:MP4 文件由多个"盒子"(atom/box)组成,最关键的是 moov(元数据)和 mdat(媒体数据)。
2026-08-11 14:46:51
612
原创 抖音为什么总知道你爱看什么?短视频推荐算法的技术内幕
你刚在抖音上搜了一下"露营装备",接下来三天你的推荐页全是帐篷、睡袋、户外炉具。你不禁想:它怎么知道我在想什么?其实推荐系统不是什么读心术,而是一套数学驱动的工业流水线——召回、排序、重排,三大环节环环相扣。这篇文章把短视频平台的推荐算法从原理到工程实现拆开来讲:协同过滤怎么找"和你相似的人",深度学习怎么预测你会不会看完这个视频,以及为什么你越刷越停不下来。:推荐系统 = 召回(从海量视频中筛出几百个候选)+ 排序(用深度学习模型预估你对每个候选的点击率/完播率)+ 重排(打散同类内容、插入广告、去重)
2026-08-11 14:38:46
570
原创 一个视频从服务器到你屏幕,中间经历了什么?聊聊 CDN 架构与视频分发全链路
你点击播放按钮,零点几秒后画面就出来了。这短短几百毫秒里,一个视频文件穿越了 DNS 解析、GSLB 调度、边缘节点命中/回源、TCP 握手、TLS 加密、HTTP Range 请求……背后是一整套全球分布的在协同工作。本文把视频分发的完整链路从头拆到尾,并深入 CDN 的调度算法、缓存策略和成本优化。:CDN 不是一台服务器,而是一个全球分布的缓存网络。核心架构:GSLB(全局负载均衡)把用户调度到最近的边缘节点 → 边缘节点有缓存则直接返回(命中),没缓存则回源拉取 → 逐级缓存到区域节点和边缘节点。
2026-08-06 13:33:55
365
原创 为什么视频看着看着声音就对不上了?深入理解音视频同步与 PTS/DTS 时间戳
你有没有遇到过:下载的视频播到一半,嘴型开始对不上声音;或者用剪辑软件导入一个视频,时间轴显示的长度和实际播放不一样?这些问题的根源都是出了问题。PTS(显示时间戳)、DTS(解码时间戳)、时间基(Time Base)、同步策略——这些概念构成了视频播放最底层的"时间体系"。本文把它们一次性讲透。:音视频同步靠 PTS(Presentation Time Stamp,显示时间戳)实现。
2026-08-06 13:32:24
304
原创 Python 自动化视频处理:opencv 和 moviepy 能帮你做什么
你有没有遇到过这种情况:几十个视频要批量加水印、裁黑边、提取关键帧?手动用剪辑软件一个一个操作太慢了。其实用 Python,几行代码就能批量搞定。本文介绍两个最常用的 Python 视频处理库——和——以及它们分别擅长做什么、怎么选。:OpenCV 擅长像素级操作(逐帧处理、目标检测、滤镜),适合"改画面内容";MoviePy 擅长整体操作(剪辑、拼接、加音频/字幕),适合"改视频结构"。两者可以互补:OpenCV 处理帧 → MoviePy 拼回去。
2026-08-03 17:53:44
512
原创 为什么手机上录的视频在电脑上播是“躺着的“?聊聊移动端视频优化
你肯定遇到过:手机竖着录的视频,发到电脑上打开——画面旋转了 90°,人脸横着、字幕竖着。更诡异的是,有些 App 里能正常播放,有些就躺倒。这背后的元凶是,而更大的背景是移动端视频的整套编码和存储策略。本文聊聊手机视频的那些"天生不同"。:手机竖屏视频的旋转信息存在 MP4 的元数据里,不是真的把画面旋转了——这叫"方向标记"。播放器认这个标记就正常显示,不认就躺倒。HEVC(H.265)编码在手机上优势巨大:同画质体积减半 + 硬编硬解省电。HEIF(.heic)是图片版的同一逻辑。
2026-08-03 17:52:38
533
原创 直链复制走就 403?聊聊防盗链、Referer 与那道“门禁“
有时你明明拿到了视频直链,用浏览器能看,一用下载器或贴到别处就。这不是地址错了,而是服务器装了——一道看"你从哪来"的门禁。本文讲清 Referer 防盗链是什么、为什么解析器有时要"带对门票",以及它和更高级的 Token 防盗链差在哪。
2026-07-29 22:44:48
235
原创 用 ffmpeg 转码:压制体积、改分辨率、换封装的那些参数
前面聊了,那是"拼接"。本文往前一步:下载下来的文件,电视播不了、4K 太大、格式不兼容——这时候要的是"转码/换封装"。把最常用的 ffmpeg 参数讲清楚,让你知道每一条命令在干什么。
2026-07-29 22:42:42
256
原创 去水印到底伤不伤画质?聊聊视频水印的“层“与解析去水印的原理
这个工具去水印后是不是会糊?”——几乎每个第一次用视频下载工具的人都会问。。本文把"水印"拆开来看,讲清为什么有的去水印会糊、有的不会,以及解析类工具到底是怎么做到"去水印还不损画质"的。:水印分"界面叠加层"和"烧录进视频流"两种;前者根本不在视频数据里,解析出原始母版即可天然无印;后者已编码进每一帧,只能 AI 修复(有损)。"裁剪带水印画面"会糊,是因为裁掉边缘 + 二次转码双重损失;而,压根没有水印,自然不损画质。
2026-07-28 14:14:27
749
原创 从 0 到 1 读懂视频流:为什么你的视频能“边下边播“,又该如何优雅下载
短视频、直播、网课、海外平台……我们每天在屏幕上消费成百上千条视频。但你有没有想过:视频是怎么"流"到你手机里的?为什么能秒开、能拖动进度条、能在弱网下自动变清晰?这篇偏技术科普,拆开视频流的外壳,再顺带聊聊做这类解析工具时踩过的一些坑。:视频流靠"索引 + 分片"工作;HLS 用.m3u8、DASH 用.mpd;分片常带 AES-128 加密与防盗链;下载的本质是"拿到索引 → 带身份取 key → 拉分片 → 合并"。这类工具把这些封装成粘贴即用的动作。
2026-07-28 14:08:25
603
原创 在线视频下载器技术解析:原理、工具与合规实践
JSON 格式化与差异对比:帮助调试 API 数据。PDF 合并与压缩:纯前端处理,文件不上传。Cron 表达式生成:图形化生成定时任务表达式。IP 子网分析:快速计算 CIDR 下的网络和广播地址。HTTP 状态码检测:检查网站响应状态。这些工具同样免费使用,无需登录,大部分在浏览器本地完成处理,不涉及数据上传。用户可根据需要访问主站浏览。在线视频下载技术本质上是模拟播放器请求并获取原始媒体数据的过程。了解其原理有助于我们在合法范围内合理使用网络资源。
2026-07-07 22:09:23
461
原创 FFmpeg 音视频合并:给视频换背景音乐、补声音,一条命令搞定
FFmpeg 音视频合并并不复杂,记住核心命令 ffmpeg -i video -i audio -c:v copy -c:a aac -map … 就能应付大多数需求。如果遇到特殊要求(混合音量、延迟、循环),可以用滤镜和参数灵活调整。遇到问题时,多使用 ffmpeg -i input 查看文件信息,结合 -t、-ss、-shortest 等控制时长。始终先在小文件上测试,确认命令无误后再处理大文件。
2026-07-02 11:32:10
591
原创 DNS 解析原理:当你在浏览器输入网址后发生了什么?
DNS 是互联网运行的基础设施之一。理解它的分层结构和解析流程,可以更好地排查访问异常、配置域名和优化网络。对于配置了多个子域名或需要频繁查看解析记录的场景,可以使用一些在线 DNS 查询工具(如通过网页进行 dig 查询)辅助验证。本文仅作技术分享,相关命令在不同操作系统下可能略有差异。
2026-07-02 11:13:14
596
原创 IP 地址与 IP 伪装技术:从原理到实践
本文从 IP 地址基础出发,介绍 IP 代理的工作原理、IP 伪装的技术实现方式,以及常见的应用场景和注意事项。
2026-06-30 13:38:15
686
原创 视频流二进制数据提取:从封装格式到原始码流
一个视频文件由容器(如 MP4、MKV)和内部的多条流(视频流、音频流、字幕流)组成。视频流本身是编码后的二进制数据——H.264 或 H.265 编码器输出的原始 NAL(Network Abstraction Layer)单元序列。提取视频流,就是跳过容器封装,直接取出编码后的裸数据。[MP4 容器] → 解封装 → [H.264 裸流] → 二进制数据。
2026-06-30 11:20:02
429
原创 HTTP / HTTPS 请求头详解:从结构到实际应用,一次讲清楚
带 Bearer Token + JSON 请求体-d '{"title":"我的视频","url":"https://..."}'HTTP/HTTPS 请求头是 Web 通信的“说明书”——它告诉服务器客户端的身份、能力和需求,也决定了服务器如何响应。理解每个头部字段的含义和用途,可以快速定位各类接口错误,优化视频传输体验,并在日常开发中更加高效。希望这篇文章能帮你建立完整的请求头知识体系。如果下次联调时遇到 401 或 415 报错,不妨先检查一下请求头是否配置正确。
2026-06-26 11:04:09
910
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅