【ffmpeg基础】视频滤波处理

2023-11-12

ffmpeg版本:ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers

一、视频缩放滤波器

视频的滤波器通常使用-vf(video filters)来设置滤波器,也可以使用-filter_complex(复杂滤镜),filter_complex可以将不同的滤镜进行组合处理。

视频宽高放大2倍如下;使用scale滤波器可以对视频的宽高大小进行缩放;iw*2表示输入视频的宽度放大2倍,ih*2表示视频输入的高度放大两倍。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -vf scale=iw*2:ih*2 -r 50 -vcodec libx264 -crf 26 BlowingBubbles_416x240.h264

如果想保持输入视频的宽高比可以将ih*2改为-1;如下。

 ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -vf scale=iw*2:-1 -r 50 -vcodec libx264 -crf 26 BlowingBubbles_416x240.h264

视频宽高缩小2倍如下;iw/2表示输入宽度缩小2倍;ih/2表示输入高度缩小2倍。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -vf scale=iw/2:ih/2 -r 50 -vcodec libx264 -crf 26 BlowingBubbles_416x240.h264

视频宽高放大或者缩小到任意指定的分辨率可以将scale=后的iw/2:ih/2改为指定的数值,如scale=1280:720;如下。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -vf scale=1280:720 -r 50 -vcodec libx264 -crf 26 BlowingBubbles_416x240.h264

视频缩放的算法选择;通过flags=bicubic来设置视频缩放的算法(flags参数省略默认为bicubic算法);scale的flags参数支持设置的缩放算法有:

fast_bilinear(快速双线性缩放算法)、bilinear(双线性缩放算法)、bicubic(双三次缩放算法)、area(区域平均值下采样算法(只能用缩放))、gauss(高斯缩放算法)、experimental(实验性的缩放算法)、neighbor(邻近位置缩放算法)等。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -vf scale=1280:720:flags=bicubic -r 50 -vcodec libx264 -crf 26 BlowingBubbles_416x240.h264

二、视频水印添加滤波器

ffmpeg可以将一个水印log图片叠加到视频画面的任意位置,如下所示;两个输入源(-i表示),第一个是视频源,第二个是要叠加的水印图片;叠加图片的滤波器是overlay(需要使用filter_complex不能用vf),overlay=x:y,x和y表示的是水印图片左上角位置在视频中的起始位置;如设置水印图像在视频右下角则overlay=main_w-overlay_w-10:main_h-overlay_h-10,main_w和main_h表示是视频的宽高,overlay_w和overlay_h表示的是水印图片的宽高,减去10(-10),表示水印图像距离视频左下角空出10个像素,即水印图像距离视频下方和右侧各空出10行/列像素。

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -i logo.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768_30_logo.mp4

下图左侧是原视频,右侧是水印图。

下图是将水印图叠加到视频右下角后的图。

将书印图叠加到视频的左上角;

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -i logo.png -filter_complex overlay=10:10 -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768_30_logo.mp4

三、视频文字叠加

通过-vf使用drawtext的滤波器 来叠加文字到视频上,drawtext滤波器的使用需要ffmpeg支持--enable-libfontconfig --enable-libfreetyp 这两个编译选项,在ffmpeg官方给出编译好的ffmpeg工具是支持这两个选项的。-vf使用drawtext的滤波器的示例如下;fontcolor参数是指定文字颜色;fontsize用来指定文字的大小;fontfile用来指定文字库,不同的字库显示出的字体效果是不同的;x和y是指定文字在视频中的位置。

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -vf "drawtext=fontcolor=white:fontsize=80:fontfile='simhei.ttf':text='美丽世界':x=100:y=100" -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768.mp4

fontcolor设置文字颜色的时候不仅可以使用英文单词也可以使用十六进制的形式,如蓝色fontcolor=0x0000FF,十六进制的值由24比特组成,分别是红绿蓝,如红色位0xFF0000,绿色为0x00FF00,通过数字的形式可以更加灵活的设置颜色。

