上一篇:36 音频槽
下一篇:38 视频源

  • ffmpeg 高级滤镜汇总 vidstabtransform vidstabdetect 视频抖动消除而不是deshake - 图1Stabilization Commands

There are many combination and choices, I report the options that I use, called: one step and two steps. In the first FFmpeg doesn’t analyze the video stream, it is more fast but the quality is better in the second.
One step

ffmpeg -i input.mp4 -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 output.mp4

Two steps

ffmpeg -i input.mp4 -vf vidstabdetect=stepsize=32:shakiness=10:accuracy=10:result=transforms.trf -f null -
ffmpeg -y -i input.mp4 -vf vidstabtransform=input=transforms.trf:zoom=0:smoothing=10,unsharp=5:5:0.8:3:3:0.4 -vcodec libx264 -tune film -acodec copy -preset slow output.mp4

Finally this is the script that I usually launch inside the directory with the video files3 :

!/bin/bash

Sources:

https://trac.ffmpeg.org/wiki/Create a mosaic out of several input videos
https://stackoverflow.com/questions/11552565/vertically-or-horizontally-stack-several-videos-using-ffmpeg

https://ffmpeg.org/pipermail/ffmpeg-user/2017-August/037057.html

path=”/absolute_path_of_the_downloaded_FFmpeg”

if [ -z “$1” ]
then
echo “Usage:”
echo “stabilizator.sh filename.mp4”
exit 0
fi

one step

$path/ffmpeg -y -i $1
-vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 ${1%.*}_oneStep.mp4

two steps

$path/ffmpeg -y -i ffmpeg 高级滤镜汇总 vidstabtransform vidstabdetect 视频抖动消除而不是deshake - 图2path/ffmpeg -y -i $1
-vf vidstabtransform=input=transforms.trf:zoom=0:smoothing=10,unsharp=5:5:0.8:3:3:0.4
-vcodec libx264 -tune film -acodec copy -preset slow
${1%.*}_twoSteps.mp4

Examples

The first example is a panoramic view of a rose:

本文档使用 书栈(BookStack.CN) 构建
如果指定的表达式是无效的,则采用当前值(不变化)

