《FFmpeg Basics》中文版-04-调整和伸缩视频

news2024/10/6 20:29:52

正文

在FFmpeg中调整视频的大小意味着可以通过一个选项改变其宽度和高度,而缩放则意味着使用一个具有高级功能的scale filter来改变帧的大小。

调整视频

输出视频的宽度和高度可以在输出文件名之前设置-s选项。视频分辨率以wxh格式输入,其中w为像素宽度,h为像素高度。例如,要将初始分辨率的输入调整为320x240,我们可以使用以下命令:

 ffmpeg -i input_file -s 320x240 output_file

给大家看看我的测试命令行:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -s 320x480 /Users/zhangfangtao/Desktop/newtest.mp4 

原来的视频信息如下图:

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

重新编码之后如下图:

确实发生了改变。

预定义的视频帧大小

FFmpeg工具没有输入视频宽度和高度的精确数字,而是提供了在下一页的表中列出的预定义视频大小。下面两个命令的结果相同:

ffmpeg -i input.avi -s 640x480 output.avi
ffmpeg -i input.avi -s vga output.avi

输入vga参数之后显示的如下图:(确实是640:480)

FFmpeg中视频大小的缩写

大小缩写典型用法
128x96sqcif手机
160x120qqvga手机
176x144qcif手机
320x200cga旧的CRT显示器
320x240qvga手机、摄像头
352x288cif手机
640x350ega旧的CRT显示器
640x480vga显示器,摄像头
704x5764cif官方数字视频大小的电视。
800x600svga显示器
852x480hd480, wvga摄像机
1024x768xga显示器,摄像头
1280x720hd720高清电视,摄像机
1280 x1024sxga显示器
1366x768wxga显示器
1408x115216cif设备使用CIF
1600x1024wsxga显示器
1600x1200uxga显示器,摄像机
1920x1080hd1080高清电视,摄像机
1920x1200wuxga宽屏显示器
2048x1536qxga显示器
2560x1600woxga显示器
2560x2048qsxga显示器
3200x2048wqsxga显示器
3840x2400wquxga显示器
5120x4096hsxga显示,显微镜相机
6400x4096whsxga显示器
7680x4800whuxga显示器

调整大小时的注意事项-奈奎斯特采样定理。

视频通常被调整为比来源更小的分辨率,这被称为下采样,主要用于便携式设备,通过互联网流媒体等。重要的是要考虑,在较小的尺寸中,一些细节将会丢失,这一事实解释了奈奎斯特 -Shannon采样定理。 它的一般形式与任何信号有关,并告知为了完全重构采样信号,我们必须使用比信源频率高至少2倍的频率。 这意味着要将小细节保留在缩小的视频中,它们的原始尺寸必须高于缩放比例除以2。

例如,800x600(SVGA)分辨率的视频包含2像素宽的细节。 当缩放到640x480(VGA)分辨率时,缩放比率为0.8,并且2像素再缩放为2像素:

640 pixels / 800 pixels = 0.8
2 pixels * 0.8 = 1.6 ≈ 2 pixels

但是当这个视频被缩放到160x120 (QQVGA)分辨率时,细节就丢失了:

160 pixels / 800 pixels = 0.2
2 pixels * 0.2 = 0.4 ≈ 0 pixels

这意味着在向下采样后,可见的只有输入大小至少3个像素的细节。(采用的是四舍五入的向下取整的方式)

专业的扩大滤波器

将视频调整为更大的帧大小比较少见,因为该功能几乎可以提供所有媒体播放器,但由此产生的图像有时并不清晰,特别是当源解析度非常小时。 用于平滑放大的源的特殊滤波器是super2xsai滤波器:

视频过滤器:super2xsai

视频过滤器:super2xsai

描述在不减少锐度的情况下,使用像素艺术缩放算法放大源帧的大小2倍。“2xSaI”的意思是“2倍尺度和插值”。
Syntax-vf super2xsai

例如,将128x96视频从移动电话放大到分辨率256x192像素,可以使用下一个命令:

 ffmpeg -i phone_video.3gp -vf super2xsai output.mp4

给大家看一下我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf super2xsai /Users/zhangfangtao/Desktop/newTest.mp4 

原始的视频信息如下图:

重新编码之后的视频信息:

高级缩放技能

当使用-s选项更改视频帧大小时,会在相关滤镜图片的末尾插入缩放视频滤镜。 要管理缩放过程开始的位置,可以直接使用缩放过滤器。

视频过滤器:缩放

