libpostproc 只管解码之后的画面修补:去块、去色斑、临时降噪。 它的活已经被解码器内置滤波与 libavfilter 接走,新项目不必碰它。
2.4 讲完编解码,这一篇讲「解完之后顺手修一把」的那个库。 八篇里只有这一篇,本机连库都拿不到。
一、它只做一件事
做什么 用在什么场景
去块效应 低码率 H.264 解码后画面发糊 去色斑 色度采样不足导致的色块 临时降噪 压缩前随手抹一把
它排在解码之后、显示之前,所以名字里有个 post。 这层的定位很尴尬:修得轻了没效果,修得重了细节全丢,而且它只能修「压缩带来的伤」, 修不了「本来就没拍好」。
二、本机为什么没有它
av.library_versions 只报七个库,没有 libpostproc。
原因有两层:一是现代解码器内部自带去块滤波,解码出来的画面已经没有十年前那种大方块;
二是更强的修画质手段都搬到了 libavfilter(nlmeans、hqdn3d 之类)。
所以多数发行版的构建干脆不编它。 你没编它,
configure 里那个 --enable-postproc 就只是白写一行。
三、什么时候还会碰上它
只有要复现很老的方案时。 比如十年前的一套监控转码流程,里面写死了 pp=hb/vb 这样的参数。
新项目一律用滤镜:能组合、能看效果、能随时摘掉。postproc 是编进解码流程的开关,开了不好关。
需求 老办法 现在怎么做
去块 postproc 的 pp libavfilter 的 pp 滤镜 降噪 postproc hqdn3d、nlmeans 锐化 做不了 unsharp
「做不了」那一行说明这层的上限:它只修压缩伤,不做创作。而今天的画质处理需求,多半是创作。
四、给这一篇一个位置的理由
教材把它列进八大金刚,是因为历史上它确实是八个之一。 当年的 FFmpeg 里,后处理是独立一层,
跟滤镜并列。
学它的价值不在用它,在认清「库的数量会变」。 libavresample 在 5.0 被删,
libpostproc 慢慢没人编,都是同一类事:能力被更合适的层接走,老库就退场。
所以看见老资料写「八大库」,别急着找第八个。 先查自己这套构建里有没有,没有就用新的做法。
五、动手 Demo:libpostproc——名字里带 post 的那个,本机没有
这一段把「本机有几个库」数出来,再看七个里有没有它。 结论不是缺陷,是这个库整体在退场。
import av
print(sorted(av.library_versions))
print("libpostproc" in av.library_versions)
实跑输出:
--------------------------------------------------------------------
libpostproc——名字里带 post 的那个,本机没有
--------------------------------------------------------------------
**① 它只管一件事:解码之后的画面修补**
做什么 用在什么场景
--------------------------------------------
去块效应 低码率 H.264 解码后画面发糊
去色斑 色度采样不足导致的色块
临时降噪 压缩前随手抹一把
**② 本机为什么没有**
`av.library_versions` 只报七个库,没有 libpostproc。
因为它的活已经被别人接走了:现代解码器内部就带环路滤波(deblocking),
而更强的修画质方法交给 libavfilter 里的 `pp`、`nlmeans` 这些滤镜。
**③ 什么时候还会用它**
只有要复现很老的方案时。
**新项目一律用 libavfilter 的滤镜**,理由很实际:滤镜链可以组合、可以看效果、可以随时摘掉,
而 postproc 是编进解码流程里的开关,开了不好关。
**④ 一个能直接用的判断**
看见教程写 `--enable-postproc` 配上 `pp=hb/vb` 这类参数,说明那份资料至少有十年了。
**照抄之前先确认自己那版还认不认这个滤镜。**
**本章八篇里,只有这一篇讲的东西本机拿不到。** 把它单列出来,是为了让「八大金刚」这名字齐全,
不是让你去找它。
七个库里没有 libpostproc。 它的活被解码器内置滤波与 libavfilter 接走了。
30 秒实验
python -c "import av; print(sorted(av.library_versions))"数库名。- 在滤镜表里找
pp与hqdn3d,看现在用什么替代它。 - 搜一条十年前的转码命令,看里面有没有
pp=参数。
常见误区
- 以为八大金刚必须都装上。 库会退场,libpostproc 就是正在退的那个。
- 用它做画质增强。 它只修压缩伤,不做锐化、不做风格化。
- 在老命令里留着
pp=参数。 新构建不认,报 No such filter。
自测三问(点开对答案)
1. libpostproc 排在哪一步之后? —— 解码之后。名字里的 post 就是「后处理」的意思。 2. 本机为什么没有它? —— 现代解码器自带去块滤波,画质修补又都搬到了 libavfilter,多数构建不再编它。 3. 「八大金刚」这个说法要不要死守? —— 不用。库会退场,libavresample 已被删,libpostproc 正在退,按自己构建里有的来。- ☐ (本节完,下一节 2.6 libavdevice 库简介)