You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:33:12