当前位置: 首页 > news >正文

【ffmpeg命令基础】视频选项讲解

文章目录

  • 前言
    • 设置输出文件的帧数
    • 设置每秒播放的帧数
      • 设置输出视频的帧率
        • 示例1:更改输出视频的帧率
        • 示例2:将图像序列转换为视频
      • 设置输入视频的帧率
        • 示例3:处理高帧率视频
        • 示例4:处理低帧率视频
      • 同时设置输入和输出帧率
        • 示例5:从高帧率视频创建低帧率输出
      • 设置帧尺寸
      • 示例
        • 示例1:调整视频分辨率
        • 示例2:使用常见分辨率别名
        • 示例3:缩放视频以适应目标分辨率
        • 示例4:保持视频比例缩放
      • 常见分辨率列表
      • -s与简单滤镜的区别
      • 滤镜调整分辨率
      • 区别
      • 禁用视频
      • 设置视频宽高比
      • 用法
        • 设置输出视频的宽高比
      • 示例
        • 示例1:调整宽高比为4:3
        • 示例2:调整宽高比为16:9
      • 注意事项
      • 结合使用示例
        • 示例3:调整宽高比并改变分辨率
        • 示例4:修复错误宽高比
  • 总结


前言

FFmpeg是一款功能强大的多媒体处理工具,广泛用于视频和音频的录制、转换和流处理。对于那些刚接触FFmpeg的新手来说,理解和掌握其众多命令选项是一个重要的起点。本文将详细讲解FFmpeg的基本视频选项,帮助你更好地处理视频文件。我们将介绍如何使用FFmpeg进行视频的帧率调整、分辨率设置、宽高比修正等操作,为你提供基础的FFmpeg命令使用指南。


设置输出文件的帧数

ffmpeg是一个强大的多媒体处理工具,可以用来进行视频和音频的录制、转换、处理等操作。在使用ffmpeg时,-vframes-r是两个常用的参数,但它们的作用不同。

-vframes
-vframes参数用于指定输出视频中的帧数。例如,如果你想从一个视频中提取前10帧,你可以使用-vframes 10。这在处理视频剪辑或制作缩略图时非常有用。

使用-vframes
假设你有一个视频文件input.mp4,你想从中提取前10帧并保存为一个新视频output.mp4

ffmpeg -i input.mp4 -vframes 10 output.mp4

设置每秒播放的帧数

-r选项在FFmpeg中用于指定视频的帧率(frame rate)。帧率是指每秒钟播放的帧数,以帧每秒(fps)为单位。例如,常见的视频帧率有24 fps、30 fps、60 fps等。

-r选项可以用于设置输入视频的帧率或输出视频的帧率。

设置输出视频的帧率

示例1:更改输出视频的帧率

将输入视频input.mp4的帧率更改为24 fps,并输出到output.mp4

ffmpeg -i input.mp4 -r 24 output.mp4
示例2:将图像序列转换为视频

假设你有一组按顺序命名的图像文件(如img001.png, img002.png, …),你想将它们转换为帧率为30 fps的视频:

ffmpeg -r 30 -i img%03d.png output.mp4

这里的img%03d.png表示输入的图像文件名格式,其中%03d是一个三位数字占位符。

设置输入视频的帧率

示例3:处理高帧率视频

如果你有一个高帧率的视频文件input_high_fps.mp4,你想将其帧率降低为15 fps,以便更容易处理:

ffmpeg -r 15 -i input_high_fps.mp4 output.mp4
示例4:处理低帧率视频

如果你有一个低帧率的视频文件input_low_fps.mp4,你想将其帧率提高为60 fps,以便在快速移动的场景中更流畅:

ffmpeg -i input_low_fps.mp4 -r 60 output.mp4

同时设置输入和输出帧率

示例5:从高帧率视频创建低帧率输出

假设你有一个120 fps的视频文件input_120fps.mp4,你想从中提取每秒10帧并保存到新的输出视频output_10fps.mp4

ffmpeg -r 10 -i input_120fps.mp4 -r 10 output_10fps.mp4

在这个示例中,第一个-r 10用于设置输入帧率,第二个-r 10用于设置输出帧率。

