Add AI clip quick scenarios
This commit is contained in:
@@ -39,6 +39,7 @@ import {
|
|||||||
Camera,
|
Camera,
|
||||||
CheckCircle2,
|
CheckCircle2,
|
||||||
ChevronRight,
|
ChevronRight,
|
||||||
|
Clapperboard,
|
||||||
CircleDashed,
|
CircleDashed,
|
||||||
ClipboardList,
|
ClipboardList,
|
||||||
Compass,
|
Compass,
|
||||||
@@ -64,7 +65,9 @@ import {
|
|||||||
Mic2,
|
Mic2,
|
||||||
Minus,
|
Minus,
|
||||||
MoreHorizontal,
|
MoreHorizontal,
|
||||||
|
Music4,
|
||||||
Music2,
|
Music2,
|
||||||
|
Newspaper,
|
||||||
Moon,
|
Moon,
|
||||||
Plus,
|
Plus,
|
||||||
Play,
|
Play,
|
||||||
@@ -91,6 +94,7 @@ import {
|
|||||||
UserRound,
|
UserRound,
|
||||||
Video,
|
Video,
|
||||||
Volume2,
|
Volume2,
|
||||||
|
AudioWaveform,
|
||||||
Workflow,
|
Workflow,
|
||||||
X,
|
X,
|
||||||
} from 'lucide-react';
|
} from 'lucide-react';
|
||||||
@@ -11672,6 +11676,10 @@ function FunClipEditingPageContent({
|
|||||||
| 'talking-head-clean'
|
| 'talking-head-clean'
|
||||||
| 'broll-brief'
|
| 'broll-brief'
|
||||||
| 'montage-mix'
|
| 'montage-mix'
|
||||||
|
| 'news-overview'
|
||||||
|
| 'explainer-remake'
|
||||||
|
| 'rhythm-cut'
|
||||||
|
| 'voice-remake'
|
||||||
| 'script-to-video'
|
| 'script-to-video'
|
||||||
| 'batch-factory';
|
| 'batch-factory';
|
||||||
type ClipOutputOptionId =
|
type ClipOutputOptionId =
|
||||||
@@ -12603,6 +12611,150 @@ function FunClipEditingPageContent({
|
|||||||
publishReadyEnabled: true,
|
publishReadyEnabled: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 'news-overview',
|
||||||
|
group: '剪辑',
|
||||||
|
title: '新闻概览',
|
||||||
|
description: '把发布会、访谈或行业长视频整理成口语化概览短片。',
|
||||||
|
icon: <Newspaper size={17} />,
|
||||||
|
presetId: 'highlight',
|
||||||
|
planType: 'capability',
|
||||||
|
sceneId: 'ip-matrix',
|
||||||
|
polishId: 'founder',
|
||||||
|
prompt:
|
||||||
|
'把这段长视频做成一条新闻概览短片:先转写并提取人物、事件、关键术语和结论,再生成 250 字以内的口语化解说脚本、镜头顺序、字幕、封面标题和发布文案。事实和专有名词必须准确,不确定的内容标记为待确认。',
|
||||||
|
businessParams:
|
||||||
|
'场景:科技新闻/产品发布/行业资讯/活动复盘\n目标:一条概览短片 + 可校对事实清单\n要求:口语化、信息准确、不要编造',
|
||||||
|
output: '概览脚本 / 镜头顺序 / 字幕标题 / 发布文案',
|
||||||
|
tags: ['概览', '新闻', '事实校对'],
|
||||||
|
sourceMode: 'primary-with-references',
|
||||||
|
sourceHint: '选择 1 个主视频,可追加产品图、截图或品牌素材作为参考。',
|
||||||
|
acceptedSourceTypes: ['video', 'image', 'audio'],
|
||||||
|
minSources: 1,
|
||||||
|
maxSources: 12,
|
||||||
|
outputOptionIds: ['subtitle', 'title', 'publishCopy', 'context', 'timeline'],
|
||||||
|
options: {
|
||||||
|
clipCount: 1,
|
||||||
|
durationRange: '60-180',
|
||||||
|
intensity: 'standard',
|
||||||
|
platform: 'bilibili',
|
||||||
|
keepContext: true,
|
||||||
|
speakerEnabled: false,
|
||||||
|
subtitleEnabled: true,
|
||||||
|
batchEnabled: false,
|
||||||
|
crossSegmentEnabled: true,
|
||||||
|
titleSummaryEnabled: true,
|
||||||
|
publishReadyEnabled: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'explainer-remake',
|
||||||
|
group: '重制',
|
||||||
|
title: '解说重制',
|
||||||
|
description: '把文案、课程或长视频改造成解说视频分镜。',
|
||||||
|
icon: <Clapperboard size={17} />,
|
||||||
|
presetId: 'custom',
|
||||||
|
planType: 'capability',
|
||||||
|
sceneId: 'none',
|
||||||
|
polishId: 'none',
|
||||||
|
prompt:
|
||||||
|
'根据我的素材和目标生成解说视频方案:改写成自然口播脚本,拆分分镜,匹配主视频片段和参考图片/视频,补充需要 AI 图片或 AI 视频生成的 B-roll 提示词,并给出字幕、配音、封面和发布文案。',
|
||||||
|
businessParams:
|
||||||
|
'场景:产品解说/课程复盘/公众号转视频/知识短片\n素材:可使用主视频、图片、参考视频和脚本\n目标:先生成可编辑分镜和时间线',
|
||||||
|
output: '解说脚本 / 分镜表 / B-roll 提示词 / 时间线',
|
||||||
|
tags: ['解说', '分镜', 'B-roll'],
|
||||||
|
sourceMode: 'script-to-video',
|
||||||
|
sourceHint: '可只写文案,也可多选图片、视频和音频作为画面素材。',
|
||||||
|
acceptedSourceTypes: ['video', 'image', 'audio'],
|
||||||
|
minSources: 0,
|
||||||
|
maxSources: 30,
|
||||||
|
outputOptionIds: ['subtitle', 'title', 'publishCopy', 'timeline'],
|
||||||
|
options: {
|
||||||
|
clipCount: 1,
|
||||||
|
durationRange: '60-180',
|
||||||
|
intensity: 'standard',
|
||||||
|
platform: 'xiaohongshu',
|
||||||
|
keepContext: true,
|
||||||
|
speakerEnabled: false,
|
||||||
|
subtitleEnabled: true,
|
||||||
|
batchEnabled: false,
|
||||||
|
crossSegmentEnabled: true,
|
||||||
|
titleSummaryEnabled: true,
|
||||||
|
publishReadyEnabled: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'rhythm-cut',
|
||||||
|
group: '剪辑',
|
||||||
|
title: '节奏卡点',
|
||||||
|
description: '多素材按音乐节奏、情绪点和镜头动作生成混剪方案。',
|
||||||
|
icon: <Music4 size={17} />,
|
||||||
|
presetId: 'merge',
|
||||||
|
planType: 'capability',
|
||||||
|
sceneId: 'local-business',
|
||||||
|
polishId: 'commerce',
|
||||||
|
prompt:
|
||||||
|
'把这些视频、图片和 BGM 做成节奏卡点短片。先识别可用动作镜头、视觉强点、情绪转折和音乐节拍,再生成开场、铺垫、高潮、收束的镜头顺序;图片需要给出推拉摇移动效建议。',
|
||||||
|
businessParams:
|
||||||
|
'场景:活动回顾/产品氛围/门店探访/品牌宣传\n目标:30-60 秒节奏混剪\n要求:按 BGM 情绪和节拍组织镜头',
|
||||||
|
output: '卡点时间线 / 镜头顺序 / 字幕标题 / 发布文案',
|
||||||
|
tags: ['卡点', 'BGM', '混剪'],
|
||||||
|
sourceMode: 'multi-montage',
|
||||||
|
sourceHint: '多选图片、视频和 BGM;第一项会作为主素材。',
|
||||||
|
acceptedSourceTypes: ['video', 'image', 'audio'],
|
||||||
|
minSources: 2,
|
||||||
|
maxSources: 30,
|
||||||
|
outputOptionIds: ['title', 'publishCopy', 'timeline'],
|
||||||
|
options: {
|
||||||
|
clipCount: 1,
|
||||||
|
durationRange: '30-90',
|
||||||
|
intensity: 'aggressive',
|
||||||
|
platform: 'douyin',
|
||||||
|
keepContext: false,
|
||||||
|
speakerEnabled: false,
|
||||||
|
subtitleEnabled: false,
|
||||||
|
batchEnabled: false,
|
||||||
|
crossSegmentEnabled: true,
|
||||||
|
titleSummaryEnabled: true,
|
||||||
|
publishReadyEnabled: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'voice-remake',
|
||||||
|
group: '重制',
|
||||||
|
title: '声音改编',
|
||||||
|
description: '先生成改词、配音和对齐方案,声音重制按模型中心解锁。',
|
||||||
|
icon: <AudioWaveform size={17} />,
|
||||||
|
presetId: 'custom',
|
||||||
|
planType: 'polish',
|
||||||
|
sceneId: 'none',
|
||||||
|
polishId: 'clean',
|
||||||
|
prompt:
|
||||||
|
'把这段视频做成声音改编方案:先转写原文,按目标语气改写口播文案,保持句长接近原表达,输出分段配音脚本、字幕、音画对齐点和需要使用的声音能力。当前先生成方案,真正换声或保声线重制需要在模型中心完成声音能力初始化后执行。',
|
||||||
|
businessParams:
|
||||||
|
'场景:用户自有素材的配音重制/数字人口播精修\n目标:改写文案、配音脚本、对齐点\n限制:不承诺直接换声,需模型中心声音能力',
|
||||||
|
output: '改词脚本 / 配音方案 / 对齐点 / 字幕',
|
||||||
|
tags: ['声音', '配音', '待解锁'],
|
||||||
|
sourceMode: 'primary-audio-video',
|
||||||
|
sourceHint: '选择 1 个自有口播视频或音频,先生成声音改编方案。',
|
||||||
|
acceptedSourceTypes: ['video', 'audio'],
|
||||||
|
minSources: 1,
|
||||||
|
maxSources: 1,
|
||||||
|
outputOptionIds: ['subtitle', 'title', 'context', 'timeline'],
|
||||||
|
options: {
|
||||||
|
clipCount: 1,
|
||||||
|
durationRange: '60-180',
|
||||||
|
intensity: 'conservative',
|
||||||
|
platform: 'douyin',
|
||||||
|
keepContext: true,
|
||||||
|
speakerEnabled: false,
|
||||||
|
subtitleEnabled: true,
|
||||||
|
batchEnabled: false,
|
||||||
|
crossSegmentEnabled: true,
|
||||||
|
titleSummaryEnabled: true,
|
||||||
|
publishReadyEnabled: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'script-to-video',
|
id: 'script-to-video',
|
||||||
group: '重制',
|
group: '重制',
|
||||||
@@ -12792,6 +12944,10 @@ function FunClipEditingPageContent({
|
|||||||
'commerce-live',
|
'commerce-live',
|
||||||
'broll-brief',
|
'broll-brief',
|
||||||
'montage-mix',
|
'montage-mix',
|
||||||
|
'news-overview',
|
||||||
|
'explainer-remake',
|
||||||
|
'rhythm-cut',
|
||||||
|
'voice-remake',
|
||||||
] as ClipQuickScenarioId[]
|
] as ClipQuickScenarioId[]
|
||||||
);
|
);
|
||||||
const visibleQuickScenarios = clipQuickScenarios.filter((item) =>
|
const visibleQuickScenarios = clipQuickScenarios.filter((item) =>
|
||||||
@@ -13019,7 +13175,7 @@ function FunClipEditingPageContent({
|
|||||||
: `${selectedQuickScenario.title} 当前只需要 1 个主素材,多素材会在对应场景开放。`
|
: `${selectedQuickScenario.title} 当前只需要 1 个主素材,多素材会在对应场景开放。`
|
||||||
: `${selectedQuickScenario.title} 只使用 1 个主视频,不会进入多选。`;
|
: `${selectedQuickScenario.title} 只使用 1 个主视频,不会进入多选。`;
|
||||||
const assetPickerButtonText = allowsDirectMultiSelect
|
const assetPickerButtonText = allowsDirectMultiSelect
|
||||||
? '从资产中心多选素材'
|
? '多选资产素材'
|
||||||
: selectedQuickScenario.acceptedSourceTypes.includes('video')
|
: selectedQuickScenario.acceptedSourceTypes.includes('video')
|
||||||
? '从资产中心选择主视频'
|
? '从资产中心选择主视频'
|
||||||
: '从资产中心选择素材';
|
: '从资产中心选择素材';
|
||||||
@@ -13982,6 +14138,9 @@ function FunClipEditingPageContent({
|
|||||||
setSubmittedTaskId('');
|
setSubmittedTaskId('');
|
||||||
try {
|
try {
|
||||||
const createdTask = await onCreateClipTask(title, selectedPreset.mode, {
|
const createdTask = await onCreateClipTask(title, selectedPreset.mode, {
|
||||||
|
quickScenarioId: selectedQuickScenario.id,
|
||||||
|
quickScenarioTitle: selectedQuickScenario.title,
|
||||||
|
quickScenarioGroup: selectedQuickScenario.group,
|
||||||
selectedPlan: {
|
selectedPlan: {
|
||||||
type: selectedPlanType,
|
type: selectedPlanType,
|
||||||
typeLabel: selectedPlan.typeLabel,
|
typeLabel: selectedPlan.typeLabel,
|
||||||
@@ -14740,19 +14899,12 @@ function FunClipEditingPageContent({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="tg-ai-clip-compose">
|
<div className="tg-ai-clip-compose">
|
||||||
<label className="tg-ai-clip-goal tg-ai-clip-goal--large">
|
|
||||||
<span>制作目标</span>
|
|
||||||
<textarea
|
|
||||||
value={targetText}
|
|
||||||
onChange={(event) => setTargetText(event.target.value)}
|
|
||||||
placeholder="例如:把这场直播拆成 5 条带货短视频,保留价格优惠、试用反馈和主播强推荐片段。"
|
|
||||||
/>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div className="tg-ai-clip-workflow-section">
|
<div className="tg-ai-clip-workflow-section">
|
||||||
<div className="tg-ai-clip-section-label">
|
<div className="tg-ai-clip-section-label">
|
||||||
<span>快捷场景</span>
|
<span>快捷场景</span>
|
||||||
<small>当前版本优先显示可闭环的剪辑和理解流程</small>
|
<small>
|
||||||
|
先选场景,系统会自动填好提示词和输出配置
|
||||||
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div className="tg-ai-clip-workflow-grid">
|
<div className="tg-ai-clip-workflow-grid">
|
||||||
{visibleQuickScenarios.map((item) => (
|
{visibleQuickScenarios.map((item) => (
|
||||||
@@ -14782,6 +14934,15 @@ function FunClipEditingPageContent({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<label className="tg-ai-clip-goal tg-ai-clip-goal--large">
|
||||||
|
<span>制作目标</span>
|
||||||
|
<textarea
|
||||||
|
value={targetText}
|
||||||
|
onChange={(event) => setTargetText(event.target.value)}
|
||||||
|
placeholder="例如:裁剪掉视频最后 2 秒,只输出一条可播放成片。"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
|
||||||
<div className="tg-ai-clip-config-panel">
|
<div className="tg-ai-clip-config-panel">
|
||||||
<div className="tg-ai-clip-section-label">
|
<div className="tg-ai-clip-section-label">
|
||||||
<span>本次配置</span>
|
<span>本次配置</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user