ffmpeg 常用参数
-analyzeduration 分析源目标的最大时长,毫秒
-re 按照播放的速率去读取源文件,放在-i之前
-listen 对-i的源进行监听,例如 -listen 1 -i tcp://127.0.0.1:1234
-stream_loop 循环读取,一般用于直播流的模拟, 例如-stream_loop -1
-c:v video codec
-c:a audio codec
-b:v 视频码流
-b:a 音频码流
-profile:v 视频的profile 例如 baseline high 等
-pix_fmt 像素格式 ,例如-pix_fmt yuv420p,浏览器一般只能播 yuv420p及以下的
-vf 一些滤镜 ;例如 -vf drawtext , 可以利用drawtext实时的写入视频时间,drawtext="text='%{localtime:%X}':x=0:y=0:fontsize=30:fontcolor=white"
-preset 和 -tune 属于模版试的配置,preset 例如ultrafast veryfast slow等 ,tune 有film,animation等等
-x264-params 设置x264的参数,例如keyint=29:scenecut=0
-r 帧率
-maxrate 最大速率,目前没有十分搞清楚,可以配合 -bufsize使用,
-f 输出格式 flv、mp4等
推流地址可支持
tcp://ip:port
rtmp://ip:port
等等
案例1:抓取屏幕linux:
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0+0,0 -c:v libx264 -preset superfast -tune zerolatency -b:v 800k -maxrate 800k -bufsize 800k -vf "scale=720:-1" -g 60 -f flv rtmp://rtmp
案例2:通过设定gop减少缓冲时间
通过ffmpeg,读取摄像头实时流,推送至支持webrtc直播的srs服务器,发现启动播放非常慢,要10-15秒。
经过参数查看发现,该摄像头为特规设备,帧率为5. 而webrtc播放器应该是要攒够他认为足够的关键帧信息才开始播放,而这个阈值可能被设定成一般的常用数字,而且不太清楚如何修改,另外的办法就是通过设定ffmpeg的GOP参数,强制关键帧间隔。
通过设定ffmpeg -g 10, webrtc播放器顺利在2秒内起播。
案例3:针对mp4的meta信息的提前
-movflags faststart
附ffmpeg linux下编译选项
./configure --bindir=/ffmpeg/build/bin --incdir=/ffmpeg/build/include/ --libdir=/ffmpeg/build/lib/ --docdir=/ffmpeg/build/doc --enable-static --enable-shared --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx --enable-libfdk-aac --enable-nonfree --enable-libopus