如何让FFmpeg的drawtext滤镜使用本地化strftime格式?
解决FFmpeg drawtext本地化时间戳显示英文的问题
核心原因
FFmpeg的drawtext滤镜localtime功能生效需要两个关键前提:
- FFmpeg编译时启用了
--enable-locale配置项 - 运行FFmpeg的进程正确加载了目标区域设置(如
fr_FR.UTF-8),且系统已生成该locale
分步解决方案
1. 验证FFmpeg的locale支持
执行以下命令查看FFmpeg编译配置:
ffmpeg -version
检查输出的配置行中是否包含--enable-locale。如果没有,需要重新安装/编译带locale支持的FFmpeg版本:
- Mac:使用Homebrew安装官方构建版本(默认带locale支持):
brew install ffmpeg - Alpine Linux:默认包可能缺少locale支持,需安装完整功能版本并生成目标locale:
# 安装依赖包 apk add tzdata locales ffmpeg-full ttf-dejavu # 生成fr_FR.UTF-8区域设置 locale-gen fr_FR.UTF-8
2. 调整FFmpeg命令
确保环境变量正确传递,同时指定支持法语字符的字体避免乱码:
LC_ALL=fr_FR.UTF-8 ffmpeg -hide_banner -f lavfi -i color=size=1024x768:rate=25:color=black -c:v libx264 -t 4 -filter_complex "drawtext=fontsize=18:fontcolor=white:box=1:boxcolor=black@0.5:text='%{pts\:localtime\:1669690847\:%A %-d %B %Y %X %Z}':fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" -y out.mp4
- 字体路径说明:
- Alpine使用上述命令中的DejaVu字体路径即可
- Mac可替换为系统字体路径,如
/Library/Fonts/Arial.ttf或/System/Library/Fonts/Helvetica.ttc
3. 验证Locale生效
在执行FFmpeg命令前,先确认当前shell的locale已正确切换:
LC_ALL=fr_FR.UTF-8 locale
检查输出的LC_TIME等字段是否为fr_FR.UTF-8,确保系统locale已正确加载。
内容的提问来源于stack exchange,提问作者Randy Michnovicz
相关产品推荐
相关产品推荐

