ffmpeg遇到的问题记录
-
ffmpeg rtsp拉取摄像机流得到的第一帧的时间戳可能会比后续时间戳大,需要处理
我是直接舍弃了第二个关键帧之前的数据,这样时间戳就都是对的了。 -
fflpay udp播放rtsp流时遭遇"max delay reached"问题,需要处理 进行展示;
网上相关问题链接:
http://fftrac-bg.ffmpeg.org/ticket/6118
https://blog.csdn.net/weixin_30455365/article/details/101402800
网上能搜到的解决问题的方案是清一色的将udp协议改为tcp协议,这样固然可以,但有时候我们还是想使用udp协议,
则可以尝试添加参数 -max_delay 100000;
ffplay.exe -max_delay 100000 -rtsp_transport udp “rtsp://xxx” //这里设置成100ms; 可以根据网络延迟情况设置更大一点 -
av_packet_clone并不重新分配视频数据空间,即 data不重新分配,是对源数据data的引用
-
ffmpeg给视频添加时间水印,中文乱码及时间格式中的冒号报错问题
网上给视频添加水印的相关参考链接:
https://blog.csdn.net/yinshipin007/article/details/126125684
https://blog.csdn.net/fuhanghang/article/details/124705391
我参考这些链接能够完成基本的水印添加,参考代码如下ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=60:fontfile=simhei.ttf:text='%{localtime\:%Y-%m-%d %H-%M-%S}':x=43:y=22:fontcolor=black:box=1:boxcolor=yellow" output.mp4
但是修改过程中遇到两个两个问题:
a. 中文乱码
中文乱码开始我以为是fontfile=simhei.ttf中字体参数问题,尝试换了不同的字体仍然不行,最后从系统目录下将字体文件拷贝
到ffmpeg当前目录下解决了
b. localtime 时间格式中不能有冒号":"
我需要的时间格式为%H:%M:%S,但是当我将上述示例中的“%H-%M-%S”改为%H:%M:%S时,ffmpeg执行时就报错误了。
即使我尝试使用转义字符,改为%H:%M:%S,仍然报错。
最后无奈采用了如下变通方式,算是勉强满足了我的要求:ffmpeg -re -i input.mp4 -vf "drawtext=fontsize=65:fontfile=FreeSerif.ttf:text='2022-09-27 10\:%{localtime\:%M}\:%{localtime\:%S}':x=43:y=22:fontcolor=black:box=1:boxcolor=white" output.mp4
即text中采用了多个localtime, localtime之间加":",产生冒号;