FFmpeg中如何同时添加帧计数器与分辨率/码率/FPS信息框
FFmpeg中如何同时添加帧计数器与分辨率/码率/FPS信息框
嘿,这个需求太实用了!你只需要在现有的drawtext滤镜基础上,再叠加一个drawtext实例就能搞定——FFmpeg允许在同一个-vf参数里用逗号分隔多个滤镜,直接实现多元素叠加。
给你修改好的完整命令,直接用就行:
ffmpeg -i input.mp4 -vf "drawtext=fontfile=C\\:/Windows/fonts/consola.ttf: text='Frame\\: %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=50: box=1: boxcolor=white: boxborderw=5, drawtext=fontfile=C\\:/Windows/fonts/consola.ttf: text='Resolution: %{w}x%{h} | FPS: %{floor(r)} | Bitrate: %{bitrate}/1000000 Mbps': x=(w-tw)/2: y=2*lh: fontcolor=black: fontsize=50: box=1: boxcolor=white: boxborderw=5" -c:a copy output.mp4
我给你拆解一下关键改动:
- 用逗号分隔了两个
drawtext模块:第一个是你原来的帧计数器,第二个是顶部的信息框 - 顶部信息框的文本里用到了这些FFmpeg内置变量:
%{w}x%{h}:自动获取视频的分辨率(宽×高)%{floor(r)}:取整后的帧率(避免显示25.000这种小数,如果你需要保留小数直接用%{r}就行)%{bitrate}/1000000:把FFmpeg默认输出的bps单位转换成更直观的Mbps
- 位置设置和底部对称:
x=(w-tw)/2让文本水平居中,y=2*lh在顶部留出了和底部一样的边距,视觉上更协调
另外给你两个小Tips:
- 如果
%{bitrate}显示异常(比如0),说明输入视频的元数据里没有码率信息,你可以先用ffprobe -v quiet -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4手动获取码率,再替换到文本里(比如改成Bitrate: 2.2 Mbps) - 要是觉得文本太挤,可以把信息分成两行显示,用
\n换行就行,比如text='Resolution: %{w}x%{h}\nFPS: %{floor(r)} | Bitrate: %{bitrate}/1000000 Mbps'
备注:内容来源于stack exchange,提问作者NoyaZ_
相关产品推荐
相关产品推荐