lut, lutrgb, lutyuv例子

  1. 输入图像的负片效果
  2. lutrgb=”r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val”<br /> lutyuv=”y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val
  3. 等效于:
  4. lutrgb=”r=negval:g=negval:b=negval”<br /> lutyuv=”y=negval:u=negval:v=negval
  5. 亮度负片效果
  6. lutyuv=y=negval
  7. 移除色度分量,转换成灰度图像:
  8. lutyuv=”u=128:v=128
  9. 应用一个亮度燃烧效果:
  10. lutyuv=”y=2*val
  11. 移除绿色和蓝色分量(红色灰度图):
  12. lutrgb=”g=0:b=0
  13. 设定固定的透明通道效果:
  14. format=rgba,lutrgb=a=”maxval-minval/2
  15. 以系数0.5进行伽玛亮度矫正:
  16. lutyuv=y=gammaval(0.5)
  17. 丢弃的亮度低有效位(减少细节,亮块化):
  18. lutyuv=y=’bitand(val, 128+64+32)’
  19. - depth<br /> <br /> 设置深度<br /> <br /> 大的值将在低频部分降噪明显,但速度很慢<br /> <br /> 值范围8-16,默认为8<br /> - luma_strength, ls<br /> <br /> 设置亮度强度<br /> <br /> 0-1000的双精度值,默认为1.0<br /> - chroma_strength, cs<br /> <br /> 设置色度强度<br /> <br /> 0-1000的双精度值,默认为1.0
  20. <br /> ### pp ###<br /> 使用指定的`libpostproc`后处理`subfilters`链。这个库会自动选择一个`GPL`编译(--enable-gpl)。`subfilters`必须是由`/`分隔,可以利用`-`来禁用。每个`subfilter`有长或短的选项名,例如`dr/dering`<br /> <br /> 滤镜接受下面的选项:<br /> <br /> - subfilters<br /> <br /> 指定subfilters字符串<br /> <br /> 所有subfilters有共同选项来确定其范围,它们是:<br /> <br /> a/autoq<br /> <br /> 对subfilter的质量等级<br /> c/chrom<br /> <br /> 同时做色差和亮度(默认).<br /> y/nochrom<br /> <br /> 只做亮度过滤 (无色差处理).<br /> n/noluma<br /> <br /> 只做色差过滤 (无亮度处理).<br /> <br /> 这些选项可以通过`|`附加在`subfilter`名后面<br /> <br /> 有效的`subfilter`有:<br /> <br /> hb/hdeblock[|difference[|flatness]]<br /> <br /> 水平解封滤镜<br /> <br /> difference<br /> <br /> 差异因素,高值意味着更多的解封(默认值:32)。<br /> flatness<br /> <br /> 平面度阈值,降低值意味着更多的解封(默认值:39)。<br /> <br /> vb/vdeblock[|difference[|flatness]]<br /> <br /> 垂直解封滤镜<br /> <br /> difference<br /> <br /> 差异因素,高值意味着更多的解封(默认值:32)。<br /> flatness<br /> <br /> 平面度阈值,降低值意味着更多的解封(默认值:39)。<br /> <br /> ha/hadeblock[|difference[|flatness]]<br /> <br /> 准确的水平解封滤镜<br /> <br /> difference<br /> <br /> 差异因素,高值意味着更多的解封(默认值:32)。<br /> flatness<br /> <br /> 平面度阈值,降低值意味着更多的解封(默认值:39)。<br /> <br /> va/vadeblock[|difference[|flatness]]<br /> <br /> 准确的垂直解封滤镜<br /> difference<br /> 差异因素,高值意味着更多的解封(默认值:32)。<br /> flatness<br /> 平面度阈值,降低值意味着更多的解封(默认值:39)。<br /> 水平和垂直解封过滤器共享`difference`和`flatness`,因此不能设置平面度值不同的水平和垂直的阈值<br /> 设置被认为是同一像素的最大亮度区别。值范围0.1-100.0,默认1.0.<br /> - chroma_radius, cr<br /> <br /> 设置色差模糊强度,值范围0.1-4.0,默认1.0。更大的值会导致图像更模糊,但更慢<br /> - chroma_pre_filter_radius, cpfr<br />smartblur<br />在不影响轮廓的基础上模糊视频<br />选项:<br /> luma_radius, lr
  21. 设置亮度半径,为浮点数,范围[0.1,5.0],用于指示高斯滤波模糊的方差值(越大越慢),默认为1.0


trim

减少输入,输出包含一个连续输入的组成部分

它接受下面参数:

  1. start
  2. 指定开始部分时间的,即帧时间戳开始将输出第一帧
  3. end
  4. 指定结束部分时间,即帧的时间戳达到的前一帧是输出的最后一帧。
  5. start_pts
  6. 同于start,只是以时基为时间单位替代秒
  7. end_pts
  8. 同于end,只是以时基为时间单位替代秒
  9. duration
  10. 按秒最大持续时间 seconds.
  11. start_frame
  12. 开始的帧序数,该帧开始被输出
  13. end_frame
  14. 结束的帧序数,该帧开始被丢弃(不被输出)

unsharp

锐化或者模糊输入视频

它接受下面的参数:

  1. luma_msize_x, lx
  2. 设置亮度矩阵水平尺寸。它必须是3-63的奇数值,默认5
  3. luma_msize_y, ly
  4. 设置亮度矩阵垂直尺寸,它必须是3-63的奇数值,默认5
  5. luma_amount, la
  6. 设置亮度效果强度,合理值为-1.5 - 1.5的浮点数(可超出前范围)。
  7. 负数值表明视频会被模糊,正数值则会被锐化,0则没有效果
  8. 默认为1.0.
  9. chroma_msize_x, cx
  10. 设置色度矩阵水平尺寸。它必须是3-63的奇数值,默认5
  11. chroma_msize_y, cy
  12. 设置色度矩阵垂直尺寸。它必须是3-63的奇数值,默认5.
  13. chroma_amount, ca
  14. 设置色度效果强度,合理值为-1.5 - 1.5的浮点数(可超出前范围)。
  15. 负数值表明视频会被模糊,正数值则会被锐化,0则没有效果
  16. 默认为0.0.

uspp

