文章

AI视频分镜工作流

用 AI 构建我的视频分镜工作流:从素材到剪辑方案的自动化流程

AI视频分镜工作流

在以往的创作过程中,我的视频剪辑通常依赖手动挑选素材、分析画面和规划节奏。随着素材量的增加,这种方式越来越难以高效管理。于是,我开始尝试让 AI 参与进来,扮演一个“分镜分析师”和“剪辑策划”的角色。本文将完整记录我使用 AI 构建视频分镜工作流的全过程。


1. 工作流概览

我的目标并不是让 AI 替我剪视频,而是让 AI 帮我完成剪辑前的认知工作——包括画面理解、分镜分析、节奏规划和主题构思。整个流程可以分为三步:

  1. AI 分镜分析:通过提示词让 AI 担任“分镜分析助手”,逐帧或逐镜理解素材内容。
  2. 视频注释与结构化整理:将 AI 的描述写入视频文件的注释中,并提取为结构化数据。
  3. AI 剪辑策划生成:将这些结构化信息输入模型,由 AI 自动生成完整的剪辑方案。

这样一来,我可以在极短时间内完成对大量视频素材的语义理解与初步编排。

2. AI 分镜分析提示词设计

这部分是整个流程的核心。我希望 AI 能以专业分镜师的视角来分析画面结构,因此我编写了如下提示词:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
您好!我将持续为您提供图片,请您担任我的「分镜分析助手」。请严格遵循以下规则,为每一张我上传的图片生成一个简洁、精准的镜头描述。
【您的角色】
您是专业的电影摄影师和分镜师,擅长用最精炼的语言解构视觉画面,为后续的AI视频生成提供高度结构化的场景信息。
【核心指令】
请根据我提供的图片,生成一个包含以下要素的镜头描述。描述必须高度概括、易于解析。
【输出格式与要素】
请务必按此顺序和格式组织语言,确保描述在150字以内:
前景: [描述画面最前方的核心元素,如岩石、植被等,并说明其状态和标志性细节]
中景: [描述画面中间部分的核心内容,如水面、滩涂、平原等]
背景: [描述远景和天空,包括山峦轮廓、天气和光线条件]
构图: [分析构图逻辑,如拍摄角度(平视/俯视)、构图法则(三分法/对称)、空间层次感]
色调与氛围: [总结核心色调、明暗对比,并用2-3个关键词概括整体氛围(如:静谧、荒凉、苍茫、萧瑟)]
【要求】
语言: 使用短句,分点陈述,避免冗长和抒情。
细节: 突出画面中标志性的、独特的细节(例如:“覆盖橙黄色苔藓的岩石”、“枯黄低伏的草丛”)。
目的: 该描述将直接用于AI视频生成,因此请确保信息结构化、无歧义,便于AI解析和学习。
现在,请为我接下来上传的图片生成符合上述要求的描述。

这样的提示词能让模型生成更符合影视专业语言的结果,例如:

1
2
3
4
5
前景: 一只白色卷毛羊,从00:00的卧姿(头转向左侧)转变为01:19的站立低头吃草姿态。 
中景: 一片绿色的草地,作为羊的主要活动平面。
背景: 模糊的树木与黄色标志牌,景深较浅。
构图: 平视拍摄,主体偏右,构图稳定。
色调与氛围: 自然绿色与白色主调,光线明亮。氛围:宁静,自然。

这些文字我会直接写入视频文件的注释中,达到元数据的绑定(如下图所示👇)

添加片段说明到注释中

3. 结构化整理与数据提取

