【FFmpeg】Filter 过滤器 ② ( 裁剪过滤器 Crop Filter | 裁剪过滤器语法 | 裁剪过滤器内置变量 | 裁剪过滤器常用用法 )

文章目录

  • 一、裁剪过滤器
    • 1、裁剪过滤器简介
    • 2、裁剪过滤器语法
    • 3、裁剪过滤器内置变量
    • 4、裁剪过滤器示例
    • 5、裁剪过滤器应用
    • 6、裁剪过滤器图示
  • 二、裁剪过滤器常用用法
    • 1、裁剪指定像素的视频区域
    • 2、裁剪视频区域中心正方形 - 默认裁剪
    • 3、裁剪视频区域中心正方形 - 手动计算
    • 4、裁剪中心 1/2 宽高画面
    • 5、裁剪中心区域正方形 - 边长等于高度
    • 6、裁剪掉左上角 100 像素
    • 7、裁剪出右下角 1/4 面积的画面


FFmpeg 相关文档 :

  • FFmpeg 文档主页 : https://ffmpeg.org/documentation.html , 在该页面有 命令行工具文档 , 组件文档 , 库文档 , API 文档 等 , 点击对应的链接就可以跳转到对应的文档中 ;
  • 命令行工具文档 :
    • ffmpeg 命令文档 : https://ffmpeg.org/ffmpeg.html
    • ffplay 命令文档 : https://ffmpeg.org/ffplay.html
  • 组件文档 :
    • 过滤器 Filter 文档 : https://ffmpeg.org/ffmpeg-filters.html
    • 编解码器文档 : https://ffmpeg.org/ffmpeg-codecs.html




一、裁剪过滤器




1、裁剪过滤器简介


FFmpeg 裁剪过滤器 Crop Filter 可用于 裁剪 视频或图像 的特定区域 ;


裁剪过滤器 Crop Filter 的 主要工作 是 将 输入视频帧 的 指定宽高像素的区域 从 x 和 y 坐标位置 裁剪出来 , 输出 到指定的 宽高像素画面 中 ;

x 和 y 是裁剪的 输入视频 的 左上角坐标 ;

裁剪的画面 像素宽高 可以 不等于 输出画面的 像素宽高 ;


裁剪过滤器 不仅可以裁剪视频 , 还可以裁剪图片 ;


2、裁剪过滤器语法


裁剪过滤器 Crop Filter 语法如下 :

crop=ow[:oh[:x[:y[:keep_aspect]]]]
  • ow : 裁剪后 输出宽度 , 该选项必须指定 ;
  • oh : 裁剪后 输出高度 , 该选项可选 , 如果不指定 , 默认使用 输入高度 ;
  • x : 裁剪区域 左上角 x 坐标 , 该选项可选 , 如果不指定 , 默认值为 (iw - ow)/2 , 默认裁剪中心区域 ;
  • y : 裁剪区域 左上角 y 坐标 , 该选项可选 , 如果不指定 , 默认值为 (ih - oh)/2 , 默认裁剪中心区域 ;
  • keep_aspect : 保持宽高比标志 , 该选项可选 , 如果设置为 1,则强制输出图像的宽高比与输入相同 ;

FFmpeg 裁剪过滤器文档 : https://ffmpeg.org/ffmpeg-filters.html#crop


3、裁剪过滤器内置变量


裁剪过滤器涉及到的变量 :

  • x : 裁剪画面 的 左上角 水平方向 距离左侧边界 的 像素数 , 默认值为 (iw - ow)/2 ;
  • y : 裁剪画面 的 左上角 垂直方向 距离顶部边界 的 像素数 , 默认值为 (ih - oh)/2 ;
  • in_w / iw : 输入视频 / 图片 的 像素宽度 ;
  • in_h / ih : 输入视频 / 图片 的 像素高度 ;
  • out_w / ow : 输出视频 / 图片 的 像素宽度 , 默认值为 输入视频的像素宽度 iw ;
  • out_h / oh : 输出视频 / 图片 的 像素高度 , 默认值为 输入视频的像素高度 ih ;
  • a : 视频画面 的 纵横比 , 值为 iw / ih ;

4、裁剪过滤器示例


