1、分析视频文件信息:
ffprobe -show_streams -show_format -print_format json -i "视频路径"
2、查看视频的第一帧画面
ffmpeg -i "视频路径" -vframes 1 output.png
3、看下音频和视频流的pts 、dts时间就行,前面是展示时间,后面是解码时间
ffprobe -show_packets -print_format csv "视频路径"
4、从指定时间处播放视频
ffplay -i -ss 00:20:00 "视频路径"
5、剪切视频
ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4
-ss表示开始切割的时间,-t表示要切多少。上面就是从15s开始,切5秒钟出来。
6、删除视频中的音频
ffmpeg -i e:2018.mp4 –c copy -an e:201819.mp4
7、对视频进行转码操作:
ffmpeg -i input.avi output.mp4
8、视频编码格式的转码:
ffmpeg -i input.mp4 -vcodec h264 output.mp4
9、查看流中是否存在SEI信息:
ffmpeg -i "" -c:v libx264 -loglevel debug out.mp4 -y 2>&1 | grep -i "user data"
10、查看视频中的关键帧,并将信息输出到磁盘中:
ffprobe -v quiet -print_format json -show_frames "视频地址" >>D:\a.txt
11、要将输出文件的视频比特率设置为64 kbit / s,请执行以下操作:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi
12、要将输出文件的帧速率强制为24 fps,请执行以下操作:
ffmpeg -i input.avi -r 24 output.avi
要将输入文件的帧速率(仅对原始格式有效)强制为1 fps,将输出文件的帧速率强制为24 fps,请执行以下操作:
ffmpeg -r 1 -i input.m2v -r 24 output.avi
13、ffmpeg同时调整视频和音频的播放速度
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mk
14、对文件抓缩微图:
ffmpeg -i "test.avi" -y -f image2 -ss 4 -t 0.001 -s 350x240 test.jpg
15、FFmpeg制作CBR码率视频
nal-hrd编码可以设置VBR,CBR的编码模式。
VBR为可变码率,CBR为恒定码率。
互联网上VBR居多,但是我们可以使用FFmpeg制作CBR码率视频。
ffmpeg -i input.mp4 -c:v libx264 -x264opts "bframes=10:b-adapt=0" -b:v 1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0 -t 60 output.ts
命令执行参数介绍:
设置B帧个数,每两个P帧之间包含10个B帧
设置视频码率为1000kbit/s
设置最大码率为1000kbit/s
设置最小码率为1000kbit/s
设置编码的buffer大小为50KB
设置H.264的编码HRD信号为CBR
设置每50帧一个GOP
设置场景切换不强行插入关键帧
设置视频输出时间为60s
可以通过工具Bitrate Viewer查看码率波动,我就没试了,通过Elecard StreamEye查看流信息的bitrate type为CBR。
16、给视频添加动态时间水印
ffmpeg -i input.mp4 -vf drawtext="expansion=strftime:basetime=$(date +%s -d '2018-10-13 14:10:50'):fontfile=arial.ttf:x=w-tw:fontcolor=red:fontsize=30:text='%Y-%m-%d %H\\:%M\\: %S" output.mp4
17、改变视频的SAR参数
ffmpeg -i sar_test.mp4 -vf scale=1280:720,setsar=1:1 sar_test_1280x720.mp4 -hide_banner
18、查看视频的帧数
ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_read_frames -of default=nokey=1:noprint_wrappers=1 -i ""
19、将一张图片合成为视频
ffmpeg -r 25 -loop 1 -i ~/IMG_8679.JPG -pix_fmt yuv420p -vcodec libx264 -b:v 600k -r:v 25 -preset medium -crf 30 -s 720x576 -vframes 250 -r 25 -t 10 ~/a.mp4[/mw_shl_code]
其中ffmpeg -r 25 为读取输入文件的时候帧率为25帧每秒
-loop为循环读取input文件
其实关键的是-t 10,将这个jpg文件生成为10秒钟的mp4视频文件
20、统计视频I、B、P帧
ffprobe -v quiet -show_frames "" | grep "pict_type=B" | wc -l
控制台输出0,表示这个视频没有B帧,如果要查看I帧和P帧,修改pict_type=I或者P即可
如果需要看关键帧,grep “key_frame=1”
21、使用本地文件进行推流
ffmpeg -re -stream_loop -1 -i "testdata/test.flv" -vcodec h264
-acodec aac -f flv "rtmp://127.0.0.1/live/test110"
-re
: 这个参数告诉ffmpeg以实时的方式读取输入文件。-stream_loop -1
: 这个参数表示循环播放输入文件,-1
表示无限循环。-i
"testdata/test.flv": 这是输入文件的路径和文件名。-vcodec h264
: 这个参数指定视频编码器为H.264。-acodec aac
: 这个参数指定音频编码器为AAC。
补充知识点:
profile=baseline的视频不包含B帧
同等码率的视频B帧越多,清晰度越高,但是编码与解码的复杂度也是越高,所以需要合理的设置B帧,尤其是衡量清晰度与码率的时候。