FFmpeg滤镜(9)

FFmpeg视频抠图合并


FFmpeg除了半透明、透明水印处理外,还支持视频抠图与背景视频合并的操作——chromakey操作,参数如下:

  • color: 设置chromakey颜色值,默认为黑色
  • similarity:设置chromakey相似值
  • blend:设置chromakey融合值
  • yuv:yuv替代rgb,默认为false

举例:
一个input.mp4,一个input_green.mp4,可以使用chromakey将指定的背景颜色(可通过ffmpeg -colors查看颜色支持)设置为透明色,从而将区域内的人物抠出来,然后贴到以input.mp4为背景的视频中。

ffmpeg -colors
name                             #RRGGBB
AliceBlue                        #f0f8ff
AntiqueWhite                     #faebd7
Aqua                             #00ffff
Aquamarine                       #7fffd4
Azure                            #f0ffff
Beige                            #f5f5dc
Bisque                           #ffe4c4
Black                            #000000
BlanchedAlmond                   #ffebcd
Blue                             #0000ff
BlueViolet                       #8a2be2
Brown                            #a52a2a
BurlyWood                        #deb887
CadetBlue                        #5f9ea0
Chartreuse                       #7fff00
Chocolate                        #d2691e
Coral                            #ff7f50
CornflowerBlue                   #6495ed
Cornsilk                         #fff8dc
Crimson                          #dc143c
Cyan                             #00ffff
DarkBlue                         #00008b
DarkCyan                         #008b8b
DarkGoldenRod                    #b8860b
DarkGray                         #a9a9a9
DarkGreen                        #006400
DarkKhaki                        #bdb76b
DarkMagenta                      #8b008b
DarkOliveGreen                   #556b2f
Darkorange                       #ff8c00
DarkOrchid                       #9932cc
DarkRed                          #8b0000
DarkSalmon                       #e9967a
DarkSeaGreen                     #8fbc8f
DarkSlateBlue                    #483d8b
DarkSlateGray                    #2f4f4f
DarkTurquoise                    #00ced1
DarkViolet                       #9400d3
DeepPink                         #ff1493
DeepSkyBlue                      #00bfff
DimGray                          #696969
DodgerBlue                       #1e90ff
FireBrick                        #b22222
FloralWhite                      #fffaf0
ForestGreen                      #228b22
Fuchsia                          #ff00ff
Gainsboro                        #dcdcdc
GhostWhite                       #f8f8ff
Gold                             #ffd700
GoldenRod                        #daa520
Gray                             #808080
Green                            #008000
GreenYellow                      #adff2f
HoneyDew                         #f0fff0
HotPink                          #ff69b4
IndianRed                        #cd5c5c
Indigo                           #4b0082
Ivory                            #fffff0
Khaki                            #f0e68c
Lavender                         #e6e6fa
LavenderBlush                    #fff0f5
LawnGreen                        #7cfc00
LemonChiffon                     #fffacd
LightBlue                        #add8e6
LightCoral                       #f08080
LightCyan                        #e0ffff
LightGoldenRodYellow             #fafad2
LightGreen                       #90ee90
LightGrey                        #d3d3d3
LightPink                        #ffb6c1
LightSalmon                      #ffa07a
LightSeaGreen                    #20b2aa
LightSkyBlue                     #87cefa
LightSlateGray                   #778899
LightSteelBlue                   #b0c4de
LightYellow                      #ffffe0
Lime                             #00ff00
LimeGreen                        #32cd32
Linen                            #faf0e6
Magenta                          #ff00ff
Maroon                           #800000
MediumAquaMarine                 #66cdaa
MediumBlue                       #0000cd
MediumOrchid                     #ba55d3
MediumPurple                     #9370d8
MediumSeaGreen                   #3cb371
MediumSlateBlue                  #7b68ee
MediumSpringGreen                #00fa9a
MediumTurquoise                  #48d1cc
MediumVioletRed                  #c71585
MidnightBlue                     #191970
MintCream                        #f5fffa
MistyRose                        #ffe4e1
Moccasin                         #ffe4b5
NavajoWhite                      #ffdead
Navy                             #000080
OldLace                          #fdf5e6
Olive                            #808000
OliveDrab                        #6b8e23
Orange                           #ffa500
OrangeRed                        #ff4500
Orchid                           #da70d6
PaleGoldenRod                    #eee8aa
PaleGreen                        #98fb98
PaleTurquoise                    #afeeee
PaleVioletRed                    #d87093
PapayaWhip                       #ffefd5
PeachPuff                        #ffdab9
Peru                             #cd853f
Pink                             #ffc0cb
Plum                             #dda0dd
PowderBlue                       #b0e0e6
Purple                           #800080
Red                              #ff0000
RosyBrown                        #bc8f8f
RoyalBlue                        #4169e1
SaddleBrown                      #8b4513
Salmon                           #fa8072
SandyBrown                       #f4a460
SeaGreen                         #2e8b57
SeaShell                         #fff5ee
Sienna                           #a0522d
Silver                           #c0c0c0
SkyBlue                          #87ceeb
SlateBlue                        #6a5acd
SlateGray                        #708090
Snow                             #fffafa
SpringGreen                      #00ff7f
SteelBlue                        #4682b4
Tan                              #d2b48c
Teal                             #008080
Thistle                          #d8bfd8
Tomato                           #ff6347
Turquoise                        #40e0d0
Violet                           #ee82ee
Wheat                            #f5deb3
White                            #ffffff
WhiteSmoke                       #f5f5f5
Yellow                           #ffff00
YellowGreen                      #9acd32
ffmpeg -i input.mp4 -i input_green.mp4 -filter_complex "[1:v]chromakey=Green:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.19.100
  Duration: 00:00:30.32, start: 0.000000, bitrate: 397 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], 261 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'input_green.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:00:31.81, start: 0.000000, bitrate: 546 kb/s
    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 672x378 [SAR 1:1 DAR 16:9], 494 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 (h264) -> overlay:main
  Stream #1:0 (h264) -> chromakey
  overlay -> Stream #0:0 (libx264)
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 480x208 [SAR 16:15 DAR 32:13], q=-1--1, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      encoder         : Lavc58.35.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1

命令执行后,会设置chromakey的背景色为绿色,设置标签为ckout,然后将ckout铺在以input.mp4的视频为背景的画布上,最后输出output.mp4,效果如下:

上图可以看出,人物已经被铺在了视频中,两个图层已经合并,chromakey效果已经达到。


注意:

FFmpeg中除了有chromakey滤镜之外,还有一个colorkey参数,chromakey滤镜主要处理YUV数据,所以一般来说做绿幕处理更有优势;而colorkey处理纯色均可以,因为colorkey处理主要以RGB为主。

你可能感兴趣的:(FFmpeg滤镜(9))