当所有素材都完成注释后,我编写了一个简单的 zsh 函数,用来自动提取视频的基础信息与 AI 生成的注释,输出为一份 CSV 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
generate_storyboard_csv() {
    local target_dir="$1"
    [[ -d "$target_dir" ]] || { echo "error: 无效文件夹" >&2; exit 1; }

    local output="$HOME/Downloads/Storyboard_Metadata_$(date +%Y%m%d_%H%M%S).csv"

    # 写入 UTF-8 BOM + 表头
    {
        printf '\xEF\xBB\xBF'
        echo "file_path,file_type,comment,duration_sec,resolution,aspect_ratio"
    } >| "$output"

    setopt extended_glob null_glob local_options

    # 递归获取所有非隐藏媒体文件
    local files=( $target_dir/**/*(.^D) )
    local filtered_files=()
    for f in $files; do
        [[ "$f" != */.* ]] && filtered_files+=("$f")
    done

    for file in $filtered_files; do
        [[ -f "$file" ]] || continue
        local ext="${file:e:l}" type=""
        case "$ext" in
            jpg|jpeg|png|gif|tiff|webp|heic|bmp) type="image" ;;
            mp4|mov|m4v|avi|mkv|webm|mpg|mpeg|flv|3gp) type="video" ;;
            mp3|wav|aiff|aac|m4a|flac|ogg) type="audio" ;;
            *) continue ;;
        esac

        local comment=$(mdls -name kMDItemFinderComment "$file" 2>/dev/null | awk -F '"' '{print $2}')
        [[ -z "$comment" ]] && comment=""

        local duration="0" resolution="" aspect=""

        if [[ "$type" = "video" || "$type" = "audio" ]]; then
            local dur=$(mdls -name kMDItemDurationSeconds -raw "$file" 2>/dev/null)
            [[ -n "$dur" && "$dur" != "(null)" ]] && duration="$dur"
        fi

        if [[ "$type" = "video" ]]; then
            local w=$(mdls -name kMDItemPixelWidth -raw "$file" 2>/dev/null)
            local h=$(mdls -name kMDItemPixelHeight -raw "$file" 2>/dev/null)
            if [[ -n "$w" && -n "$h" && "$w" != "(null)" && "$h" != "(null)" ]]; then
                resolution="${w}x${h}"
                if (( w == 1920 && h == 1080 )) || (( w == 1280 && h == 720 )) || (( w == 3840 && h == 2160 )); then
                    aspect="16:9"
                elif (( w == 1080 && h == 1920 )) || (( w == 720 && h == 1280 )); then
                    aspect="9:16"
                elif (( w == 1080 && h == 1080 )); then
                    aspect="1:1"
                else
                    gcd() { local a=$1 b=$2; while (( b != 0 )); do local t=$b; b=$(( a % b )); a=$t; done; echo $a; }
                    local g=$(gcd $w $h 2>/dev/null || echo 1)
                    (( g > 0 )) && aspect="$(( w / g )):$(( h / g ))" || aspect="$w:$h"
                fi
            fi
        fi

        printf '"%s","%s","%s","%s","%s","%s"\n' \
            "${file//\"/\"\"}" "$type" "${comment//\"/\"\"}" "$duration" "$resolution" "$aspect" >> "$output"
    done

    echo "$output"
}

使用示例:

1
generate_storyboard_csv 文件夹路径

返回的 CSV 文件示例:

1
2
3
4
file_path,file_type,comment,duration_sec,resolution,aspect_ratio
"/Users/.../C0001.MP4","video","前景:飞机右侧的银灰色机翼局部...","60.96","3840x2160","16:9"
"/Users/.../C0003.MP4","video","前景:卧地的成年绵羊与三只小羊羔...","11.52","1920x1080","16:9"
...

这份 CSV 就是一个素材数据库:它既包含视频的技术参数,也囊括了 AI 的视觉理解结果。之后我可以让 AI 基于这些结构化数据,去生成整体的剪辑方案

4. AI 生成的剪辑方案

最后一步,是让 AI 读取我提取的素材表,并根据画面描述自动生成一个完整的剪辑脚本,对于此,我编写了这样的 prompt:

1
2
3
4
5
6
请你担任我的专业视频剪辑助手,根据我提供的素材数据生成一份详细的分镜剪辑脚本。请严格遵循以下要求:
​​1. 输出结构:​​ - ​首先,提供一个总览信息表​​,包含【VLOG标题】、【总时长】、【核心氛围】和【Suno音乐提示】。 - ​​然后,生成详细的分镜Markdown表格​​,必须包含这些列:[时间段 | 素材编号 | 使用片段建议 | 镜头时长 | 画面内容描述 | 剪辑手法 & 转场 | 声音处理]
​​2. 分析维度: ​- ​主题与风格:​​根据素材氛围自动推断VLOG主题和核心氛围关键词。 - ​Suno音乐提示:​​基于整体基调,生成一个精炼的、符合Suno要求的英文提示词,明确描述【乐器】、【风格】、【情绪】和【节奏】,例如:Suno Prompt: "Calming piano with soft strings, cinematic ambient style, evokes a feeling of a tranquil and vast journey over mountains and clouds, slow tempo, no drums, peaceful mood."。 - ​节奏规划:​​合理规划开场、发展、高潮、结尾部分的时间和情绪起伏。 - ​剪辑细节:​​为每个镜头建议具体手法、转场和声音处理。
​​3. 要求:​​- ​语言:​​精准、简洁,使用专业术语。 - ​结构化:​​高度结构化,便于直接执行剪辑。
请根据我后续提供的素材数据表,先生成总览和Suno提示,再生成完整的分镜脚本:
<<-- 素材数据表.csv -->>