示例说明 :

  • crop=100:100:12:34:1 设置裁剪过滤器 , 裁剪 左上角 ( 12 , 34 ) 坐标开始的 100 x 100 像素区域的画面 , 同时保持宽高比 ;
  • crop=100 设置裁剪过滤器 , 裁剪 左上角 ( 0 , 0 ) 坐标开始的 100 x 输入视频画面高度 像素区域的画面 ;

5、裁剪过滤器应用


在 ffmpeg 命令中 , 使用 -vf 参数 指定 裁剪过滤器 , 裁剪过滤器 放在 双引号 中 , 如下面的命令中 , 为 ffmpeg 设置 crop=320:240:0:0 裁剪过滤器 ;

ffmpeg -i input.mp4 -vf "crop=320:240:0:0" output.mp4

6、裁剪过滤器图示


裁剪过滤器图示 : 紫色区域 是要裁剪的画面区域 ;
在这里插入图片描述





二、裁剪过滤器常用用法




1、裁剪指定像素的视频区域


裁剪指定像素的视频区域 , 根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 ,

  • 需要特别指定 ow 与 oh 裁剪区域的像素大小 ,
  • 左上角的坐标 x 和 y 设置为 0 即可 ,
  • 由于是裁剪部分画面 , keep_aspect 保持宽高比不需要设置 , 默认为 0 即可 ;

最终得到的 裁剪过滤器为 crop=320:240:0:0 , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=320:240:0:0" output.mp4

原 输入视频 的大小为 752x420 像素大小 ;

在这里插入图片描述

执行上述命令后 , 得到输出文件 output.mp4 , 其文件大小是 320x240 像素 , 截取的视频画面正好是原视频 左上角的画面 , 裁剪命令执行效果 和 播放效果 如下图所示 ;

在这里插入图片描述


2、裁剪视频区域中心正方形 - 默认裁剪


裁剪视频画面中心的 200x200 像素的画面 ,

根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 裁剪过滤器 语法 , x 和 y 默认就自动设置为 输入画面的 中心位置 ,
在这里插入图片描述
最终得到的 裁剪过滤器为 crop=200:200 , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=200:200" output.mp4

执行结果如下 :

在这里插入图片描述


3、裁剪视频区域中心正方形 - 手动计算


通过手动计算的方式 , 不仅可以裁剪中心区域的画面 , 还可以裁剪任意比例区域的画面 , 比如 左上角 1/4 区域的画面 , 左侧 1/3 区域的画面 , 右侧 1/2 区域的画面 ;


裁剪 视频画面 中心的 200 x 200 像素的画面 , 根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 ,

  • 需要特别指定 ow 与 oh 裁剪区域的像素大小 200 x 200 像素 ,
  • 左上角的坐标 x 和 y 需要经过计算 , 计算过程如下 :

iw 和 ih 是 裁剪过滤器 的 内置变量 , 分别表示 输入视频画面的宽度 和 输入视频画面 的高度 ;

计算视频区域 左上角 的坐标 ,

  • 计算 左上角 x 坐标 : i w − 200 2 \cfrac{iw - 200}{2} 2iw200
  • 计算 左上角 y 坐标 : i h − 200 2 \cfrac{ih - 200}{2} 2ih200

在这里插入图片描述

最终得到的 裁剪过滤器为 crop=200:200:(iw-200)/2:(ih-200)/2 , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=200:200:(iw-200)/2:(ih-200)/2" output.mp4

执行上述命令后 , 得到输出文件 output.mp4 , 其文件大小是 200x200 像素 , 截取的视频画面正好是原视频 中心区域的画面 , 裁剪命令执行效果 和 播放效果 如下图所示 ;

在这里插入图片描述


4、裁剪中心 1/2 宽高画面


这里使用 iw 和 ih 两个变量 , 裁剪的画面宽高都为 1/2 , 由于 x 和 y 默认就是裁剪中心位置 , 这里不需要设置 , 使用默认设置即可 ;

只需要计算出 ow 和 oh 这两个过滤器参数值 ;

  • ow 是要裁剪的宽度 , 这里设置为 1/2*iw , 即输入视频的 1/2 宽度 ;
  • oh 是要裁剪的高度 , 这里设置为 1/2*ih , 即输入视频的 1/2 高度 ;

在这里插入图片描述

根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 , 生成 裁剪过滤器为 crop=1/2*iw:1/2*ih , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=1/2*iw:1/2*ih" output.mp4

执行结果如下 : 输出视频的 宽高是 376x210 , 正好是输入视频的 752x420 的一半 ;

