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

如何用FFmpeg生成带坐标的webVTT横向像素平铺图?

用FFmpeg生成WebVTT横向缩略图方案

完全可以通过FFmpeg实现你要的效果,分两步完成:生成横向拼接的窄条缩略图,再生成对应的WebVTT时间轴文件。

1. 生成横向拼接的缩略图

使用FFmpeg从视频中每秒截取1/2像素宽的窄条,再横向拼接成一张大图。

命令示例(每秒截1像素宽的条):

ffmpeg -i input.mp4 -vf "fps=1, crop=1:in_h:0:0, tile=1000x1" -q:v 2 assets/thumbnails-01.jpg
  • fps=1:每秒提取一帧视频
  • crop=1:in_h:0:0:将每帧裁剪为1像素宽、原视频高度的窄条(in_h代表视频原始高度)
  • tile=1000x1:把所有窄条横向拼接成1行的大图(1000是最大列数,可根据视频时长调整)
  • -q:v 2:控制图片质量,数值越小质量越高

如果需要2像素宽的条,把crop=1:in_h:0:0改成crop=2:in_h:0:0即可。

2. 生成对应的WebVTT文件

需要根据视频时长,自动生成每个窄条对应的时间范围和坐标。可以用脚本批量生成:

Bash脚本示例:

#!/bin/bash
# 获取视频总时长(秒)
VIDEO_DURATION=$(ffmpeg -i input.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d ,)
HOURS=$(echo $VIDEO_DURATION | cut -d: -f1)
MINUTES=$(echo $VIDEO_DURATION | cut -d: -f2)
SECONDS=$(echo $VIDEO_DURATION | cut -d: -f3 | cut -d. -f1)
TOTAL_SECONDS=$((HOURS*3600 + MINUTES*60 + SECONDS))

# 创建WebVTT文件
echo "WEBVTT" > assets/thumbnails.vtt

# 配置参数
WIDTH_PER_SLICE=1 # 单条宽度,改成2即为2像素
HEIGHT=90 # 替换为你的视频实际高度

# 生成每个时间节点的条目
for ((i=0; i<TOTAL_SECONDS; i++)); do
    START_TIME=$(printf "%02d:%02d:%02d.000" $((i/3600)) $(((i%3600)/60)) $((i%60)))
    END_TIME=$(printf "%02d:%02d:%02d.000" $(((i+1)/3600)) $((((i+1)%3600)/60)) $(((i+1)%60)))
    X=$((i * WIDTH_PER_SLICE))
    echo -e "\n$START_TIME --> $END_TIME" >> assets/thumbnails.vtt
    echo "/assets/thumbnails-01.jpg#xywh=$X,0,$WIDTH_PER_SLICE,$HEIGHT" >> assets/thumbnails.vtt
done

运行脚本前,记得替换HEIGHT为你的视频实际高度,调整WIDTH_PER_SLICE为1或2。

注意事项

  • 如果视频时长超过1000秒,要把tile=1000x1里的1000改成更大的数值,避免缩略图自动换行
  • 可以根据需求调整fps参数,比如要更密集的采样,就把fps=1改成更高的数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:05:52