FFmpeg录制视频分段时设置UTC时间文件名或添加时区偏移的问题
FFmpeg录制视频分段时设置UTC时间文件名或添加时区偏移的问题
嘿,我来帮你搞定这个FFmpeg文件名时区的问题,分两种常用场景给你具体方案:
一、直接生成UTC时间的文件名
如果你想让分段文件直接用UTC(+0时区)的日期时间命名,最简单的方法是通过设置环境变量让FFmpeg的strftime功能使用UTC时区,而不是你的本地时区。这样生成的文件名完全基于UTC时间,不用额外处理偏移。
具体命令如下(适用于Linux/macOS的bash/zsh):
TZ=UTC ffmpeg -i udp://127.0.0.1:8032 -c:v libx264 -f segment -segment_time 3600 -strftime 1 "mpegts_%Y%m%d_%H%M%S_UTC.ts"
我把你原来的%s换成了%S(秒数),同时去掉了文件名里的冒号——因为Windows系统不允许文件名包含冒号,这样跨平台兼容性更好。如果确实需要时间戳,保留%s也没问题。
如果是Windows系统,你可以在PowerShell里先设置时区环境变量再执行:
$env:TZ = "UTC" ffmpeg -i udp://127.0.0.1:8032 -c:v libx264 -f segment -segment_time 3600 -strftime 1 "mpegts_%Y%m%d_%H%M%S_UTC.ts"
二、保留本地时间,添加+hhmm格式的时区偏移
你之前用%z得到时区缩写(比如CST、EST)是因为不同系统的strftime实现有差异,部分系统的%z确实不会输出数字偏移。要得到+hhmm格式的偏移,我们可以先通过系统命令获取偏移值,再把它拼接到FFmpeg的文件名模板里。
Linux/macOS(bash/zsh)
先获取时区偏移,再执行FFmpeg:
# 获取+hhmm格式的时区偏移(比如+0800、-0500) TIMEZONE_OFFSET=$(date +%z) # 拼接偏移到文件名 ffmpeg -i udp://127.0.0.1:8032 -c:v libx264 -f segment -segment_time 3600 -strftime 1 "mpegts_%Y%m%d_%H%M%S${TIMEZONE_OFFSET}.ts"
Windows(PowerShell)
PowerShell里需要稍微处理一下偏移格式,默认的时区格式带冒号(比如+08:00),我们可以去掉冒号得到+hhmm:
# 获取不带冒号的时区偏移 $TimezoneOffset = (Get-Date).ToString("zzz").Replace(":", "") # 执行FFmpeg命令 ffmpeg -i udp://127.0.0.1:8032 -c:v libx264 -f segment -segment_time 3600 -strftime 1 "mpegts_%Y%m%d_%H%M%S${TimezoneOffset}.ts"
另外提一句:如果你的FFmpeg版本比较新(4.4及以上),可以试试%:z这个格式符,部分系统的strftime支持它输出带冒号的偏移(比如+08:00),但如果需要不带冒号的+hhmm,还是上面的系统变量方法更可靠,跨平台兼容性更强。
备注:内容来源于stack exchange,提问作者Ron Partuk
相关产品推荐
相关产品推荐