然后 ai 就会给出这样的一份分镜脚本:

VLOG总览信息表

项目内容
VLOG标题《云与地的遐想:一段静谧旅途》
总时长约 3分30秒 (210秒)
核心氛围静谧、空旷、旅途感、宁静、自然
Suno音乐提示Suno Prompt: “Gentle, ambient piano with soft, expansive strings and a subtle, distant pad. Cinematic and contemplative style, evokes a feeling of peaceful solitude and vast, open landscapes. Slow to medium tempo, no percussion, serene and uplifting mood.”

分镜剪辑脚本详细表格

时间段素材编号使用片段建议镜头时长画面内容描述剪辑手法 & 转场声音处理
00:00 - 00:12C0001.MP4开头10秒12s开场: 飞机银灰色机翼作为前景,下方是广袤无垠的云海,冷灰蓝色调,氛围静谧空旷。开场定调: 从黑场淡入。固定镜头,极慢速的缩放推进,营造沉浸感。音乐淡入。保留原始环境白噪音,音量压低,营造空间感。
00:12 - 00:30C0002.MP4精华片段15秒18s发展: 转场至黄昏时机翼视角,冷暖色调对比,霞光弥漫,氛围壮丽而宁静。匹配剪辑: 利用相似的机翼前景构图进行平滑的叠化转场。镜头保持稳定。音乐持续,可在此段落加入极轻柔的风声音效垫底,增强临场感。
00:30 - 01:15C0004.MP4全部或前半部分25s节奏过渡: 视角从天空转向大地。萧瑟苍茫的滩涂景象,橙黄色苔藓岩石与灰黑色山峦。切入: 直接剪切,形成场景的对比与转换。可进行速度调整(0.8x),放缓节奏。音乐保持。环境音切换为轻微的风声或远处的水流声。
01:15 - 02:05C0002.MP4中段片段20s高潮铺垫: 回到公路引导线镜头。笔直的道路延伸至远方雪山,构图极具纵深感与希望感。J-Cut: 先响起下一段羊群的环境音(羊叫、吃草声),再切入画面。使用线性擦除 方向性转场。音乐情绪略微上扬。引入下一场景的声音预置。
02:05 - 03:10C0003.MP4 C0001.MP4 C0002.MP4组合使用35s情绪高点: 【组合镜头】 1. 母羊与小羊羔的温馨互动特写(C0003)。 2. 两只带标记的羊在栅栏前吃草(C0001)。 3. 白色卷毛羊从卧到站的动态过程(C0002)。快速剪辑: 一组匹配动作匹配构图的连贯剪辑,时长5s/10s/20s。使用交叉溶解 柔和过渡,营造悠闲、温馨的田园氛围。音乐达到最明亮段落。突出自然音:羊叫、吃草声、鸟鸣声。
03:10 - 03:25C0006.MP4天鹅抬头游动的片段15s结尾开始: 黑天鹅在湖中优雅游动,红喙成为视觉焦点,氛围回归宁静与优雅。L-Cut: 羊群画面切走,但环境音持续片刻,再过渡到天鹅的水流声。使用渐隐黑色 转场。音乐开始缓慢减弱。环境音过渡为天鹅划水声和轻柔的水波声。
03:25 - 03:30C0001.MP4最后5秒5s结尾: 最终画面落回最初的云海与机翼,首尾呼应。寓意旅途循环,思绪飘向远方。淡出: 画面缓慢渐隐至黑场,音乐也随之完全淡出,留下余韵。音乐和环境白噪音共同淡出,直至完全安静。

脚本会精确到:​​时间段、使用哪个素材、镜头时长、画面内容、剪辑手法、转场技巧、声音处理​​等方便剪辑的细节。

本文由作者按照 CC BY 4.0 进行授权