windows比较完整的编译版本
https://www.gyan.dev/ffmpeg/builds/#release-builds
1. 修改mp4的tbn
-video_track_timescale 30000
2. mp4解码为nv12
ffmpeg -i dy_rcv.mp4 -pix_fmt nv12 -s 1280x720 dy_rcv.yuv
3.ffplay播放nv12
ffplay -pix_fmt nv12 -s 1280x720 dy_rcv.yuv
4.ffmpeg将mp4转码成固定帧率和帧间隔,没有b帧的h264
ffmpeg.exe -i in_1080p.mp4 -c:v libx264 -bf 0 -b_strategy 0 -s 1280x720 -r 30 -keyint_min 60 -g 60 -sc_threshold 0 -b:v 2M -an 720p_30fps_2Mbps.h264
-bf 最大连续B帧数;调高此值,理论上可提升压缩比,但影响编码速率;一般在使用帧级并行编码时,逻辑CPU核数 = bf + 1;
-b_strategy B帧生成策略,控制P帧与B帧的决策;调高此值,更精确的判定是否使用B帧,但影响编码速率;设置为1,可较好的平衡编码速率与压缩比;
-keyint_min为最小关键帧间隔,我这里设置为60帧;
-sc_threshold这个命令会根据视频的运动场景,自动为你添加额外的I帧,所以会导致你编出来的视频关键帧间隔不是你设置的长度,这是只要将它设为0
5. 提取PCM音频
ffmpeg.exe -i in.ts -ar 16000 -ac 1 -vn -f s16le out.pcm
6.发送rtp流
ffmpeg -re -i 1.h265 -c:v copy -payload_type 97 -f rtp rtp://192.168.xxx:6006?pkt_size=1165
使用sdp文件播放
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.xxx
t=0 0
a=tool:libavformat 56.40.101
m=video 6006 RTP/AVP 97
a=rtpmap:97 H265/90000
a=fmtp:97 sprop-vps=QAEMAf//IUAAAAMAAAMAAAMAAAMAlqwJ; sprop-sps=QgEBIUAAAAMAAAMAAAMAAAMAlqAB4CACIHxOWtKQlkuMBAQAAAMABAAAAwBlgBd5RAAAmJaAAACYloBA; sprop-pps=RAHA98DMkA==
ffplay.exe -protocol_whitelist "file,crypto,data,rtp,udp" 1.sdp
7.编码h264,设置一帧的slice个数
ffmpeg.exe -i D:\1.h264 -c:v libx264 -slices 8 -y D:\8slice.h264
8.编码h265,设置一帧的slice个数
ffmpeg.exe -i D:\1.h265 -c:v libx265 -x265-params "slices=8" -y D:\8slice.h265
9.视频质量评估
1.从视频文件中,取出一帧YUV
ffmpeg.exe -ss 00:03:00 -i INPUT.mp4 -frames 1 src.yuv
2.ffplay播放一个yuv
ffplay.exe -pixel_format yuv420p -video_size 3840x2160 src.yuv -x 1920 -y 1080
3.计算两个YUV之间的psnr
ffmpeg.exe -pixel_format yuv420p -video_size 3840x2160 -i src.yuv -pixel_format yuv420p -video_size 3840x2160 -i compare.yuv -lavfi psnr="stats_file=psnr.log" -f null -
4. 计算两个YUV之间的ssim
ffmpeg.exe -pixel_format yuv420p -video_size 3840x2160 -i src.yuv -pixel_format yuv420p -video_size 3840x2160 -i compare.yuv -lavfi ssim="stats_file=ssim.log" -f null -
psnr
n:1 mse_avg:219.36 mse_y:308.13 mse_u:76.99 mse_v:6.63 psnr_avg:24.72 psnr_y:23.24 psnr_u:29.27 psnr_v:39.91
ssim
n:1 Y:0.542310 U:0.784465 V:0.947742 All:0.650241 (4.562315)
10.tcp方式发送和播放
推流
ffmpeg.exe -re -i D:\Beyond.wav -c copy -f flv tcp://localhost:8888/1
播放
ffplay.exe -listen 1 -i tcp://localhost:8888/1
或者
ffmpeg.exe -re -i D:\Beyond.mp3 -c copy -f mp3 tcp://localhost:8888/1
ffplay.exe -listen 1 -i tcp://localhost:8888/1