红色字体。

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -vf "drawtext=fontcolor=0xFF0000:fontsize=80:fontfile='simhei.ttf':text='美丽世界':x=100:y=100" -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768.mp4

绿色字体。

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -vf "drawtext=fontcolor=0x00FF00:fontsize=80:fontfile='simhei.ttf':text='美丽世界':x=100:y=100" -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768_30.mp4

蓝色字体。

ffmpeg -s 1024x768 -pix_fmt yuv420p -i ChinaSpeed_1024x768_30.yuv -vf "drawtext=fontcolor=0x0000FF:fontsize=80:fontfile='simhei.ttf':text='美丽世界':x=100:y=100" -r 25 -vcodec libx264 -crf 26 ChinaSpeed_1024x768.mp4

四、视频纹理增强

ffmpeg中常用的可以提高视频纹理细节的滤波器有unsharp,cas;unsharp滤波器是对视频做锐化处理来提升视频画面纹理细节的。对视频做锐化的命令如下,其中第一个5:5:0.8是对亮点做锐化算法的参数,5:5表示的是锐化算法中像素判断的子窗口大小,:0.8是强度参数,值越大锐化越明显(纹理越明显),但是值过大容易过曝(容易产生高亮的像素)。第二个5:5:0.1是色度做锐化算法的参数,5:5表示的是锐化算法中像素判断的子窗口大小,:0.1是强度参数,值越大锐化越明显(纹理越明显),强度参数过大容易参数色差。在ffmpeg中unsharp的滤波参数缺省(默认是)5:5:1.0:5:5:0.0,即只对亮度做锐化处理。注意当强度参数为负数(如-1),则表示的是通过unsharp来实现画面的模糊。

ffmpeg -i input.mp4 -vf unsharp=5:5:0.8:5:5:0.1 -r 25 -vcodec libx264 -crf 26 output.mp4

下图左侧是做了unsharp之后的画面,右侧是原始画面,可以看到草地和树木清晰度有明显差异。

下面是cas来增强画面纹理的一种滤波器;其中第一个参数0.8是算法强度[0,1],值越接近1强度越大,增强越明显。第二个参数1表示的是图像分量mask[1,15],对于yuv视频来说当只对亮度分量做增强则取值为1,如果需要对亮度(y)和色度分量(uv)做增强则取值为7。

ffmpeg -i input.mp4 -vf cas=0.8:1 -r 25 -vcodec libx264 -crf 26 output_cas.mp4

五、视频画面模糊

ffmpeg通过boxblur可以将画面进行模糊处理,如下;第一个参数2:2是对亮度进行滤波的参数分别表示算法处理的[半径:强度]参数。第二个参数1:1是对色度进行滤波的参数,分别表示算法处理的[半径:强度]。

ffmpeg -i input.mp4 -vf boxblur=2:2:1:1 -r 25 -vcodec libx264 -crf 26 output_boxblur.mp4

下图左侧是进行了boxblur处理的画面;右侧是原始视频画面。

unsharp进行画面模糊,指令如下,将滤波器的亮度和色度强度值改为负数就是做模糊处理。

ffmpeg -i input.mp4 -vf unsharp=5:5:-1.2:5:5:-0.3 -r 25 -vcodec libx264 -crf 26 output_unsharp.mp4

下图左侧是进行了unsharp处理的画面;右侧是原始视频画面。

smartblur进行画面模糊,指令如下,第一个参数1:1:0是亮度的滤波参数分别表示[半径:强度:阈值],第二个1:1:0是色度的滤波参数分别表示[半径:强度:阈值],半径范围[0.1,5.0],强度取值范围是[-1,1],阈值取之范围[-30,30]。

ffmpeg -i input.mp4 -vf smartblur=1:1:0:1:1:0 -r 25 -vcodec libx264 -crf 26 output_smartblur.mp4

下图左侧是进行了smartblur处理的画面;右侧是原始视频画面。

