下载

下载地址:https://ffmpeg.org/download.html

然后按照下图点击,找到Release部分下载一个即可。

安装

所谓安装就是解压并配置“path”环境变量
将安装包解压至任意目录,比如我这里是D:\Program\ffmpeg-5.0.1-full_build
按照以下顺序点击:“此电脑(右键)——属性——高级系统设置——环境变量”
然后把ffmpeg.exe所在路径,即D:\Program\ffmpeg-5.0.1-full_build\bin添加到Path中,之后一路确定即可。

验证安装:
打开cmd,输入ffmpeg,出现正常的程序说明,就表明安装成功了

使用

官方使用说明:https://ffmpeg.org/ffmpeg.html

查看视频信息

ffmpeg -i input.mp4

显示如下:

从上面可以得到如下信息:

视频编码:h264
色彩格式:yuvj420p
色域范围:bt709
分辨率:1080x1920(width x height)
视频码率:14309 kbps
帧率:30 fps
音频编码:aac
音频码率:115 kbps
音频采样率:44100 Hz

最简单用法

ffmpeg -i input.mp4 -y output.avi

-i:指定输入
-y:输出如果重名直接覆盖

以拷贝的形式转格式,不重新编码,所以速度很快

ffmpeg -i input.mp4 -vcodec copy -acodec copy output.avi

-vcodec copy:拷贝视频
-acodec copy:拷贝音频

改变帧率

ffmpeg -i input.mp4 -r 10 -y output.mp4

-r 10:将输出帧率改为10 fps

改变编码

比如使用h265编码

ffmpeg -i input.mp4 -vcodec libx265 -y output.mp4

之后再查看视频信息可以看到(hevc = h265):

Stream #0:00x1: Video: hevc (Main) (hev1 / 0x31766568)

控制转码质量

ffmpeg -i input.mp4 -crf 35 -y output.mp4

ffmpeg -i input.mp4 -qp 30 -y output.mp4

QP(Quantization Parameters)和CRF(Constant Rate Factor)都是数值越小画质越好,数值越大画质越差。

QP在整个编码中使用相同的量化参数。

而CRF则具备自适应调节QP的能力,在画面运动比较强的时候使用高QP,在画面运动比较小的时候使用低QP。因为当画面运动比较强的时候,人的注意力常常不会被画质所吸引,所以QP大一些,也就是说画质差一些,不会造成太大的主观体验上的影响;反之当画面运动很小时,人的注意力有充分的空闲去注意画质问题,此时需要QP小一些,画质好一些,以避免带来糟糕的主观体验。另外与CRF名字呼应的一点,画面运动强时,视频片段倾向于有比较高的码率,使用大的QP有助于降低码率;画面运动小时,视频片段倾向于有比较低的码率,使用小QP可以提升一些码率,所以整体而言CRF会起到稳定码率的作用。

一般来说,使用CRF的情况多于QP,如果不是对QP有特定需求,那么首选CRF模式。在几乎相同的视觉效果的情况下,CRF一般比QP能节省一些码率。

关于CRF的取值范围和默认值可参考如下:

QP在libx264情况下取值范围也是0-51。

控制输出码率

ffmpeg -i input.mp4 -b:v 5M -y c.mp4

其中关键性的参数是-b:v 5M,指输出码率限制在5M bps。

但请注意,这个模式只是控制视频最终的码率,并不意味着视频中码率一直保持固定值,事实上在这个模式下,视频码率变化反而会有一些不受控,有时(特别是每个转场后clip的初始一些帧)会特别低。

时序裁剪

ffmpeg -i input.mp4 -ss 0:0:5 -t 0:0:4 -y output.mp4

-ss:指定截取的起始时间点,格式是hh:mm:ss
-t:截取的持续时间(duration),格式也是hh:mm:ss;或者简单写一个数字,单位是秒。

空间裁剪

ffmpeg -i input.mp4 -vf crop=500:1000:0:0 -y output.mp4