描述通过更改输出样本宽高比来缩放源,显示宽高比保持不变。
语法scale=width:height[:interl={1|-1}]
**********变量表示宽度和高度参数。
iw or in_w输入的宽度
ih or in_h输入的高度
ow or out_w输出的宽度
oh or out_h输出的高度
a纵横比,与iw/ih相同。
sar输入样本纵横比,与dar/a相同。
dar输入显示纵横比,与*sar相同。
hsub水平色度子样本值,为yuv422p像素格式为2。
vsub垂直色度子样本值,为yuv422p像素格式为1。
**********可选的interl参数的可用值。
1应用交错感知扩展。
-1如果源被标记为交错的,应用是交错的意识扩展。

例如,下面两个命令的结果相同:

ffmpeg -i input.mpg -s 320x240 output.mp4
ffmpeg -i input.mpg -vf scale=320:240 output.mp4

scale filter的优点是,对于框架设置,可以使用上面表中描述的其他参数。

按比例缩放视频输入

如果不知道输入框的大小,可以使用scale filter的ih和iw参数相应地改变其分辨率,例如创建一个半大小的视频,我们可以使用下一个命令:

ffmpeg -i input.mpg -vf scale=iw/2:ih/2 output.mp4

我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=iw/2:ih/2 /Users/zhangfangtao/Desktop/newTest.mp4 

转换之前的视频信息:

转换之后的视频信息:

90%大小的视频命令:

ffmpeg -i input.mpg -vf scale=iw*0.9:ih*0.9 output.mp4

这个就不需要测试了吧。

用黄金比例缩放输入值= 1.61803398874989484820…用PHI来表示这个数值:

ffmpeg -i input.mpg -vf scale=iw/PHI:ih/PHI output.mp4

扩展到预定义的宽度或高度。

当输出视频应该有一定的宽度或一定的高度时,输入视频的大小和纵横比都是未知的,第二个维度可以通过一个方面参数来指定,比如下面的例子。要将输出宽度设置为400像素,高度按比例设置,我们可以使用以下命令:

ffmpeg -i input.avi -vf scale=400:400/a

我的测试指令:宽度确实成为了400.高度是等比缩放的,300

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=400:400/a /Users/zhangfangtao/Desktop/newTest.mp4 

输出文件的视频信息:

若要将输出高度更改为300像素,宽度按比例改变,命令可以是:(注意到了么,如果需要指定高度,需要用*,不是/,我试了一下,貌似用除号不行,因为那个参数a意思是纵横比,下面我有说明)

ffmpeg -i input.avi -vf scale=300*a:300

看看我的测试指令:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=300*a:300 /Users/zhangfangtao/Desktop/newTest.mp4 

输出视频信息:

如果指令里面这样写:

ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf scale=300/a:300 /Users/zhangfangtao/Desktop/newTest.mp4

会报下面的错误:

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

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

相关文章

驱动——ioctl数组及结构体传递

1、ioctl函数是用户程序来控制设备的函数 int ioctl(int fd, unsigned long request, ...); 函数功能:设备控制 参数: fd:文件描述符 request:请求码 ...:可变参数 需要传递地址 返回值:成功返回0,失败返回-1&a…

【ARXIV2207】LightViT: Towards Light-Weight Convolution-Free Vision Transformers

【ARXIV2207】LightViT: Towards Light-Weight Convolution-Free Vision Transformers 论文地址:https://arxiv.org/abs/2207.05557 代码地址:https://github.com/hunto/LightViT 1、研究动机 作者认为,在ViT中混合 convolution,…

高校部署房产管理系统前要认真做好那些基础工作?

高校部署数图互通房产管理系统的目的是为了在学校产权范围的基础上,确保开发工作的合理性、房产资源调配的科学性,强化房产资源的使用,切实将学校房产作用功能发挥出来。 一、在部署房产管理系统前期基础性工作包括: 1、摸清家底…

【C语言】-程序环境和预处理指令

文章目录前言1、翻译环境2、执行环境前言 1、翻译环境 我们的代码运行出来,变为我们人眼可以看到的结果的这个过程会经过两个过程。 一、程序的翻译环境:在这个环境中,源代码会变成可以执行的机器指令。这个过程就是把我们人能看懂的语言转换…

操作系统4小时速成:内存管理,程序执行过程,扩充内存,连续分配,非连续分配,虚拟内存,页面替换算法

操作系统4小时速成:内存管理,程序执行过程,扩充内存,连续分配,非连续分配,虚拟内存,页面替换算法 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&…

艾美捷C1q天然蛋白的应用和化学性质说明