gblur高斯模糊进行画面模糊;sigma参数表示是水平sigma,高斯模糊的标准差;steps表示的是高斯逼近步长;planes表示的是处理的像素分量(1只处理亮度分量,15表示处理所有分量);sigmaV参数表示是垂直sigma。

ffmpeg -i input.mp4 -vf gblur=sigma=0.9:steps=2:planes=15:sigmaV=2 -r 25 -vcodec libx264 -crf 26 output_gblur.mp4

六、视频裁剪

使用crop进行视频画面的裁剪,如下所示,前两个参数iw/2:ih/2分别表示[输出宽:输出高],iw和ih分别表示的是输入图像的宽高,iw/2:ih/2表示是裁剪后的视频画面宽高是原始输入的一半。x和y表示的是裁剪图像的便宜位置,x=iw/2:y=ih/2表示的是裁剪的位置为原始画面的中心出;所以下面的命令是裁剪出原始画面的右下角部分;

ffmpeg -i input.mp4 -vf crop=iw/2:ih/2:x=iw/2:y=ih/2 -r 25 -vcodec libx264 -crf 26 output_crop.mp4

裁剪出原始画面的左上角部分;

ffmpeg -i input.mp4 -vf crop=iw/2:ih/2:x=0:y=0 -r 25 -vcodec libx264 -crf 26 output_crop.mp4

裁剪出原始画面的中间部分;

ffmpeg -i input.mp4 -vf crop=iw/2:ih/2:x=iw/4:y=ih/4 -r 25 -vcodec libx264 -crf 26 output_crop.mp4

七、视频Padding

ffmpeg可以使用pad滤波器对视频进行上下左右填充画面;如下指令;w和h分别表示填充输出后的画面分辨率,iw*1.5:h=ih*1.5表示的是填充后的画面宽高是原始宽高的1.5倍;x和y是原始画面在填充画面的起始位置,color表示的是填充的颜色。下面的指令是填充绿色且原始画面居中。

ffmpeg -i input.mp4 -vf pad=w=iw*1.5:h=ih*1.5:x=iw*0.25:y=ih*0.25:color=green -r 25 -vcodec libx264 -crf 26 output_pad.mp4

左右填充黑边;

ffmpeg -i input.mp4 -vf pad=w=iw*1.5:h=ih:x=iw*0.25:y=0:color=black -r 25 -vcodec libx264 -crf 26 output_pad.mp4

上下填充黑边;

ffmpeg -i input.mp4 -vf pad=w=iw:h=ih*1.5:x=0:y=ih*0.25:color=black -r 25 -vcodec libx264 -crf 26 output_pad.mp4

八、视频对比度、亮度、饱和度调节

通过eq滤波器可以调节画面的对比度(contrast)、亮度(brightness)、饱和度(saturation);如下命令。brightness为负数可以降低画面亮度,值为正数可以提升画面亮度。

ffmpeg -i input.mp4 -vf eq=contrast=1.04:brightness=0.01:saturation=1.5 -r 25 -vcodec libx264 -crf 26 output_eq.mp4

brightness=-0.1将画面亮度降低,如下图左侧画面亮度比右侧画面亮度要暗。

九、视频画中画

通过overlay和scale来实现将input2作为小窗口叠加到input0的右上角,命令行如下;scale的作用是将input2缩小其中[1:v]用来指定两个输入源第1个输入input2.mp4的视频(v)进行缩放,缩放后的宽高为iw/4:ih/4为输入的四分之一;[pip]是缩放后的图像别称,通过overlay将缩小后的视频(即pip)叠加到第0个输入input1.mp4上,[0:v]表示第0个输入的视频。下面的命令是将输入的第一个视频 input2.mp4 叠加到第0个输入input0.mp4的右上角。

ffmpeg -i input0.mp4 -i input2.mp4  -filter_complex "[1:v]scale=iw/4:ih/4[pip];[0:v][pip]overlay=main_w-overlay_w-4:4" -r 25 -vcodec libx264 -crf 26 output_hzh.mp4

