ffmpeg笔记
1. h264_mp4toannexb使用
h264有两种封装,
一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中,vlc里打开编码器信息中显示h264;
一种是mp4模式,一般mp4 ,mkv会有,没有startcode,SPS和PPS以及其它信息被封装在container中,每一个frame前面是这个frame的长度,vlc里打开编码器信息中显示avc1。
很多解码器只支持annexb这种模式,因此需要将mp4做转换
2. mp4转h264裸流
ffmpeg -i input.mp4 -vcodec h264 output.h264
3. h264转mp4
ffmpeg -i input.h264 -vcodec mpeg4 output.mp4
4.视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容
$ ffmpeg -formats 查看 FFmpeg 支持的容器
$ ffmpeg -codecs 查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内 v[h264,h265,vp8,vp9,av1] a[mp3,aac]
$ ffmpeg -encoders v[libx264,nvenc,libx265,libvpx, libaom] a[libfdk-aac, aac]
5.FFmpeg 的命令行参数非常多,可以分成五个部分
$ ffmpeg {1} {2} -i {3} {4} {5}
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
全局参数
输入文件参数
输入文件
输出文件参数
输出文件
6.常用命令
-c
:指定编码器-c copy
:直接复制,不经过重新编码(这样比较快)
-c:v
:指定视频编码器
-c:a
:指定音频编码器
-i
:指定输入文件
-an
:去除音频流
-vn
: 去除视频流
-preset
:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y
:不经过确认,输出时直接覆盖同名文件。
$ ffmpeg -i input.mp4 #
查看视频文件的元信息,比如编码格式和比特率
$ ffmpeg -i input.mp4 -hide_banner #
-hide_banner
参数,可以只显示元信息。
7.
转换编码格式transcoding
$ ffmpeg -i [input.file] -c:v libx264 output.mp4 #
一般使用编码器libx264
,所以只需指定输出文件的视频编码器即可
$ ffmpeg -i [input.file] -c:v libx265 output.mp4 #
转成 H.265 编码
8.转换容器格式transmuxing
$ ffmpeg -i input.mp4 -c copy output.webm #将视频文件从一种容器转到另一种容器
9.
调整码率transrating$ ffmpeg
-i input.mp4
-minrate 964K
-maxrate 3856K -bufsize 2000K
output.mp4
10.
改变分辨率(transsizing)$ ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4
11.提取音频(demuxing)$ ffmpeg
-i input.mp4
-vn -c:a copy
output.aac
12.添加音轨(muxing)$ ffmpeg
-i input.aac -i input.mp4
output.mp4
13.截图$ ffmpeg
-y
-i input.mp4
-ss 00:01:24 -t 00:00:01
output_%3d.jpg
$ ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg #可以指定只截取一帧,
-vframes 1
指定只截取一帧,-q:v 2
表示输出的图片质量,一般是1到5之间(1 为质量最
14.裁剪(cutting)
$ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
$ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]
15.为音频添加封面
$ ffmpeg
-loop 1
-i cover.jpg -i input.mp3
-c:v libx264 -c:a aac -b:a 192k -shortest
output.mp4
一个是封面图片cover.jpg
,另一个是音频文件input.mp3
。-loop 1
参数表示图片无限循环,-shortest
参数表示音频文件结束,输出视频就结束。
16 推流udp
ffmpeg -re -i chunwan.h264 -vcodec copy -f h264 udp://127.0.0.1:6666 //推流
注1:-re一定要加,代表按照帧率发送,否则ffmpeg会一股脑地按最高的效率发送数据。
注2:-vcodec copy要加,否则ffmpeg会重新编码输入的H.264裸流。
ffplay -f h264 udp://127.0.0.1:6666 //拉流
遗留问题:组播测试不行, 推送其他封装格式
17 ffplay播放摄像头视频
1.ffmpeg -list_devices true -f dshow -i dummy #查看设备的名称 video="Chicony USB2.0 Camera" audio="麦克风 (Realtek High Definition Audio)"
2.ffplay -f dshow -i video="Chicony USB2.0 Camera" //摄像头视频
或者ffplay -f vfwcap -i 0//摄像头视频
3.ffplay -f dshow -i audio="麦克风 (Realtek High Definition Audio)" //麦克风音频
4.ffmpeg -list_options true -f dshow -i video="Chicony USB2.0 Camera" //查询摄像头信息
5.ffmpeg -list_options true -f dshow -i audio="麦克风 (Realtek High Definition Audio)" //查询麦克风信息
6. ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -f dshow -i video="Chicony USB2.0 Camera" -vcodec h264 -acodec aac output.mp4 #录制摄像头和麦克风(音视频不同步)
7. ffmpeg -y -re -f dshow -i video="Chicony USB2.0 Camera" -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -framerate 30 -vcodec h264 -acodec aac -t 20 output.mp4 #同步 -re按照一定帧率发送
18.官网命令例子
1. ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi //修改视频码率 视频质量明显下降
2. ffmpeg -i input.avi -r 24 output.avi //修改帧率 为啥码率反而增大了???
_______ ______________ | | | | | input | demuxer | encoded data | decoder | file | ---------> | packets | -----+ |_______| |______________| | v _________ | | | decoded | | frames | |_________| ________ ______________ | | | | | | | output | <-------- | encoded data | <----+ | file | muxer | packets | encoder |________| |______________|
19.修改分辨率 ffmpeg -i hama.mp4 -acodec copy -vcodec libx264 -s 200x150 hama_small.flv
视频要重新编码不能用copy要不会失败
20 查找相关的内容ffmpeg -formats | findstr flv
21 ffmpeg -codecs | findstr 264
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)