应用超慢/简单的后处理,压缩和解压图像(或对应于quality中水平为8的完全处理)变化和平均结果。

它不同于spp,实际上uspp编码和解码每个libavcodec块(Snow),而spp使用一个内部简化的8x8 DCT,其相似于MJPEG的DCT

滤镜接受下面选项:

  1. quality
  2. 设置质量水平值。它是平均水平值数字,范围0-8,如果为0,则滤镜没有效果,设置为8将有最好的效果。每增加1级大约速度减慢2倍,默认为3
  3. qp
  4. 强制设定质量参数,如果不设置,将采用输入流中的QP值(如果可用)

vidstabdetect

分析视频的静止/不晃动,两步过程中的第1步,下一步是vidstabtransform。

这个滤镜生成一个文件,指定相对平移和旋转变换后续帧的信息,它用于vidstabtransform滤镜

为了编译支持它需要设置—enable-libvidstab

滤镜接受下面选项:

  1. result
  2. 指定保存转换信息的文件路径。默认为 is transforms.trf.<br /> shakiness
  3. 设置摄像头如何快速设置来满足晃动的视频,值范围是1-10整数,1意味着很小的晃动,10意味着强烈晃动,默认为5<br /> accuracy
  4. 设置检测过程的准确性,值范围为1-151表示低精度,15表示高精度。默认15<br /> stepsize
  5. 设置搜索过程的间隔值(扫描尺度)。最低是1像素分辨率扫描,默认为6<br /> mincontrast
  6. 设置最低对比度。低于这个值一个本地测量领域会被丢弃。为范围在0-1的浮点数,默认为0.3.<br /> tripod
  7. 设置参考帧数三脚架模式
  8. 如果允许,对帧运动的比较将以一个参考过滤流相比进行,从中指定一个。这样可以补偿或多或少的静态帧中的所有动作,保持相机视图绝对静止
  9. 如果设为0则禁用,帧数从1开始计数<br /> show
  10. 显示字段和转换生成的帧,接受一个0-2间的整数,默认为0,它禁止任何可视内容。

vidstabdetect例子

  1. 使用默认值:
  2. vidstabdetect
  3. 分析晃动视频的强度,把结果放置在mytransforms.trf:
  4. vidstabdetect=shakiness=10:accuracy=15:result=”mytransforms.trf
  5. 把内部转换生成的视频显示出来(可视化):
  6. vidstabdetect=show=1
  7. ffmpeg中分析中等强度晃动:
  8. ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi

vidstabtransform

视频静止/不晃动,两步过程的第二步,其第一步是vidstabdetect

从一个文件读取每一帧需要应用/补偿的信息,与vidstabdetect一起使用来稳定视频,参看http://public.hronopik.de/vid.stab来了解更多。见下,它对于使用unsharp是很重要的。

为了使用它需要允许编译设置—enable-libvidstab

vidstabtransform选项

  1. input
  2. 设置读取转换信息的文件,默认为transforms.trf.
  3. smoothing
  4. 设置帧数,其值以表达式 (value*2 + 1)用作低通来滤除摄像机运动,默认为10.
  5. 例如对于设置为10则意味着21帧被使用(过去10帧和接下来10帧)来平滑摄像机移动。更大的值可以得到一个更平滑视频,但限制摄像机加速度(平底锅摇/倾斜 移动)。0表示摄像机是静止的
  6. optalgo
  7. 设置相机路径优化算法
  8. 接受值:
  9. gauss
  10. 镜头运动采用高斯低通滤波器内核(默认)

‘avg’

  1. 转换平均值

maxshift

设置帧中最大转换像素值,默认为-1,表示没有限制

maxangle

设置最大帧旋转角度(弧度值,度*PI/180),默认为-1,表示没有限制

crop

指定如何处理边界,由于运动补偿可能可见

有效值:

‘keep’

  1. 从以前帧保持图像信息 (默认)

‘black’

  1. 填充黑色边

invert

为1则转化转换。默认值为0

relative

为1表示转换是相对于前帧,0表示绝对的(不和前帧相关),默认为0

zoom

设置放大比例。正数则相对于推进效果,负数相当于拉远效果,默认为0(不变)

optzoom

设置最佳缩放以避免边界

可能值:

‘0’

  1. 禁止

‘1’

  1. 确定最优静态缩放值(只有很强的运动将导致可见边界)(默认)

‘2’

  1. 确定最优自适应缩放值(没有边界可见),参见`zoomspeed`

注意这里的zoom值被添加到一个计算中

zoomspeed

设置每帧放大的最大百分比限度值(当optzoom被设置为2时),范围为0-5,默认为0.25

interpol

指定插值类型

有效值是:

‘no’

  1. 不插值

‘linear’

  1. 水平线性插值

‘bilinear’

  1. 在两个方向上线性插值(默认)

‘bicubic’

  1. 在两个方向上立方插值(慢)
  2. tripod
  3. 如果为1启用虚拟三脚架模式,其等效于relative=0:smoothing=0默认为0 Default value is 0.
  4. 它要求在vidstabdetect中也启用tripod
  5. debug
  6. 1增加日志记录按冗长形式。也检测全局运动写入到临时文件 global_motions.trf,默认为0

vidstabtransform例子

  1. ffmpeg使用默认典型的稳定系数:
  2. ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
  3. 注意一直建议使用unsharp
  4. 从给定文件加载转换数据来放大一点:
  5. vidstabtransform=zoom=5:input=”mytransforms.trf
  6. 使视频更平滑:
  7. vidstabtransform=smoothing=30

vfilp

让输入垂直翻转

例如:利用ffmpeg垂直翻转视频

  1. ffmpeg -i in.avi -vf "vflip" out.avi

vignette

使或扭转自然渐晕效应

滤镜接受下面选项:

  1. angle, a
  2. 以弧度表示的镜头组角度
  3. 值范围为 [0,PI/2]
  4. 默认为: PI/5”<br /> x0
  5. y0
  6. 设置中心坐标表达式,默认分别是”w/2 and h/2
  7. mode
  8. 设置向前/向后模式
  9. 有效值为:
  10. forward
  11. 中心点的距离越大,图像的颜色越深

‘backward’

  1. 中心点的距离越大,图像越亮。这可以用于扭转装饰图案效果,虽然没有自动检测提取镜头角度和其他设置。它也可以用来创建一个燃烧的效果。

默认为‘forward’.

eval

设置表达式计算模式(对于angle, x0, y0).

有效值为:

‘init’

  1. 只在初始化时计算一次

‘frame’

  1. 每帧计算,它的速度远低于`init`模式,因为它需要每帧计算所有表达式,但这允许了先进的动态表达式(完成一些特效)
  2. 默认为‘init’.
  3. dither
  4. 1(默认)则启用抖动减少循环条带效应
  5. aspect
  6. 设置插图像素长宽比。此设置将允许调整插图形状,设置值对于输入SAR(样本长宽比)将调整矩形光损失后的尺寸
  7. 默认为1/1.

vignette表达式

这里有angle(原文误为alpha), x0 和 y0表达式允许包含的参数

  1. w
  2. h
  3. 输入的宽和高
  4. n
  5. 输入帧序数,从0开始计
  6. pts
  7. 以时基单位计的PTS (作品时间戳),未定义则为NAN
  8. r
  9. 输入视频帧率,未知则为NAN
  10. t
  11. 以秒计的PTS (作品时间戳),未定义则为NAN
  12. tb
  13. 输入视频时基

vignette例子

  1. 应用简单的强大的渐晕效应:
  2. vignette=PI/4
  3. 做一个闪烁的光损失:
  4. vignette=’PI/4+random(1)*PI/50’:eval=frame

w3fdif

反交错的输入视频(“w3fdif”代表“韦斯顿3场反交错滤波器——Weston 3 Field Deinterlacing Filter”)。

基于英国广播公司(BBC R&D)的马丁•韦斯顿(Martin Weston)研发,并由吉姆·伊斯特布鲁克(Jim Easterbrook)实现的反交错算法。这个滤镜使用的滤波系数是BBC研发的

它有两组滤波系数,被称为”simple”(简单)和 “complex”(复杂)。使用那个滤波系数可以通过参数设置。

  1. filter
  2. 设置采用的滤波系数,允许值为:
  3. simple
  4. 简单滤波器系数.

‘complex’

  1. 复杂滤波器系数