通过pad、scale和overlay将第二个输入叠加到第一个视频的右上。如下使用pad滤波器将第一个视频的上方填充黑边(h=ih*1.5黑色区域为原始视频高度的一半即输出图像高为原始视频的1.5倍);使用scale将第二个视频缩小为原来的一半;使用overlay将第二个视频叠加到第一个视频的右上角。

ffmpeg -i input.mp4 -ss 2 -i input.mp4  -filter_complex "[0:v]pad=w=iw:h=ih*1.5:x=0:y=ih*0.5:color=black[pd];[1:v]scale=iw/2:ih/2[pip];[pd][pip]overlay=main_w-overlay_w:0" -r 25 -vcodec libx264 -crf 26 output_hzh.mp4

通过pad、scale和overlay将第二个输入叠加到第一个视频的右下。pad滤波器color=white将原始视频下方扩充为白色区域。

ffmpeg -i input.mp4 -ss 2 -i input.mp4  -filter_complex "[0:v]pad=w=iw:h=ih*1.5:x=0:y=0:color=white[pd];[1:v]scale=iw/2:ih/2[pip];[pd][pip]overlay=main_w-overlay_w:main_h-overlay_h" -r 25 -vcodec libx264 -crf 26 output_hzh.mp4

十、视频水印消除

ffmpeg提供了delogo的滤波器用于消除视频中指定位置的logo水印信息,对于简单的logo消除后也能较好的还原出原始画面内容。如下指令,delogo=x=100:y=10:w=64:h=24中的x和y表示的是水印位于视频画面中的起始位置(水印左上角在视频中的位置);w和h表示的是水印的宽高。注意动态/复杂/大面积的logo也能消除只是消除后原始画面的内容可能难以还原。下图左侧是带"logo"的画面,右侧是经过delogo消除水印后的画面。