在这里插入图片描述


5、裁剪中心区域正方形 - 边长等于高度


这里需要使用 ih 变量 , 裁剪中心区域 , 这是默认设置 , 不需要设置 x 和 y 左上角坐标 ;

由于该视频时 752 x 420 大小的视频 , 宽度大于高度 , 则视频宽高都是 ih ;

只需要计算出 ow 和 oh 这两个 代表裁剪宽高的 过滤器参数值 ;

  • ow 是要裁剪的宽度 , 这里设置为 ih , 即输入视频高度 ;
  • oh 是要裁剪的高度 , 值也是 ih , 但是 oh 的默认值就是 输入视频的高度 , 不需要单独设置 ;

在这里插入图片描述

根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 , 生成 裁剪过滤器为 crop=ih 或者是 crop=ih:ih , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=ih" output.mp4

执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 420x420 ;

在这里插入图片描述


6、裁剪掉左上角 100 像素


裁剪掉左上角 100 像素 , 也就是将 上边的 100 像素 长条画面 和 左侧的 100 像素 竖条画面 删除 , 只留下右下角剩余部分 , 如下图所示 ;

在这里插入图片描述

裁剪画面 的 左上角坐标是 ( 100 , 100 ) , 因此 x 值为 100 , y 值为 100 ;

ow 是要裁剪的宽度 , 值为 输入画面宽度 减去 100 像素 , 值为 iw - 100 ;

oh 是要裁剪的高度 , 值为 输入画面高度 减去 100 像素 , 值为 ih - 100 ;

根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 , 生成 裁剪过滤器为 crop=iw-100:ih-100:100:100 , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=iw-100:ih-100:100:100" output.mp4

执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 652x320 ;

在这里插入图片描述


7、裁剪出右下角 1/4 面积的画面


裁剪出右下角 1/4 面积的画面 , 就是 右下角 宽高各为 1/2 的画面 , 如下图所示 :

在这里插入图片描述

裁剪画面 的 左上角坐标是 ( iw/2 , ih/2 ) , 因此 x 值为 iw/2 , y 值为 ih/2 ;

ow 是要裁剪的宽度 , 值为 iw/2 ;

oh 是要裁剪的高度 , 值为 ih/2 ;

根据 crop=ow[:oh[:x[:y[:keep_aspect]]]] 语法 , 生成 裁剪过滤器为 crop=iw/2:ih/2:iw/2:ih/2 , 将裁剪过滤器 设置到 ffmpeg 命令中 , 命令如下 :

ffmpeg -i input.mp4 -vf "crop=iw/2:ih/2:iw/2:ih/2" output.mp4

执行结果如下 : 输入视频的宽高为 750x420 , 最终裁剪的视频宽高是 376x210 ;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1420681.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【linux系统学习教程 Day01】网络安全之Linux系统学习教程,远程连接,简单指令,文件操作

首先分享一个自己做的很不错的网路安全笔记,内容详细介绍了许多知识 分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取: 超详细的网络安全学习笔记,共21W字https://m.tb.cn/h.gcRis…

C++/Qt 小知识记录6

工作中遇到的一些小问题,总结的小知识记录:C/Qt 小知识6 dumpbin工具查看库导出符号OSGEarth使用编出的protobuf库,报错问题解决VS2022使用cpl模板后,提示会乱码的修改设置QProcess调用cmd.exe执行脚本QPainterPath对线段描边处理…

ASP.NET一种多商家网络商店的设计与实现

摘 要 21世纪是网络的世纪,电子商务随之将成为主流商业模式,多商家网络商店系统就是一个C2C型的电子商务系统。本文详细论述了采用ASP.NET 2005 和 SQL Server 2000等技术实现的一个多商家网络商店的过程。论文首先阐述了本设计题目的选题意义、背景&a…

服装定制|基于SSM+vue的服装定制系统的设计与实现(源码+数据库+文档)

服装定制系统 目录 基于SSM+vue的服装定制系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户后台管理模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

01-win10安装Qt5

Qt5安装教程 下载Qt5官网下载(下载很慢)镜像网站下载(有些版本没有资源)迅雷下载(推荐)百度网盘下载(推荐)安装Qt5下载Qt5 官网下载(下载很慢) 【注意】:官网下载非常慢,没有镜像下载时常20+ Qt 官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这…