-vf 表示设置video相关的filters
crop后面的参数格式是width:height: x:y。width和height是输出视频的宽高;x,y是输出视频的左上顶点的坐标。

旋转视频

ffmpeg -i input.mp4 -vf rotate=PI/4 -y output.mp4

rotate:以视频中心为旋转点,顺时针旋转视频,视频原本的宽高保持不变,所以旋转后视频会有内容缺失以及黑边。

缩放视频

ffmpeg -i input.mp4 -vf scale=360:540 -y output.mp4
ffmpeg -i input.mp4 -vf scale=360:-1-y output.mp4

scale:格式是 width:height,其中一项可以设置成-1,此时会根据另一条边的比例自动计算。

抽帧

ffmpeg -i input.mp4 .\temp\frame_%3d.png

帧号从1开始计数,路径必须已经存在。

ffmpeg -i input.mp4 -r 1 .\temp\frame_%3d.png

-r 1:每秒抽取1帧,帧号仍然从1开始连续计数。(第一帧看起来似乎有点重复)

ffmpeg -i input.mp4 -vframes 10 .\temp\frame_%3d.png

-vframes 10:指定抽帧数量,总共抽10帧。

ffmpeg -i input.mp4 -vf select=eq(pict_type\,I) -vsync vfr .\temp2\frame_%3d.png
ffmpeg -i input.mp4 -vf select=eq(pict_type\,P) -vsync vfr .\temp2\frame_%3d.png
ffmpeg -i input.mp4 -vf select=eq(pict_type\,B) -vsync vfr .\temp2\frame_%3d.png

提取IPB帧,其中-vsync vfr选项可以删除掉重复帧,不然提取出来的结果有大量重复图片。
但还是注意,这种情况下ffmpeg抽取的帧仍然是从1开始连续计数,所以就无法知道单独抽取出来的IPB帧真实的帧号序列。可以使用下面命令打印帧类型,然后手动重命名。

ffprobe -i input.mp4 -select_streams v -show_entries frame=pict_type

上述命令打印结果如下,想要把帧号对应起来,需要比较多的手动操作:

[FRAME]
pict_type=I
[SIDE_DATA]
[/SIDE_DATA]
[/FRAME]
[FRAME]
pict_type=B
[/FRAME]
[FRAME]
pict_type=P
[/FRAME]
[FRAME]
pict_type=B
[/FRAME]

IPB帧含义简介:

  • I帧:表示关键帧,是最完整的帧画面,一般视频封面都选择I帧。
  • P帧:单预测帧,利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码。
  • B帧:双向预测帧,利用双向帧进行预测编码。

单独提取视频

ffmpeg -i input.mp4 -an -y video.mp4
ffmpeg -i input.mp4 -an -vcodec copy -y video.mp4

-an:这个选项用于去掉音频(disable audio),剩下的就是单独视频了。
为了使提取的视频与源视频一样,可加上-vcodec copy选项

单独提取音频

ffmpeg -i input.mp4 -vn -y audio.mp3
ffmpeg -i input.mp4 -vn -acodec copy -y audio.aac

-vn:这个选项用于去掉视频(disable video),剩下的就是单独音频。
另注意-acodec copy选项只能用于.aac格式,不能用于mp3格式。

合并音视频

ffmpeg -i video.mp4 -i audio.mp3 -y output.mp4
ffmpeg -i video.mp4 -i audio.mp3 -vcodec copy -acodec copy -y output.mp4

设置两个输入一个输出即可,两个输入分别是视频和音频。如果不想重新对输入做编码,那么使用-vcodec copy -acodec copy选项。
最终输出视频的长度是两个文件较长者,比如mp3长于mp4,那么mp4播放结束后固定在最后一帧,继续播mp3

ffmpeg -i video.mp4 -i audio.mp3 -shortest -y output.mp4

-shortest:以音频和视频文件中较短的作为输出长度。

替换源视频中的音频

