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

如何用FFmpeg基于文件名或元数据给视频设置时间码(适配Premiere)

基于文件名或元数据用FFmpeg批量设置时间码方案

一、直接从文件名提取时间设置时间码

完全可以实现,核心是通过脚本解析文件名中的时间字符串,转换成FFmpeg支持的HH:MM:SS:FF格式时间码(最后两位为帧计数,默认补00,可根据视频帧率调整),再批量调用FFmpeg处理。

示例脚本

Windows 批处理(处理当前目录下所有MOV文件)

@echo off
setlocal enabledelayedexpansion

for %%f in (*.mov) do (
    :: 提取文件名前19位的时间字符串(格式:2023-03-08 12.59.59)
    set "timestr=%%~nf"
    set "timestr=!timestr:~0,19!"
    :: 转换为FFmpeg支持的时间码格式:HH:MM:SS:00
    set "timecode=!timestr:~11,8!"
    set "timecode=!timecode:.=:!:00"
    
    :: 执行FFmpeg命令,保留原编码、移除数据流、设置时间码
    ffmpeg -i "%%f" -map 0 -map -0:d -c copy -timecode !timecode! "output_%%f"
)
endlocal

Linux/macOS Shell 脚本

for f in *.mov; do
    # 提取文件名前19位的时间字符串
    timestr="${f:0:19}"
    # 转换为HH:MM:SS:00格式时间码
    timecode="${timestr:11:8}"
    timecode="${timecode//./:}:00"
    
    ffmpeg -i "$f" -map 0 -map -0:d -c copy -timecode "$timecode" "output_$f"
done

注:如果视频帧率不是25fps,需将帧位(最后两位)调整为对应帧率的合法范围(如30fps用00-29)。

二、从元数据读取日期设置时间码

若已用exiftool将文件名写入视频的创建/修改日期元数据,可通过ffprobe提取元数据时间,再转换为时间码代入FFmpeg命令批量处理。

批量处理脚本(Linux/macOS)

for f in *.mov; do
    # 提取元数据中的创建时间
    creation_time=$(ffprobe -v error -show_entries format_tags=creation_time -of default=noprint_wrappers=1:nokey=1 "$f")
    # 转换为HH:MM:SS:00格式时间码
    timecode="${creation_time:11:8}:00"
    
    ffmpeg -i "$f" -map 0 -map -0:d -c copy -timecode "$timecode" "output_$f"
done

三、关键注意事项

  • 时间码格式必须严格遵循HH:MM:SS:FF,帧计数超出对应帧率范围会触发FFmpeg报错。
  • 批量操作前建议先用单个文件测试脚本,避免批量出错。
  • timecode参数会直接覆盖视频原有时间码。

内容的提问来源于stack exchange,提问作者marven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:38:20