C1q是构成C1的一个重要成分,由小肠、结肠上皮细胞、血液中单核细胞、腹膜巨噬细胞、上皮细胞、肝脏、脾脏等合成。活化后能启发补体经典激活途径。 C1q蛋白家族由众多含C1q结构域的蛋白组成, 从细菌到高等哺乳动物中都有分布。这类蛋白由一条信号肽、胶原样区(Colla…

Java BIO基本介绍

Java BIO基本介绍Java BIO基本介绍工作原理BIO传统通讯实现总结BIO实现多发和多收结果:Java BIO基本介绍 📜Java BIO就是传统的java io 编程,其相关的类和接口在java.io📜Blo(blockingl/O):同步阻塞,服务器实现模式为…

Java本地搭建宝塔部署实战springboot仓库管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的springboot仓库管理系统源码。 技术架构 技术框架:jdk8 jQuery MySQL5.7 mybatisplus layui shiro运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 本…

云计算HCIA学习笔记-云计算基础概念

第1章 云计算基础概念 1.1 云计算课程安排说明 (IA-虚拟化-FC / IP-Linux OpenStack 桌面云/IE-备份容灾迁移) 1.2 为什么云计算IA讲虚拟化? 提前告知学员,为什么IA课程要重点讲解虚拟化?云计算基于OpenStack&…

c++多线程(一)线程管理

来源:微信公众号「编程学习基地」 文章目录1.启动线程2.等待线程完成2.1特殊情况下的等待2.2使用RAII等待线程完成2.3后台运行线程2.4量产线程,等待结束2.传递参数3.转移线程所有权4.运行时决定线程数量2.5 识别线程1.启动线程 当把函数对象传入到线程…

G1D15-fraud-APT-汇报-基础模型与LR相关内容总结-KG-cs224w colab1-ctf rce41-44

一、fraud 跑了一个lr模型,从正则,一直看到了极大似然和最大后验估计emmm。一路跑偏,已经0954了。先把实验结果抄一抄 本来想把模型都跑完,没想到看R补充了大量的基本知识(L1\L2正则、先验概率 今天先来看fraud 看的…

Hive——详细总结Hive中各大查询语法

✅作者简介:最近接触到大数据方向的程序员,刚入行的小白一枚 🍊作者博客主页:皮皮皮皮皮皮皮卡乒的博客 🍋当前专栏:Hive学习进阶之旅 🍒研究方向:大数据方向,数据汇聚&a…

单隐层神经网络在Matlab上实现及其简单应用

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

Kafka 认证三:添加 Kerberos 认证详细流程

背景 上一章节介绍了 Kerberos 服务端和客户端的部署过程,本章节继续介绍 Kafka 添加 Kerberos 认证的部署流程,及 Java API 操作的注意事项。 sasl.kerberos.service.name 配置的含义 Kafka 添加 Kerberos 部署的核心是 Kafka 服务端的 Principal 配…

基于gensim实现word2vec模型(附案例实战)

目录 什么是word2vec? Word2Vec的原理 gensim实现word2vec模型(实战) 什么是word2vec? Word2Vec是google在2013年推出的一个NLP工具,它的特点是能够将单词转化为向量来表示,这样词与词之间就可以定量的…

20+个很棒的 Python 脚本的集合(迷你项目)

💂 个人网站:【海拥】【摸鱼小游戏】【神级源码资源网站】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的 前…

【软件分析第17讲-学习笔记】程序综合 Program Synthesis

文章目录前言正文程序综合枚举法CEGIS:基于反例的优化约束求解法启发式搜索法统计法基于组件的程序综合 Component-Based Synthesis小结参考文献前言 创作开始时间: 如题,学习一下程序综合 Program Synthesis的相关知识。参考:熊…

AUTOSAR-Fee模块

(73条消息) AUTOSAR-Fee模块_一ye残雪的博客-CSDN博客_fee 配置 0 前言 Fee模块全称Flash EEPROM Emulation Module,属于ECU抽象层 Fee模块本身是脱离硬件的,但是Fee模块可能会引用的Fls模块定制API,所以只能算半抽象 本文中,由于…

数据库高级 III

数据库高级 III 二叉排序树在极端情况下存在的问题 二叉排序树在极端情况下会产生失衡二叉树 失衡二叉树其实是不希望存在的,因为它失去了二叉排序树的查询优势,现在这种失衡二叉树的查询效率和单向链表一样,此时它就是单向链表 数据结构…

14.4、SpringWebFlux-1

14.4、SpringWebFlux-1 14.4.1、前置知识 SpringMVC,SpringBoot,Maven,Java8 新特性 14.4.2、基本介绍 官方文档 Web on Reactive Stack (spring.io) 是 Spring5 添加新的模块,用于 web 开发的,功能 SpringMVC 类…