ffmpeg -i input.mp4 -i audio.mp3 -map 0:v:0 -map 1:a:0 -y output.mp4

-map 0:v:0将第一个(索引0)视频流从输入映射到输出中的第一个(索引0)视频流。
-map 1:a:0将第二个(索引1)音频流从输入映射到输出中的第一个(索引0)音频流。

合并多段视频

mpeg格式文件可以直接合并,但是不通用。
一般可以选择将视频转化为 ts 流,然后再合并。

ffmpeg -i input.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i input2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy -absf aac_adtstoasc -y output.mp4

图片合成视频

ffmpeg -i .\temp\frame_%3d.png -y output.mp4

上面是最简单的命令,默认帧率是25,一般需要设置个帧率。

ffmpeg -r 30 -i .\temp\frame_%3d.png -y output.mp4

设置帧率的话,把-r 30放在-i xxx前面或者后面代表的含义不一样:

  • -r放在前面的话既指定图片输入的帧率,也指定视频输出的帧率。
  • -r放在后面的话仅指定视频输出的帧率。
ffmpeg -r 30 -i .\temp\frame_%3d.png -r 60 -y output.mp4

比如,如果使用300张图片,使用上述命令合成视频,那么图片以30fps送入,视频以60fps输出,所以最后结果是60fps * 10s的视频,视频包含600帧。至于多出来的帧是重复帧还是插帧得来的,不是太清楚。

ffmpeg -r 30 -i .\temp\frame_%3d.png -i audio.aac -y output.mp4

可以进一步使用上面命令把音频也加上。

视频更换预览封面

ffmpeg -i input.mp4 -i cover.png -map 0 -map 1 -c copy -disposition:v:1 attached_pic -y output.mp4

用上面命令可以把视频的预览封面改成cover.png

图片+声音,生成视频

ffmpeg -loop 1 -i image.png -i audio.aac -shortest -y output.mp4

-loop 1表示图片无限循环,-shortest表示视频持续到音频结束。

转gif

ffmpeg -i input.mp4 -y output.gif
ffmpeg -i input.mp4 -s 540:960 -y output.gif

直接改变后缀就可以实现输出gif的目的,-s 540:960可以改输出分辨率,格式是W:H或者WxH

改变色彩格式(pix_fmt)

ffmpeg -i input.mp4 -pix_fmt yuv422p -y output.mp4

有时候Windows下合成的视频放到Mac上不能播放,可能就是受色彩格式影响,改变一下色彩格式就能解决。

查看每种编码器支持的色彩格式,可以使用如下命令:

ffmpeg -h encoder=libx264

打印的信息有点长,从信息中可以扒拉出libx264支持的色彩格式:

Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21 yuv420p10le yuv422p10le yuv444p10le nv20le gray gray10le

libx265:

Supported pixel formats: yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p gbrp yuv420p10le yuv422p10le yuv444p10le gbrp10le yuv420p12le yuv422p12le yuv444p12le gbrp12le gray gray10le gray12le

参考资料:

FFmpeg 视频处理入门教程
FFmpeg的安装与基础使用教程
CRF Guide (Constant Rate Factor in x264, x265 and libvpx)
Understanding Rate Control Modes (x264, x265, vpx)
FFmpeg VBR Settings
H.264 Video Encoding Guide
you shouldn’t use ABR ever.

