我有一些视频显示“点爬行”。我相信其他人也一样。有一个 ffmpeg 过滤器“dotcrawl”,应该很有用。我的 ffmpeg 副本内置了这个过滤器。问题是,没有示例,文档也不够充分。文档可以在以下位置找到:
https://ffmpeg.org/ffmpeg-filters.html#dedot
但它只说:
11.59 德多特
减少视频中的串亮度(点爬行)和串色(彩虹)。
它接受以下选项:
米
Set mode of operation. Can be combination of dotcrawl for cross-luminance reduction and/or rainbows for cross-color reduction.
特
Set spatial luma threshold. Lower values increases reduction of cross-luminance.
tl
Set tolerance for temporal luma. Higher values increases reduction of cross-luminance.
碳
Set tolerance for chroma temporal variation. Higher values increases reduction of cross-color.
电脑断层扫描
Set temporal chroma threshold. Lower values increases reduction of cross-color.
它没有给出值的范围,也没有说明如何使用多个变量。
通过实验我发现
-vf“dedot=dotcrawl”
被接受:但是
-vf“dedot=dotcrawl:t1=1”
被拒绝。这是适用于许多其他过滤器的语法,例如
“eq=亮度=0.1:对比度=1.25”
等等。
我找到的其他文档是:
https://www.aquilinestudios.org/avsfilters/dotcrawl.html
讨论了 DeDot 过滤器,但参数与 ffmpeg 文档中的不同。
源代码显然位于:
https://github.com/FFmpeg/FFmpeg/blob/master/libavfilter/vf_dedot.c
但由于源代码不包含任何注释,因此它并不能完全说明问题。
(我当了多年的开发人员和项目经理,我永远不会接受这样的事情出现在项目中。但我离题了......)
有人能解释一下如何使用这个过滤器,以及参数的含义吗?正如我所说,我相信如果有文档记录的话,这对很多人来说都会很有用。
谢谢。
答案1
请注意,在您的示例中,您使用的是 t1,而不是 tl。您需要小写的“L”,而不是数字 1。
使用命令可以得到更多信息
ffmpeg -h filter=dedot
输出为:
Filter dedot
Reduce cross-luminance and cross-color.
slice threading supported
Inputs:
#0: default (video)
Outputs:
#0: default (video)
dedot AVOptions:
m <flags> ..FV....... set filtering mode (default dotcrawl+rainbows)
dotcrawl ..FV.......
rainbows ..FV.......
lt <float> ..FV....... set spatial luma threshold (from 0 to 1) (default 0.079)
tl <float> ..FV....... set tolerance for temporal luma (from 0 to 1) (default 0.079)
tc <float> ..FV....... set tolerance for chroma temporal variation (from 0 to 1) (default 0.058)
ct <float> ..FV....... set temporal chroma threshold (from 0 to 1) (default 0.019)
This filter has support for timeline through the 'enable' option.
因此,这给出了每个参数的范围和默认值。有关 dedot 过滤器的更好的文档和示例位于 AviSynth.nl wiki 中。
http://avisynth.nl/index.php/DeDot
但是本文档需要从 ffmpeg 到 Avisynth 值进行一些转换。
ffmpeg, value* avisynth max= avisynth val, avisynth name
lt .079 255 20 luma2d
tl .079 255 20 lumaT
tc .058 255 15 chromaT1
ct .015 255 5 chromaT2
有趣的是,dedot 过滤器的 ffmpeg git 源代码在对帧进行操作之前将浮点值转换回 avisynth 值(并使用 avisynth 变量名!)。
现在来看看使用 dedot 过滤器的一些 ffmpeg 示例。常见的开头是
ffmpeg.exe -hide_banner -y -ss 60 -t 30 -i intest.mp4 -map v:0
内容如下:抑制 ffmpeg 横幅,覆盖输出,从 60 秒开始编码,并对输入 intest.mp4 的 30 秒进行编码。选择第一个视频轨道。
然后添加 dedot 部分:
-vf dedot # dedot both rainbows and dot crawl using default values
-vf dedot=dotcrawl:tc=0.0:ct=1.0 # dedot reducing dot crawl only
-vf dedot=rainbows:lt=1.0:tl=0.0 # dedot reducing rainbows only
接下来是例如
-c:v libx264 -crf 21 -map a:0 -c:a copy outtest.x264.mkv
内容如下:使用 libx264 视频编码器以恒定速率因子 21 对输入进行转码,并选择并将第一个音轨复制到 outtest.x264.mkv 文件中。
完整的一行是
ffmpeg.exe -hide_banner -y -ss 180 -t 30 -i intest.mp4 -map v:0 -vf dedot -c:v libx264 -crf 21 -map a:0 -c:a copy outtest.x264.mkv