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_optionsoutput_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

 

posted @   MoonXu  阅读(139)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示