ffmpeg安装及使用相关推荐

  1. ffmpeg运行在服务器上,FFMPEG安装在服务器上

    我有一个在线服务器(共享主机方案)在Linux中,我不知道很多关于Linux的东西,我正在尝试安装ffmpeg.FFMPEG安装在服务器上 当安装正在运行我得到这个消息,并停止安装... Instal ...

  2. linux下ts转mp4,ffmpeg安装及实现视频格式的转换、分片(ts m3u8)

    1.简介 FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案 2.相关 系统版本:Cent ...

  3. ffmpeg 安装bzlib_centos6中yum安装ffmpeg

    本章中为虚拟环境所以防火墙是关闭的,线上的防火墙可添加或酌情修改 -A INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT ...

  4. 音视频开发三:FFmpeg安装与常用命令

    前言:在不同平台下安装FFmpeg 1.mac系统下安装ffmpeg. 打开terminal,运行:brew install ffmpeg 安装完后,terminal中输入:ffmpeg,出现下面提示 ...

  5. 2.ffmpeg安装(Ubuntu20.04 )

    Ubuntu20.04安装ffmpeg 1.下载源码包 2.解压 安装依赖库 3.编译 3.1 安装 yasm 3.2 配置 3.3 编译安装 4.添加环境变量 4.1 修改环境变量 4.2 在文件中 ...

  6. CentOS 7.6 FFMPEG安装指北

    文章目录 1 前言 2 工作准备 2.1 软件及工具 2.1.1 FFmpeg 2.1.2 YASM 2.1.3 辅助工具 3 安装步骤 3.1 上传安装包 3.2 安装YASM 3.3 安装FFmp ...

  7. 三、FFmpeg安装

    1. FFmpeg介绍 FFmpeg是一个完整的.跨平台的解决方案,用于记录.转换和流化音/视频. FFmpeg 采用 LGPL 或 GPL 许可证,提供了录制.转换及流化音/视频的完整解决方案.其包 ...

  8. 【最新】windows电脑FFmpeg安装教程手把手详解

    [最新]FFmpeg安装教程手把手详解 写在前面 一.下载&解压 二.配置环境变量 1.配置系统环境变量 额外补充 写在前面 本文以 Windows 64 位操作系统为例演示 一.下载& ...

  9. 【音视频】Ubuntu环境安装以及ffmpeg安装

    文章目录 前言 工具说明: 一.VMware和Ubuntu安装 二.ubuntu安装常规设置 1.设置root用户密码 2.数据源设置 1)查看数据源文件 2)修改数据源地址 3. 更新数据 4. 安 ...

  10. linux ffmpeg 安装

    linux ffmpeg 安装 ffmpeg 安装 不会吧 这都22 年了还有人问ffmpeg 安装 如果需要音频 需要安装libmp3lame 不然会报错 ERROR: libmp3lame > ...

最新文章

  1. java opencv4.40图片实现人脸识别(2)
  2. 用栈来表示队列,用队列来表示栈
  3. 面向对象_3-3编程练习
  4. POSIX正则表达式 验证电子邮件地址
  5. 也谈BIO | NIO | AIO (Java版--转)
  6. ng-controller and ng-model的工作原理
  7. 简易计算器 java_终于写出一个简单的计算器了
  8. 手工sql注入常规总结
  9. Android 系统 (130)---ODM 开发用户常见需求文档(四)
  10. java在线支付---13.java在线支付所有源码:
  11. python numpy 数据类型为python对象-关于Numpy数据类型对象(dtype)使用详解
  12. 计算机视觉基本研究方向
  13. 【EasyPR】Linux安装使用EasyPR开源车牌识别系统
  14. 产品经理工具之软件篇
  15. Matlab 数据类型
  16. 51单片机--时钟芯片ds1302
  17. exchange 服务器设置自动答复,Exchange自动回复设置配置
  18. 北航计算机学院院长 孙,孙磊磊-北京航空航天大学计算机学院
  19. java ssh实现原理_SSH三大框架的工作原理及流程
  20. html5+canvas+九宫格,javascript+canvas制作九宫格小程序

热门文章

  1. windows host + linux guest
  2. 编译和运行openfire记录
  3. 反向代理服务器(转)
  4. [ Linux 长征路第四篇 ] 开发工具 vim的使用 gcc/g++的使用
  5. 心情word 官方
  6. MyBatis、MyBatisPlus转义数据库关键字
  7. 双目立体匹配_StereoNet网络
  8. Mac应用程序无法打开或文件损坏的处理方法,Mac任何来源开启教程
  9. day5——使用CSS美化网页
  10. 我的2020年 ——回忆录