这些示例展示了如何使用-r选项来调整视频的帧率,以满足不同的需求。

-s选项在FFmpeg中用于指定输出视频的分辨率(resolution)。分辨率是指视频帧的宽度和高度,以像素为单位。例如,常见的视频分辨率有640x480(标准清晰度),1280x720(高清),1920x1080(全高清)等。

设置帧尺寸

-s选项后面跟随分辨率的宽度和高度,以宽x高的格式表示。例如:

ffmpeg -i input.mp4 -s 1280x720 output.mp4

这个命令将输入视频input.mp4的分辨率调整为1280x720,并输出到output.mp4

示例

示例1:调整视频分辨率

将输入视频input.mp4的分辨率调整为640x480,并保存为output.mp4

ffmpeg -i input.mp4 -s 640x480 output.mp4
示例2:使用常见分辨率别名

FFmpeg还支持一些常见分辨率的别名,例如hd720hd1080等:

ffmpeg -i input.mp4 -s hd720 output.mp4

这个命令将输入视频调整为720p高清分辨率(1280x720)。

示例3:缩放视频以适应目标分辨率

如果你有一个视频input.mp4,想将其分辨率调整为全高清(1920x1080):

ffmpeg -i input.mp4 -s 1920x1080 output.mp4
示例4:保持视频比例缩放

如果你希望在调整分辨率时保持视频的宽高比,可以使用scale滤镜。比如,将视频宽度调整为1280像素,高度按比例调整:

ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4

其中,-1表示FFmpeg将根据原始视频的宽高比自动计算高度。

常见分辨率列表

  • 640x360: 标清 16:9
  • 640x480: 标清 4:3
  • 1280x720: 高清 720p
  • 1920x1080: 全高清 1080p
  • 3840x2160: 4K 超高清

通过这些示例,你可以了解到如何使用-s选项来调整视频的分辨率,以满足不同的输出需求。

-s与简单滤镜的区别

-s选项和使用滤镜调整分辨率在FFmpeg中都有调整视频分辨率的作用,但它们的使用场景和灵活性有所不同。

-s 选项

特点:

  1. 简单易用-s选项直接指定输出分辨率,格式为宽x高
  2. 基本调整:适用于简单的分辨率调整,没有其他图像处理需求的情况下。
  3. 命令简洁:适合快速的分辨率调整操作。

示例:

ffmpeg -i input.mp4 -s 1280x720 output.mp4

这个命令将输入视频input.mp4的分辨率调整为1280x720,并输出到output.mp4

滤镜调整分辨率

特点:

  1. 灵活性高:通过使用scale滤镜,可以精细控制分辨率调整过程。
  2. 高级功能:可以结合其他滤镜进行复杂的图像处理(如裁剪、旋转等)。
  3. 保持比例:可以动态调整分辨率,保持原始视频的宽高比。

示例
基本调整

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

这个命令通过scale滤镜将输入视频input.mp4的分辨率调整为1280x720。

动态调整,保持宽高比

ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4

这个命令将视频宽度调整为1280像素,高度根据原始比例自动计算。

区别

  1. 使用方式

    • -s直接在命令行参数中指定输出分辨率。
    • 滤镜使用-vf选项,并在滤镜表达式中指定调整逻辑。
  2. 灵活性

    • -s相对简单,适用于基础的分辨率调整。
    • 滤镜方式更灵活,支持复杂的图像处理需求。
  3. 功能扩展

    • -s主要用于分辨率调整。
    • 滤镜方式可以组合多个滤镜,进行更多图像处理,如裁剪、旋转、叠加等。

禁用视频

使用-vn可以把你的输入/输出的视频变成没有视频流的,只剩下音频/字幕/音频加字幕

ffmpeg -i test.mp4 -vn out.mp3

设置视频宽高比

在FFmpeg中,-aspect选项用于指定视频的显示宽高比(aspect ratio)。显示宽高比是指视频显示时的宽度与高度的比例,而不是实际的视频分辨率。常见的宽高比有4:3、16:9等。

用法

设置输出视频的宽高比

你可以使用-aspect选项来设置输出视频的宽高比。例如,如果你想将输出视频的宽高比设置为16:9,可以这样做:

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