默认‘complex’.

deint

指定帧反交错,接受值为:

‘all’

  1. 反交错所有帧

‘interlaced’

  1. 仅反交错设置为交错的帧
  2. 默认‘all’.

xbr

对像素应用一个xBR高质量放大滤镜,它遵循一套边缘检测规则,详情见http://www.libretro.com/forums/viewtopic.php?f=6&t=134

接受选项:

  1. n
  2. 设置放缩尺寸, 2对应于2xBR3对应于3xBR4对应于4xBR,默认为3

yadif

反交错输入视频(yadif意味着另外一个反交错滤镜)

它接受下面的参数:

  1. mode
  2. 采用隔行扫描模式。它接受下列值之一:
  3. 0, send_frame
  4. 对每帧都输出

1, send_field

  1. 对每场都输出一帧

2, send_frame_nospatial

  1. 类似`send_frame`,但跳过交错检查

3, send_field_nospatial

  1. 类似`send_field`,但跳过交错检查

默认为send_frame

parity

假定输入隔行视频的模式,它接受下列值:

0, tff

  1. 假定为上场优先

1, bff

  1. 假定为下场优先

-1, auto

  1. 自动侦测

默认为auto,如果交错模式未知或者不能正确处理则假定为tff

deint

指定哪些帧需要反交错,接受下列值:

0, all

  1. 所有帧

1, interlaced

  1. 仅标记为交错的帧
  2. 默认为所有

zoompan

应用放大和摇镜头效果

滤镜接受下面选项:

  1. zoom, z
  2. 设置放大系数表达式,默认为1<br /> x
  3. y
  4. 设置xy表达式,默认为0
  5. d
  6. 设置持续帧数,这设置有多少数量的帧受到影响
  7. s
  8. 设置输出图像尺寸,默认为 hd720’.<br /> 每个表达式接受下列参数:
  9. in_w, iw
  10. 输入的宽
  11. in_h, ih
  12. 输入高
  13. out_w, ow
  14. 输出宽
  15. out_h, oh
  16. 输出高
  17. in
  18. 输入帧计数
  19. on
  20. 输出帧计数<br /> x
  21. y
  22. 最后计算的xy对于当前输入帧的xy表达式。<br /> px
  23. py
  24. 之前输入帧对应的最后输出帧最后计算’x y’,或者为0(第一个输入帧)
  25. zoom
  26. 当前输入帧对应的最后z表达式计算得出的放大系数
  27. pzoom
  28. 前一输入帧前最后输出帧计算的放大系数
  29. duration
  30. 当前输入帧对应的输出帧数。对每个输入帧计算d
  31. pduration
  32. 前一输入帧之前创建输出帧的数量
  33. a
  34. 有理数 = iw/ih
  35. sar
  36. 样本长宽比
  37. dar
  38. 显示长宽比

zoompan例子

  1. 推近到1.5 并且同时在中心附近摇的效果:
  2. zoompan=z=’min(zoom+0.0015,1.5)’:d=700:x=’if(gte(zoom,1.5),x,x+1/a)’:y=’if(gte(zoom,1.5),y,y+1)’:s=640x360
  3. 推近到1.5 并且同时以中心摇的效果:
  4. zoompan=z=’min(zoom+0.0015,1.5)’:d=700:x=’iw/2-(iw/zoom/2)’:y=’ih/2-(ih/zoom/2)’

hqdn3d

这是一个高精度/质量的3D降噪滤镜。它的目的是减少图像噪声,产生平滑的图像和让静止图像保存原样。它可以提高压缩率。

接受下面可选参数:

luma_spatial

非负浮点数来指明亮度强度。默认为4.0
chroma_spatial

非负浮点数来指明亮色强度,默认为3.0*luma_spatial/4.0.
luma_tmp

一个浮点数指明亮度临时强度。默认为6.0*luma_spatial/4.0
chroma_tmp

一个浮点数指明色度临时强度。默认为luma_tmp*chroma_spatial/luma_spatial
hqx

应用一个高质量的像素放大滤镜。这个滤镜最初由 Maxim Stepin创建。

它接受下面的选项:

n

设置
————————————————
版权声明:本文为CSDN博主「hongge372」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010029439/article/details/84754395