ffmpeg -i input_logo.mp4 -vf delogo=x=100:y=10:w=64:h=24 -r 25 -vcodec libx264 -crf 26 output_delogo.mp4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ffmpeg基础】视频滤波处理 的相关文章

  • windows下使用FFmpeg生成YUV视频文件并播放(通过命令的方式)

    一 YUV的定义 YUV是一种颜色编码方法 它跟我们常见的RGB格式区分开来 常使用在各个视频处理组件中 其中 Y 代表明亮度 U 和 V 代表其色度 视频播放器把市面上流行的MP4等格式文件的视频部分解码出来 得到的一般会是YUV格式的数
  • SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device

    解决中标麒麟下SDL无法打开音频设备的问题 root登录 首先就是一定要用root登录 这个可能是权限问题 否则后面实验不能成功 安装ALSA库 首先下载alsa lib https www alsa project org main in
  • 音视频开发开发核心知识+新手入门必看基础知识

    音视频开发是一个广泛的领域 它涉及到多个技术领域 包括音频编解码 视频编解码 媒体容器格式 流媒体传输 音视频处理等 以下是音视频开发的一些基础知识 音频编解码器 音频编解码器是将数字音频信号编码成一种压缩格式 并且能够解码压缩的音频数据以
  • STM32 HAL——GPIO

    HAL的代码规范建议 以下内容是我自己参照HAL做的总结 如果公司有固定的编码规范 就跟公司保持一致 如果没有 那就推荐和所用库保持一致 注意 因人而异 并不具有普遍适用性 HAL库有如下代码规范 1 目录名除了专有词汇外 统一是单词首字母
  • Qt的基本语法及其使用(一)

    Qt的概念 Qt是通用的C 开发界面框架 C 图形用户界面 应用程序开发框架 既可以开发GUI程序也可以开发开发非GUI程序 Qt是面向对象的框架 使用特殊的代码生成扩展 Qt的历史 1991由QT公司研发 2008年被诺基亚收购 2012
  • 数据类型分类

    分为四种类型
  • 音频增加噪声低通滤波降噪的过程

    啊 clear all close all clc s Fsample B wavread music wav Ts 1 Fsample M length s 获取音频的数据长度 m 0 M 1 figure subplot 3 1 1 p
  • 【CV with Pytorch】第 7 章 :图像异常检测

    机器学习的研究使我们进入了研究各种模式和行为的过程 它使我们能够构建可以研究封闭环境的模型 预测能力通常遵循模型训练过程 这是我们在训练模型时需要经常问的一个重要问题 还有另一个问题需要回答 多少数据足以帮助模型理解分布 以便我们有一个好的
  • Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器 可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们 Downie 4 Downie 4 for Mac Downie
  • IP包头&ARP协议笔记

    一 IP包头分析 1 帧中的IP包头 从版本到可选项 其中2为帧头 注 1 IP包头最小长度 20字节 即可选项以前部分 IP包头长度是可变的 2 可选项最长可以是40个字节 故IP包头最长可以是60个字节 1 版本 4 说明是IPv4 2
  • mysql之操作数据库的DDL语句

    1 退出mysql exit 或 quit 2 显示当前所有数据库 show databases 3 创建数据库 create database 数据库名 4 删除库文件 drop database 数据库名 5 切换正在使用的数据库 us
  • springboot整合shiro的坑记录

    首先我参考文章 https blog csdn net Yearingforthefuture article details 117384035 进行学习 由于此文章没有讲springboot的版本 我于是用了idea2022 3 1的默
  • HDMI CEC协议

    1 前言 本文档仅作为本人记录使用 主要根据工作使用及 HDMI Specification 1 4a pdf 进行终结得出 若有不足会后续补充 2 CEC简介 CEC Consumer Electronics Control 是一套完整的
  • // SPDX-License-Identifier: MIT

    上述声明是指明你写的智能合约采用什么样的对外开放标准 该标准规定了别人是否拥有各种使用权利 其中 MIT 标准说明其他人可以随便用该源码 但出问题不负责
  • 4大主流CPU处理器技术架构

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 导读 RISC 精简指令集计算机 是一种执行较少类型计算机指令的微处理器 起源于80年代的MI
  • 浅谈音视频开发入门基础及进阶资源分享

    导言 音视频开发涉及的知识面比较广 知识点又相对独立琐碎 入门门槛相对较高 想要对音视频开发具有深入全面的了解 需要在行业深耕多年 本文将简单介绍音视频的采集 编解码 传输 渲染四个技术点并对涉及到的知识点和原理进行解释 希望你可以对音视频
  • nodejs基于vue的视频分享投稿商城播放系统617bx

    本视频播放系统的设计目标是为用户提供一个便利的视频播放平台 同时系统融入投稿 商城以及论坛等功能模块 更全面的为用户提供服务 本文重点阐述了视频播放系统的开发过程 以实际运用为开发背景 基于vue框架 B S结构 运用了nodejs技术和M
  • 【音视频 | AAC】AAC音频编码详解

    博客主页 https blog csdn net wkd 007 博客内容 嵌入式开发 Linux C语言 C 数据结构 音视频 本文内容 介绍AAC音频编码 金句分享 你不能选择最好的 但最好的会来选择你 泰戈尔 本文未经允许 不得转发
  • 免费音效素材网站,一次性介绍清楚

    不管是在游戏 电影 电视剧 短视频还是音频中 合适的音效能够更好的表达内容和渲染氛围 今天给大家分享几个免费音效素材 感兴趣的话可以接着往下看 一 制片帮素材 找音效 制片帮素材不仅有海量的优质视频素材 还有丰富的音效资源 分类清晰 更重要
  • 多业务光端机的技术进展与应用策略

    随着光通信技术的飞速发展 多业务光端机已成为现代通信网络不可或缺的一部分 这种设备能够在单一平台上处理多种类型的信号 包括语音 数据和视频等 极大地提高了网络的灵活性和效率 本文将探讨多业务光端机的最新技术进展和在实际应用中的策略 技术进展

随机推荐