ffmpeg 学习笔记

ffmpeg 学习笔记

ffmpeg 的名称来自于 MPEG 视频编码标准,其中 ff 表示 Fast Forward,这是一套用于记录、转换数字音频、视频,并能将其转化为流的开源程序。可以轻松地实现多种视频格式之间的相关转换。

ffmpeg 是一个终端的工具,其功能比较强大,许多网站都使用它,例如Google,Facebook,Youtube,优酷,爱奇艺,土豆等。

把一个 .flac 音频转换成 .mp3 格式

ffmpeg -i in.flac -acodec libmp3lame -ar 44100 -ab 320k -ac 2 out.mp3
-acodec : 音频编码器,libmp3lame 表示 MP3 的编码。
-ar 44100 : 设置音频采样率的,
-ab 320k : 指定音频的比特率,默认是128k。
-ac 2 : 设置输出声道的。

把 .webm 格式压缩成指定大小的 .mp4 格式

ffmpeg -i in.webm -s 1920x1080 -pix_fmt yuv420p -vcodec libx264 -preset medium -profile:v high -level:v 4.1 -crf 23 -acodec aac -ar 44100 -ac 2 -b:a 128k out.mp4

参数说明:
一般视频网站采用的是:

  • MP4 封装:H264 视频编码 + AAC 音频编码。
  • WebM 封装:VP8 视频编码 + Vorbis 音频编码,这个谷歌的方案不太好,youtube就是视频这个封装的。
  • OGG 封装:Theora 视频编码 + Vorbis 音频编码,这个完全开源的编码方案,比较好。

-i: 表示后面是数据的文件
-s: 表示视频的宽和高,1080p、720p等
-pix_fmt: pixxel format, 用于设置视频颜色空间的,yuv420p 网络视频基本采用这个值,可以使用 ffmpeg -pix_fmts 获取有哪些格式可以使用。
-vcodec: 表示使用那种视频编码,libx264 表示采用 H264 编码
-preset: 采用那种预设,有十种可选:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo。一般在录制视频时,采用veryfast,这样速度较快,对cpu占用较小,但是体积比较大。压缩视频时采用 veryslow。
-profile:v : 这是指定编码器的设置。可以取值有:Baseline, Extended, Main, High, High 10, High 4:2:2, High 4:4:4 Predictive。越前面的取值,体积越小。
-level:v 4.1 : 一般1080p的视频取值 4.1就好。其取值范围为:1-5.1。
-crf 23 : Constant Rate Factor, 用于控制 码率控制模式的。其取值:0…18…23…28…51,默认值是23,值越小质量越好,0 表示无损,一般我们在 18~28 之间取值。
-acodec : 设置音频编码方式。
-ar
-ac 2 : 表示声道为2。
-b:a 128k : 音频比特率的。

-r 30 : 这是用于设置视频帧率的。

视频清晰度设置

一般而言,码率越高,视频清晰度越高,该软件采用以下三种控制方式
-qp :Constant Quantizer 恒定量化器模式,设置视频的质量,其取值:0…20…40…51,0 表示无损级别。
无损压缩的示例(快速编码)
ffmpeg -i input -vcodec libx264 -preset ultrafast -qp 0 output.mkv

无损压缩的示例(高压缩比)
ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv

-crf Constant Rate Factor:恒定速率因子模式。这个比较好,会自动在人眼看不出的位置降低一些,而在需要的地方增强一些。
-b bitrate:固定目标码率模式。码率和体积都可以是确定的。

VBR Variable Bit Rate 动态比特率。
VBR 的示例
ffmpeg -i input -vcodec libx264 -preset veryslow output

ABR Average Bit Rate 平均比特率。
ABR 的示例
ffmpeg -i input -vcodec libx264 -preset veryslow -b:v 3000k output

CBR Constant Bit Rate 恒定比特率。这种方式没有人会使用的。
CBR的示例
… -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k …

过滤器的使用

过滤器可以对视频进行大小缩放,然后裁剪、旋转图像等。可以使用一系列的过滤器,一个接着一个。

这里我们使用参数 -vf (video filter) 来指定一个过滤器。如果想要修改视频的尺寸,可以使用 scale 后面输入缩放的长度和宽度,中间使用冒号分隔。也可以使用这样的参数 “scale=1024:-1”,让ffmpeg 根据另一个参数帮助自动推算。例如,想要转换成 720p ,可以使用 “scale=-1:720”。

如果想要旋转方向,可以使用 -vf “transpose=2”,其中数字 2 代表不同的旋转方向,便是将视频 90 度逆时针旋转。

不同的过滤器可以组合使用,例如,-vf “scale=256:256,transpose=1”。

想要裁剪可以使用,-vf “crop=400:400💯100”,这里的参数表示为:crop=w:h❌y。表示视频的宽和高,及左上角的坐标位置。也可以使用表达式,例如,crop=iw/3:ih/3,表示使用原始宽高的三分之一。

ffmpeg -i in.avi -c:v libx264 -vf “scale=1024:576” output.mp4

合并多个视频文件

可以现在编辑一个文件,例如
vim mylist.txt
file ‘clip1.mp4’
file ‘clip2.mp4’
file ‘clip3.mp4’

然后使用以下命令
ffmpeg -f concat -i mylist.txt -c copy output.mp4

音频过滤器

ffmpeg -i in.mp4 -af “volume=1.5” out.mp4

其中 af audio filter, volume 表示音量的大小。

提取视频中的视频或音频部分

示例:
我们有一个 mp4 格式的视频,想要提取出来视频的话,可以这样操作:
第一步:
ffprobe in.mp4
用于查看原始的音频和视频的编码等信息

第二步:
ffmpeg -i in.mp4 -vcodec copy -an v.mp4
其中:-an 表示不要音频

当然,如果只想要音频
ffmpeg -i in.mp4 -vn -vcodec copy a.m4a

提取音频中部分

我们一个音频 mp3 格式的,想要获取其中的部分音频用于手机铃声,可以使用
ffmpeg -i in.mp3 -ss 00:01:00 -to 00:01:10 -acodec copy out.mp3
ffmpeg -i in.mp3 -ss 00:01:00 -t 10 -acodec copy out.mp3

-sseof: 流体的末尾,-t 10 表示时间为10秒。

以下三条命令有何不同:
ffmpeg -i in.mp4 -ss 00:01:00 -to 00:01:10 -c copy out.mp4
ffmpeg --ss 00:01:00 i in.mp4 -to 00:01:10 -c copy out.mp4
ffmpeg --ss 00:01:00 i in.mp4 -to 00:01:10 -c copy -copyts out.mp4

第二条命令会启用关键帧技术,会加速操作,但是起始时间和结束时间可能不正确。因此需要使用第三条命令。

其中 -copyts 用于保留时间戳的,这样显示的时间就对了。

连接具有同样音视频编码的视频

ffmpeg -i “concat:01.mp4|02.mp4|03.mp4” -c copy out.mp4

如果其中的格式不同,建议使用 Avidemux 软件。这也是开源免费的,基于 ffmpeg ,更有针对性。

截取视频的某个视频画面

ffmpeg -i in.mp4 -ss 5 -vframes 1 img.jpg

制作 gif 动图

ffmpeg -i in.mp4 -ss 7.5 -to 8.5 -s 640x320 -r 15 out.gif

可以录制视频

但是只能录制视频,没有音频。

不推荐使用 Screen Capture Recorder 软件,原因是很久没有更新了。

推荐使用 OBS Studio 软件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值