一,基本概念
容器 ,视频文件本身就是所谓容器,一般一面有以下几部分构成,包括视频,音频,字幕,附加信息等
常用如下格式
1
2
3
4
5mp4
mkv
webm
avi
wav命令查看支持的容器
1
ffmpeg -formats
编码格式,视频、音频、字幕都有各自的编码格式,每类格式又有相应的属性,比如视频的波特率,分辨率,长度等。
常用的视频格式有:
1
2
3
4
5h264 ---有版权费
h265 ---有版权费
vp8 ---无版权费
vp9 ---无版权费
av1 ---无版权费常用音频格式有:
1
2
3mp3 ----有损音质,占用空间小
aac ----有损音质,占用空间小
flac ----无损音质,占用空间大常用字幕格式有:
1
2
3srt
ssa
assffmpeg命令查看支持的格式
1
ffmpeg -codecs
编码解码器,是实现某种格式的库文件,每种格式可能有多种编码库来实现,常用编码库
1
2
3
4
5
6libx264 --- h264编码库
nvenc --- 基于nvidia GPU的 h264编码库
h264_videotoolbox ---正版mac电脑上支持gpu的h264编码库
libx265 ---开源的hevc编码库
libvpx ---vp8和vp9 编码库
libaom ---av1编码库
二,ffmpeg 工作流程描述
1 | _______ ______________ |
三,ffmpeg命令组成部分,整体分为5部分
命令组成部分
1
2
3
4
5
6ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
#global_options ---全局参数,可省略
#input_file_options ---输入文件参数,可省略
#input_url ---输入文件路径
#output_file_options ---输出文件参数,可省略
#output_url ---输出文件路径常用命令参数
1
2
3
4
5
6
7
8
9
10
11
12-c: 指定编码器
-c copy: 直接复制,不经过重新编码(这样比较快)
-c:v: 指定视频编码器
-c:a: 指定音频编码器
-i: 指定输入文件
-an: 去除音频流
-vn: 去除视频流
-preset: 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y: 不经过确认,输出时直接覆盖同名文件。
-t: 指定音频的时长
-to: 指定到某个时间结束
-ss: 指定从某个时间开始
四,常用例子
查看文件信息
1
2ffmpeg -i input.mp4
ffmpeg -i input.mp4 -hide_banner #只显示元信息转换编码格式
1
ffmpeg -i input.file -c:v libx264 output.mp4 #指定编码器为libx264
转换容器格式
1
ffmpeg -i input.mp4 -c copy output.webm
调整比特率
1
2#码率在964K~3856K,缓冲区域为2000K
ffmpeg -i input.mp4 -minrate 964K -maxrate 3856K -bufsize 2000K output.mp4改变屏幕分辨率
1
2# -vf 设置屏幕分辨率,其中scale=480:-1,意思是 撑满宽度(设置为480),高度等比缩放
ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4提取音频
1
ffmpeg -i input.mp4 -vn -c:a copy output.aac
添加音轨
1
2#将两个文件合并为一个
ffmpeg -i input.aac -i input.mp4 output.mp4截图
1
2
3
4
5#区间截图,其中%3d为输出文件名占位符
ffmpeg -y -i input.mp4 -ss 00:01:00 -t 00:00:01 output_%3d.jpg
#截取某个时间点图片,vframes截取1帧,-q:v设置图片质量,越小图片质量越高
ffmpeg -ss 01:00:00 -i input -vframes 1 -q:v 2 output.jpg截取部分视频
1
2ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
ffmpeg -ss [start] -i [input] -to [end] -c copy [output]音频添加封面
1
2# -loop 1 指图片无线循环,-shortest参数表示音频文件结束,输出视频就结束
ffmpeg -loop 1 -i cover.jpg -i input.mp3 -c:v libx264 -c:a aac -b:a 192k -shortest output.mp4