【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的强大功能。

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

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

相关文章

QtCreator和QtDesignStudio最佳实践

一、QTC和QDS工作流概述 很多初学者对 QDS(Qt Design Studio) 和 QTC(Qt Creator)如何配合经常存有疑问,本文介绍具体的工作流程。 工作流程 1.产品设计:通过PS、Figma、XD等专业工具设计页面视觉和原型。 2.QDS 原型制作:导入设计源文件、…

C++五子棋(未做完,但能玩,而且还不错)

代码放下面了&#xff0c;关于步骤介绍的我以后再完善一下。 #include<bits/stdc.h> #include<cstdio> #include<cstdlib> #include<ctime> #include<windows.h> #include<stdlib.h> #include<time.h> #define random(x) (rand()%x…

go 用字面量的方式创建对象

在 Go 语言中&#xff0c;可以使用字面量的方式创建对象&#xff08;结构体&#xff09;。这种方法可以简洁地初始化结构体&#xff0c;并且可以在定义和赋值时同时完成。 下面是一个示例代码&#xff0c;展示了如何使用字面量的方式创建一个结构体对象&#xff1a; package …

线程局部变量共享 -- 使用ThreadLocal解决该需求

1.创建容器类 //容器类 public class Contain {private static final ThreadLocal<DataPackage> local;static {local new ThreadLocal<>();}public static ThreadLocal<DataPackage> getLocal() {return local;} } 2.创建数据包类 //数据包类 public cl…

react中如何mock数据

1.需求说明 因为前后端分离开发项目&#xff0c;就会存在前端静态页面写好了&#xff0c;后端数据接口还没写好&#xff1b;这时候前端就需要自己定义数据来使用。 定义数据有三种方式&#xff1a;直接写死数据、使用mock软件、json-server工具 这里讲解通过json-server工具…

脉冲编码调制(PCM,Pulse Code Modulation)简介

脉冲编码调制(PCM,Pulse Code Modulation) 脉冲编码调制&#xff08;PCM&#xff0c;Pulse Code Modulation&#xff09;是一种将模拟信号转换为数字信号的技术。在音频处理、电话通信以及其他许多领域都有广泛应用。PCM通过采样、量化、编码等三个主要步骤将模拟信号转换为数…

C#基础入门:从安装到第一个Hello World程序

在编程的世界里&#xff0c;C#是一种备受推崇的编程语言&#xff0c;它以其强大的功能、面向对象的特性和对.NET框架的深度集成而闻名。无论你是编程新手还是寻求新挑战的资深开发者&#xff0c;C#都是一个值得探索的领域。本文将带你踏上C#编程的旅程&#xff0c;从安装必要的…

如何通过一条SQL变更多个分库分表?

数据库发展到今天&#xff0c;分库分表已经不是什么新鲜话题了&#xff0c;传统的单节点数据库架构在数据量和访问频次达到一定规模时&#xff0c;会出现性能瓶颈和扩展性问题&#xff0c;而分库分表技术通过将数据分散到多个数据库实例中来分担负载&#xff0c;从而提升系统的…

力扣第二十九题——两数相除

内容介绍 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#xff0c;-…

Electron的入门介绍与使用(1)共30节

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门指南​ Electron 是网页应用 …

IEDA怎么把springboot项目 启动多个

利用Idea提供的Edit Configurations配置应用参数。 点击Modify Options进行添加应用参数&#xff1a; 确保这里勾选

宿舍生活新升级:智能指纹锁的便捷体验(嘉立创EDA设计)

宿舍生活新升级&#xff1a;智能指纹锁的便捷体验 引言 宿舍生活总是充满挑战和乐趣&#xff0c;但有时也会因为一些小事情而变得复杂。比如&#xff0c;忘记带钥匙或者需要频繁地给室友开门。随着科技的发展&#xff0c;智能设备逐渐走进我们的生活&#xff0c;为日常带来便…

每日好题(2)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) {int arr[6] { 1,2,3,4,5,6 };char* p arr;int sz sizeof(arr) / sizeof(arr[0]);for (int a 0; a < sz; a){printf("%d\n", *p);p 4;}return 0; }这串代码遍历打印数组的结果是没…

在 VM 虚拟机中安装 openEuler + 桌面

在 VM 虚拟机中安装 openEuler 1 介绍2 步骤语言Root 账户安装位置网络和主机名自动检索到【推荐】手动配置网络 软件选择安装完成登录测试网络curl ip / ping ipip link show / ip a如网络不通&#xff0c;可检查网卡状态和dns配置 安装命令设置以图形界面的方式启动【dde】第…

Python Django功能强大的扩展库之channels使用详解

概要 随着实时 web 应用程序的兴起,传统的同步 web 框架已经无法满足高并发和实时通信的需求。Django Channels 是 Django 的一个扩展,旨在将 Django 从一个同步 HTTP 框架转变为一个支持 WebSockets、HTTP2 和其他协议的异步框架。它不仅能够处理传统的 HTTP 请求,还可以处…

封装分页组件(Pagination)v2版本

使用须知&#xff1a;基于项目内已安装vue2eleme-ui&#xff0c; 则可以百分百直接套用&#xff0c;使用简介明了&#xff01;&#xff01; 一、封装component组件 component/Pagination/index.js <template><div :class"{ hidden: hidden }" class"…

动态规划之三—— 从暴力递归到动态规划_数字字符串转字母字符串

题目&#xff1a; 规定1 和A 对应&#xff0c;2 和B对应&#xff0c;3 和C 对应 ... 那么一个数字字符串&#xff0c;比如“111” 就可以转化为&#xff1a;“AAA” 、“KA”、“AK” 。要求&#xff1a;给定一个只有数字字符组成的字符串str&#xff0c; 返回有多少种转化结果…

客户端与服务器通讯详解(4):支持实时通讯的协议

在之前的章节中&#xff0c;贝格前端工场给大家分享了客户端与服务器通讯详解定义、流程、协议、方式。本次重点分享实时通讯方式是什么&#xff0c;该如何实现&#xff0c;有哪些协议&#xff0c;欢迎大家点赞评论转发。 一、客户端与服务器实时通讯是什么 客户端与服务器实…

SQL labs-SQL注入(二)

环境搭建参考 SQL注入&#xff08;一&#xff09; 一&#xff0c;SQL labs-less2。 http://192.168.61.206:8001/Less-2/?id-1 union select 1,2,group_concat(username , password) from users-- 与第一关没什么太大的不同&#xff0c;唯一区别就是闭合方式为数字型。 二…

【深度学习】大模型中的LoRA的重要参数理解,dim维度和lora_alpha

peft LoRA LoRA&#xff08;Low-Rank Adaptation&#xff09;的重要参数如下&#xff1a; init_lora_weights&#xff1a;用于初始化LoRA权重的方法&#xff0c;有几种选择&#xff1a; "kaiming_uniform"&#xff1a;默认的初始化方法&#xff0c;使用Kaiming均匀初…