示例

示例1:调整宽高比为4:3

将输入视频input.mp4的宽高比调整为4:3,并输出到output.mp4

ffmpeg -i input.mp4 -aspect 4:3 output.mp4
示例2:调整宽高比为16:9

将输入视频input.mp4的宽高比调整为16:9,并输出到output.mp4

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

注意事项

  1. -aspect只改变显示比例,不改变实际分辨率-aspect选项只会改变视频的显示比例元数据,而不会改变实际的视频分辨率。如果你希望同时改变分辨率,可以结合-vf scale使用。

  2. 播放器支持:大多数现代播放器支持根据视频的宽高比元数据调整显示,但一些旧播放器可能会忽略这一设置。

结合使用示例

示例3:调整宽高比并改变分辨率

假设你有一个分辨率为1920x1080的视频,你希望将其调整为640x360,同时保持16:9的宽高比:

ffmpeg -i input.mp4 -vf scale=640:360 -aspect 16:9 output.mp4

这个命令将视频的分辨率调整为640x360,并将宽高比元数据设置为16:9。

示例4:修复错误宽高比

如果你的输入视频有错误的宽高比元数据,你可以使用-aspect选项修复它。例如,如果视频被错误地标记为4:3,但实际应该是16:9:

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

通过了解-aspect选项的使用方法和适用场景,你可以更好地控制视频的显示比例,确保其在各种设备和播放器上的正确显示。


总结

通过学习本文中的基本视频选项,你已经掌握了如何使用FFmpeg进行视频帧率调整(-r)、分辨率设置(-s)、以及宽高比修正(-aspect)等操作。这些选项是FFmpeg处理视频文件的基础工具,能够帮助你灵活地调整视频的播放效果和显示比例。无论是对视频进行简单的分辨率变换,还是修正视频的显示宽高比,这些命令选项都能够满足你的需求。掌握这些基本视频选项,是你深入学习和使用FFmpeg的第一步。通过不断练习和探索,你将能够更高效地处理和优化多媒体文件,充分发挥FFmpeg的强大功能。

相关文章:

【ffmpeg命令基础】视频选项讲解

文章目录 前言设置输出文件的帧数设置每秒播放的帧数设置输出视频的帧率示例1:更改输出视频的帧率示例2:将图像序列转换为视频 设置输入视频的帧率示例3:处理高帧率视频示例4:处理低帧率视频 同时设置输入和输出帧率示例5&#xf…...

使用uniapp开发小程序(基础篇)

本文章只介绍微信小程序的开发流程,如果需要了解其他平台的开发的流程的话,后续根据情况更新相应的文章,也可以根据uniapp官网的链接了解不同平台的开发流程 HBuilderX使用:https://uniapp.dcloud.net.cn/quickstart-hx.html 开发工具 开始…...

vue3【详解】组合式函数

