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帧,尤其是衡量清晰度与码率的时候。