企业级复杂前中台项目响应式处理方案

目录 01: 前言 02: 响应式下navigtionBar实现方案分析 数据 视图 小结 03: 抽离公用逻辑,封装系列动作 04: PC端navigationBar私有逻辑处理 05: 分析 navigationBar 闪烁问题 06: 处理 navigationBar 闪烁问题 07: category数据缓存,覆盖…

【云原生】 Kubernetes核心概念

目录 引言 一、部署方式回溯 (一)传统部署时代 (二)虚拟化部署时代 (三)容器部署时代 二、Kubernetes基本介绍 (一)为什么使用k8s (二)主要功能 &am…

Linux学习之路 -- 文件系统 -- 缓冲区

前面介绍了文件描述符的相关知识,下面我们将介绍缓冲区的相关知识。 本质上来说,缓冲区就是一块内存区域,因为内核上的缓冲区较复杂,所以本文主要介绍C语言的缓冲区。 目录 1.为什么要有缓冲区 2.应用层缓冲区的默认刷新策略 …

【Java】:方法重写、动态绑定和多态

目录 一个生动形象的例子 场景设定 1. 方法重写(Method Overriding) 2. 动态绑定(Dynamic Binding) 3. 多态(Polymorphism) 归纳关系: 重写 概念 条件 重写的示例 重载与重写的区别 …

【python】python淘宝交易数据分析可视化(源码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Linux实验 系统管理(三)

实验目的: 了解Linux系统下的进程;掌握一类守护进程——计划任务的管理;掌握进程管理的常用命令;掌握进程的前台与后台管理;了解Linux系统的运行级别;掌握系统服务管理的常用命令。 实验内容: …

WEB后端复习——Servlet

Servlet是运行在Web服务器或应用服务器上的java程序,它是一个中间层,负责连接来自web浏览器或其他HTTP客户程序和[HTTP服务器]上应用程序 Servlet执行下面的任务: 1)读取客户发送的显示数据。 2)读取由浏览器发送的隐式请求数据。…

NodeJS编写后端接口

技术栈 1.express:Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建 各种 Web 应用,和丰富的 HTTP 工具,使用 Express 可以快速地搭建一个完整功能的网站。 2.mysql:用于操作MySQL数据库 3.bod…

【Java】入门

笔者是在C语言基础上学习java 安装Java的过程中我们可能会见到这样几个东西,JVM、JRE、JDK,那它们的关系是怎样的呢? -JVM Java Virtual Machine 是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机…

【C++】STL — map和set的使用详细介绍

前言 本章将继续学习STL中的两个很重要的容器map和set,其底层实现是封装了一个红黑树,我们通过本节来学习和深入了解一下这两大容器。。。 序列式容器: string 、Vector、List 、dequeue 关联式容器:MAP 、SET、nordered_map、uno…

partially initialized module ‘replicate‘ has no attribute ‘run‘

partially initialized module replicate has no attribute run(most likely due to a circular import) 在包名上停留查看impot 包的地址。 报错原因: 文件重名了,导入了 当前文件 。 修改文件名 即可。

架构设计之学新而知故

缘由 因为一些特殊的机缘,接触到洋葱架构等一些新架构设计概念。 尝试理解了一段时间,就想简单梳理下对它们的理解,以达到学新而知故 😃 信息增益 以前计算机专业并不设置通信领域的信息论的专业课程,但是&#xf…

WEB后端复习——javabean与会话cookie、session

JavaBean 是一种符合特定命名约定的 Java 类,它通常用于封装数据。 JavaBean 的主要特点是: 1. 无参构造器:JavaBean 必须有一个公共的(public)无参构造方法,以便于反射时能够创建对象实例。 2. 属性&…

electron进程间通信

Electron 应用程序的结构非常相似。 作为应用开发者,你将控制两种类型的进程:主进程 和 渲染器进程。 这类似于上文所述的 Chrome 的浏览器和渲染器进程。 主进程 每个 Electron 应用都有一个单一的主进程,作为应用程序的入口点。 主进程在 N…

程序员工作中常见问题,你遇到过几个?

在赛博朋克2077玩后感中,我提到,即便是在严谨的机制下,依然可能出现让人匪夷所思或是贻笑大方的问题。 那么今天,就以后端程序员的视角,盘点下从设计开发到上线的常见问题,看看大家中过几个。 01 设计与开…