什么是组合式函数? 利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数,用于实现逻辑复用,类似 react18 中的 hook 函数名称 – 以 use 开头,采用驼峰命名,如 useTitle参数 – 建议使用 toValue() 处理(…...

微服务实战系列之玩转Docker(六)

前言 刚进入大暑,“清凉不肯来,烈日不肯暮”,空调开到晚,还是满身汗。——碎碎念 我们知道,仓库可见于不同领域,比如粮食仓库、数据仓库。在容器领域,自然也有镜像仓库(registry&…...

Python题解Leetcode Hot100之动态规划

动态规划解题步骤-5部曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到…...

你了解GD32 MCU上下电要求吗

你了解GD32 MCU的上下电要求吗?MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例,上电/掉电复位波形如如下图所示。 上电过程中,VDD/VDDA电压上电爬坡,当电压高于VPOR(上电复位电压)MCU开始启动&a…...

二、【Python】入门 - 【PyCharm】安装教程

往期博主文章分享文章: 【机器学习】专栏http://t.csdnimg.cn/sQBvw 目录 第一步:PyCharm下载 第二步:安装(点击安装包打开下图页面) 第三步:科学使用,请前往下载最新工具及教程&#xff1a…...

2、程序设计语言基础知识

这一章节的内容在我们的软件设计师考试当中,考的题型比较固定,基本都是选择题,分值大概在2~4分左右。 而且考的还多是程序设计语言的一些基本语法,特别是这两年比较火的Python。 所以对于有一定要编程基础的即使本章的内容不学习&…...

ARM/Linux嵌入式面经(十八):TP-Link联洲

文章目录 虚拟内存,页表,copy on write面试题1:面试题2:面试题3:进程和线程的区别红黑树和b+树的应用红黑树的应用B+树的应用视频会议用了哪些协议1. H.323协议2. SIP协议(会话发起协议)3. WebRTC(网页实时通信)4. 其他协议io多路复用(select,poll,epoll)面试题li…...

解读vue3源码-响应式篇2

提示:看到我 请让我滚去学习 文章目录 vue3源码剖析reactivereactive使用proxy代理一个对象1.首先我们会走isObject(target)判断,我们reactive全家桶仅对对象类型有效(对象、数组和 Map、Set 这样的集合类型),而对 str…...

【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS

1. 中间件 1.1 介绍(ChatGPT抄的,大致可以理解) 一种机制,用于在处理请求和响应之前对其进行拦截、处理或修改。中间件可以在应用程序的请求处理管道中插入自定义逻辑,以实现一些通用的功能,如身份验证、…...

centos7安装es及简单使用

为了方便日后查看,简单记录下! 【启动es前,需要调整这个配置文件(/opt/elasticsearch-6.3.0/config/elasticsearch.yml)的两处ip地址,同时访问页面地址的ip:9200时,ip地址也对应修改】 【启动kibana前,需要调整这个配置文件(/opt/kibana-6.3.0/config/k…...

2024年自动驾驶SLAM面试题及答案(更新中)

自动驾驶中的SLAM(Simultaneous Localization and Mapping,即同步定位与地图构建)是关键技术,它能够让车辆在未知环境中进行自主定位和地图建构。秋招来临之际,相信大家都已经在忙碌的准备当中了,尤其是应届…...

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记(上) 参考:pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页,网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…...

数学建模--图论与最短路径

目录 图论与最短路径问题 最短路径问题定义 常用的最短路径算法 Dijkstra算法 Floyd算法 Bellman-Ford算法 SPFA算法 应用实例 结论 延伸 如何在实际应用中优化Dijkstra算法以提高效率? 数据结构优化: 边的优化: 并行计算&…...

FLINK-checkpoint失败原因及处理方式

在 Flink 或其他分布式数据处理系统中,Checkpoint 失败可能由多种原因引起。以下是一些常见的原因: 资源不足: 如果 TaskManager 的内存或磁盘空间不足,可能无法完成状态的快照,导致 Checkpoint 失败。 网络问题&am…...

Hbase映射为Hive外表

作者:振鹭 Hbase对应Hive外表 (背景:在做数据ETL中,可能原始数据在列式存储Hbase中,这个时候,如果我们想清洗数据,可以考虑把Hbase表映射为Hive的外表,然后使用Hive的HQL来清除处理数据) 1. …...

洛谷P1002(过河卒)题解

题目传送门 思路 直接爆搜会TLE,所以考虑进行DP。 由于卒只可以从左边和上面走,所以走到(i,j)的路程总数为从上面走的路程总数加上从左边走的路程总数。我们用dp[i][j]表示从起点走到(i,j)的路程总数,那么状态转移方程为: dp[…...

微信小程序 async-validator 表单验证 第三方包

async-validator 是一个基于 JavaScript 的表单验证库,支持异步验证规则和自定义验证规则 主流的 UI 组件库 Ant-design 和 Element 中的表单验证都是基于 async-validator 使用 async-validator 可以方便地 构建表单中逻辑,使得错误提示信息更加友好和灵…...

马克·扎克伯格解释为何开源AI对开发者有利

Meta 今天发布了 Llama 3.1 系列人工智能模型,在人工智能领域取得了重大进展,其性能可与领先的闭源模型相媲美。值得一提的是,在多项人工智能基准测试中,Llama 3.1 405B 模型的性能超过了 OpenAI 的 GPT-4o 和 Claude 3.5 Sonnet。…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...