视频处理工作流模板
更新时间:2025-01-23
视频处理流水线针适用于文生视频任务的数据处理场景,用户可以使用文生视频数据处理工作流,根据原始视频构建出高质量的视频片段-文本对数据,用于文生视频模型的训练。
本文为您介绍在百舸工作流中使用视频处理预置模板的使用说明。
使用限制
- 支持的计算资源为百舸通用资源池,且资源池中至少需要有1台内存不小于1024G的节点(推荐使用A800机型)
- 支持的存储资源为并行文件存储服务PFS
- 各组件的并发度暂不支持大于1
输入数据集
本工作流数据使用的数据是批量待处理的视频地址数据。工作流输入是csv文件,csv文件中每一行记录待处理的视频地址[path],支持的视频格式:[".mp4", ".avi", ".mov", ".mkv"],(注意:因为是以视频文件名为id,所以需要每个视频文件的名字不一样)。工作流的输入示例数据如下。
path
test_data_demo/test_videos_demo/video0.mp4
test_data_demo/test_videos_demo/2.mp4
test_data_demo/test_videos_demo/4.mp4
csv文件和视频文件存放格式示例:
opensora_ppl/
|-- meta.csv
`-- test_data_demo
`-- test_videos_demo
|-- 2.mp4
|-- 4.mp4
`-- video0.mp4
使用步骤
- 登录百舸异构计算平台AIHC控制台。
- 点击页面左侧菜单栏「工作流」,进入工作流页面。
- 点击工作流页面上方的「模板」,找到「视频处理工作流」,点击「创建工作流」,填写配置信息。
需要填写的配置信息包括:
- 工作流名称:支持中文、英文、数字、中划线、下划线等命名方式。
- 资源池:选择工作流运行的百舸资源池。
- 存储类型/存储实例/挂在路径:工作流的数据存储和中间数据存储路径,选择资源池后自动根据资源池生成该资源池的存储实例,需要用户填写中间数据的挂载路径。
- 模板:视频处理流水线模板。
- 描述:对工作流的简单信息描述。
- 工作流编排:完成工作流基本信息创建后,进入工作流编排。目前平台支持Yaml配置工作流,配置后的组件支持通过「可视化模式」进行字段调整。根据视频处理工作流模板创建后,在编辑页面中可见完整的视频工作流Yaml配置内容。
页面上方切换「可视化模式」,可以对视频处理流水线中的组件节点参数信息进行修改,在可视化画布中点击需要修改参数的组件节点,右侧出现对应组件的节点信息。节点参数信息修改后,对应Yaml源码中信息也会被修改。工作流完整流程如下。组件参数配置说明见下文。
- 保存工作流:点击右上角「保存」,保存视频处理流水线工作流编辑信息;
- 运行工作流:点击右上角「运行」,可以运行工作流。请注意,为保证用户存储数据信息不被覆盖,同一个工作流下仅支持一个「运行中」任务。 运行后将跳转至运行记录页面,至此,您已成功运行一个视频处理工作流。
模版参数
工作流Yaml配置参数
参数名称 | 参数含义 | 是否必选 | 取值类型 | 默认值 | 说明 |
---|---|---|---|---|---|
name | 名字 | 是 | string | NA | 工作流名字 |
description | 描述 | 是 | string | NA | 工作流描述信息 |
resourcePoolId | 百舸资源池名称 | 是 | string | NA | 工作流运行的百舸资源池名称 |
intermediateStorageConfig:storageType | 工作流存储类型 | 是 | string | NA | 工作流运行时会有部分临时数据,此参数为工作流存储类型 |
intermediateStorageConfig:pfsInstanceId | 工作流存储名称 | 是 | string | NA | 工作流存储名称 |
intermediateStorageConfig:storagePath | 工作流存储路径 | 是 | string | NA | 工作流存储路径 |
组件列表
组件类型(identity) | 组件含义 | 组件介绍 |
---|---|---|
timefilter | 时长过滤 | 读取视频的时长/帧率/长宽比等信息,并对视频时长过低的视频进行过滤 |
scenedetect | 场景检测 | 采用pyscendetect检测视频的场景边界,得到时间戳 |
scenecut | 场景分割 | 根据时间戳,对视频进行分割 |
aesscore | 美学打分 | 对视频的美学质量进行打分,采用improved aesthetic predictor模型,过滤美学分数低的视频 |
flowscore | 光流打分 | 对视频的运动进行打分,采用UniMatch模型,计算视频的光流分数,过滤运动较少的视频 |
ocrscore | OCR打分 | 对视频中的文字进行检测,采用DBNet++模型,计算OCR分数,过滤文字密集的视频 |
scorefilter | 分数过滤 | 根据得分对视频进行过滤 |
pllavacaption | pllava标注 | 采用pllava模型对视频进行标注 |
matchscore | 匹配打分 | 采用CLIP计算文本和视频之间的匹配分数 |
textpostpro | 文本后处理 | 移除空文本的caption,移除文本中的特殊字符 |
组件基本信息
各组件的基本name、identity、inputInfo、outputInfo、parallel和upstreamNames配置参数相同,如下表。
参数名称 | 参数含义 | 是否必选 | 取值类型 | 默认值 | 说明 |
---|---|---|---|---|---|
name | 名称 | 是 | string | NA | 全局唯一,组件类型+自增ID,不支持中文 |
identity | 类型 | 是 | string | NA | 具体是哪种组件,对应组件列表的identity |
inputInfo:type | 输入存储类型 | 是 | string | pfs | 当前仅支持PFS |
inputInfo:pfsInstanceId | 输入存储实例名称 | 是 | string | NA | pfs的instanceid |
inputInfo:path | 输入存储地址 | 是 | string | NA | pfs的源路径 |
inputInfo:mountPath | 输入存储挂载地址 | 是 | string | NA | pfs的挂载路径 |
inputInfo:input | 输入存储文件 | 是 | string | NA | 用户指定组件的输入csv文件 |
outputInfo:type | 输出存储类型 | 是 | string | pfs | 当前仅支持PFS |
outputInfo:pfsInstanceId | 输出存储实例名称 | 是 | string | NA | pfs的instanceid |
outputInfo:path | 输出存储地址 | 是 | string | NA | pfs的源路径 |
outputInfo:mountPath | 输出存储挂载地址 | 是 | string | NA | pfs的挂载路径 |
outputInfo:output | 输出存储文件 | 是 | string | NA | 用户指定组件的输出csv文件 |
parallel | 并发数 | 是 | interger | 1 | 同时配置多少并发任务进行数据处理 |
upstreamNames | 输入节点 | 是 | string | NA | 指定在工作流中当前算子组件的上游算子组件名称,头结点无需配置 |
组件参数配置
各组件的userDefinedParams字段参数存在差异,请您根据下表以及自己实际的业务场景需求进行选择和配置。
组件类型(identity) | 组件 | 参数名称 | 参数含义 | 是否必选 | 取值类型 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
timefilter | 时长过滤 | fmin | 视频帧数阈值 | 是 | interger | 5 | 将帧数低于fmin的视频进行过滤,参数范围需大于等于1 |
timefilter | 时长过滤 | TASK_NAME | 任务名称 | 是 | string | time_filter | 不允许修改 |
timefilter | 时长过滤 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
scenedetect | 场景检测 | TASK_NAME | 任务名称 | 是 | string | scene_detect | 不允许修改 |
scenedetect | 场景检测 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
scenecut | 场景分割 | ROOT_CLIPS | 切分后视频目录 | 是 | string | NA | 切分后的视频存储的目录地址 |
scenecut | 场景分割 | min_seconds | 最小视频时间 | 是 | interger | 1 | 切分原始视频时,若切分后的视频时长低于min_seconds秒则不会被保存,参数范围需大于等于0 |
scenecut | 场景分割 | TASK_NAME | 任务名称 | 是 | string | scene_cut | 不允许修改 |
scenecut | 场景分割 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
aesscore | 美学打分 | gpu_num | 可用GPU数量 | 是 | interger | 8 | 使用的gpu卡数,参数范围为 [1, 单机gpu卡数] |
aesscore | 美学打分 | aes_bs | 美学模型batch size大小 | 是 | interger | 1024 | 美学打分模型的batch size,参数范围>=1,上限和所用gpu的显存有关,设为1024时,显存占用约为50G |
aesscore | 美学打分 | aes_nw | 美学模型num worker大小 | 是 | interger | 16 | dataloader读取数据的worker数量,参数的范围是0到系统CPU核心数 |
aesscore | 美学打分 | TASK_NAME | 任务名称 | 是 | string | aes_score | 不允许修改 |
aesscore | 美学打分 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
flowscore | 光流打分 | gpu_num | 可用GPU数量 | 是 | interger | 8 | 使用的gpu卡数,参数范围为 [1, 单机gpu卡数] |
flowscore | 光流打分 | flow_bs | 光流模型batch size大小 | 是 | interger | 4 | 光流打分模型的batch size,和所用gpu的显存有关 |
flowscore | 光流打分 | flow_nw | 光流模型num worker大小 | 是 | interger | 16 | dataloader读取数据的worker数量,参数的范围是0到系统CPU核心数 |
flowscore | 光流打分 | TASK_NAME | 任务名称 | 是 | string | flow_score | 不允许修改 |
flowscore | 光流打分 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
ocrscore | OCR打分 | gpu_num | 可用GPU数量 | 是 | interger | 8 | 使用的gpu卡数,参数范围为 [1, 单机gpu卡数] |
ocrscore | OCR打分 | ocr_bs | OCR模型batch size大小 | 是 | interger | 16 | ocr打分模型的batch size,参数范围>=1,上限和所用gpu的显存有关,设为16时显存占用量约43G |
ocrscore | OCR打分 | ocr_nw | OCR模型num worker大小 | 是 | interger | 16 | dataloader读取数据的worker数量,参数的范围是0到系统CPU核心数 |
ocrscore | OCR打分 | TASK_NAME | 任务名称 | 是 | string | ocr_score | 不允许修改 |
ocrscore | OCR打分 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
scorefilter | 分数过滤 | aes_min | 美学分数阈值 | 否 | interger | NA | 如果设置则会过滤aes小于所设置aes_min参数的视频(去掉对应的行), 参数范围 [0, 6] |
scorefilter | 分数过滤 | flow_min | 光流分数阈值 | 否 | float | NA | 如果设置则会过滤flow小于所设置flow_min参数的视频(去掉对应的行),参数范围 [0, 100] |
scorefilter | 分数过滤 | ocr_max | ocr分数阈值 | 否 | interger | NA | 如果设置则会过滤ocr大于所设置ocr_max参数的视频(去掉对应的行),参数范围 >= 0 |
scorefilter | 分数过滤 | match_min | CLIP模型匹配分数阈值 | 否 | interger | NA | 如果设置则会过滤match小于所设置match_min参数的视频(去掉对应的行),参数范围 [-100, 100] |
scorefilter | 分数过滤 | TASK_NAME | 任务名称 | 是 | string | score_filter | 不允许修改 |
scorefilter | 分数过滤 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
pllavacaption | pllava标注 | gpu_num | 可用GPU数量 | 是 | interger | 8 | 使用的gpu卡数,参数范围为 [1, 单机gpu卡数] |
pllavacaption | pllava标注 | pllava_bs | pllava模型的batch size | 是 | interger | 16 | pllava文本标注模型的batch size,参数范围>=1,上限和所用gpu的显存有关 |
pllavacaption | pllava标注 | TASK_NAME | 任务名称 | 是 | string | pllava_caption | 不允许修改 |
pllavacaption | pllava标注 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
matchscore | 匹配打分 | gpu_num | 可用GPU数量 | 是 | interger | 8 | 使用的gpu卡数,参数范围为 [1, 单机gpu卡数] |
matchscore | 匹配打分 | match_bs | match打分模型的batch size | 是 | interger | 16 | match打分模型的batch size,参数范围>=1,上限和所用gpu的显存有关 |
matchscore | 匹配打分 | match_nw | dataloader读取数据的worker数量 | 是 | interger | 16 | dataloader读取数据的worker数量,参数的范围是0到系统CPU核心数 |
matchscore | 匹配打分 | TASK_NAME | 任务名称 | 是 | string | match_score | 不允许修改 |
matchscore | 匹配打分 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
textpostpro | 文本后处理 | clean-caption | 特殊字符清理 | 是 | boolean | True | True / False 表示是否移除文本中的特殊字符 |
textpostpro | 文本后处理 | refine-llm-caption | 前缀清理 | 是 | boolean | True | True / False 表示是否移除caption中类似于"the video is "的前缀 |
textpostpro | 文本后处理 | remove-empty-caption | 空文本移除 | 是 | boolean | True | True / False 表示是否移除空文本的caption |
textpostpro | 文本后处理 | TASK_NAME | 任务名称 | 是 | string | text_postpro | 不允许修改 |
textpostpro | 文本后处理 | VIDEO_ROOT | 视频根目录 | 是 | string | NA | 输入csv中记录的视频path的根目录 |
运行结果
- 工作流输出csv文件中,每一行记录视频14列 [path路径, id, relpath相对路径, num_frames帧数, height视频高, width视频宽, aspect_ratio长宽比, fps帧率, resolution分辨率, aes美学分数, flow光流分数, ocr字符个数打分, pllavacap视频文本标注, match匹配分数],内容示例如下:
path,id,relpath,num_frames,height,width,aspect_ratio,fps,resolution,aes,flow,ocr,pllavacap,match
3_scene-0.mp4,3_scene-0,3_scene-0.mp4,240,1080,1920,0.5625,59.94006309148265,2073600,5.070074081420898,0.8784827589988708,0.0,"a dynamic scene at a skatepark. at the center of the frame, a skateboarder is in action, performing a trick on a concrete ramp. the skateboarder, dressed in a black t-shirt and pants, is balancing on the edge of the ramp with his skateboard tilted to the side. the ramp, made of concrete, is located in the middle of the frame, drawing the viewer's attention. in the background, a fence can be seen, adding depth to the scene. the sky above is a clear blue, suggesting that the photo was taken during the day. the overall composition of the photo suggests a sense of motion and energy, typical of a skatepark setting. the skateboarder's position on the ramp and the angle of the shot give a sense of the height and difficulty of the trick being performed. the image does not contain any text. the relative positions of the objects confirm that the skateboarder is the main subject of the photo, with the ramp and the fence serving as supporting elements in the scene. the image does not contain any other objects or people, keeping the focus solely on",26.609375
5_scene-0.mp4,5_scene-0,5_scene-0.mp4,216,1080,1920,0.5625,24.0,2073600,5.083873271942139,12.678512573242188,0.0,"a woman and a young child are enjoying a day at the beach. the woman, dressed in a white shirt and black pants, is holding the child's hand as they walk along the shoreline. the child, wearing a blue shirt and black shorts, is looking down at the sand, perhaps fascinated by the small shells and pebbles scattered about. the beach they are on is sandy and appears to be quite wide, with the ocean stretching out to the horizon. the water is a light blue color, indicating it might be a calm day. in the distance, you can see a rocky outcropping, adding to the natural beauty of the scene. the sky above is a clear blue, suggesting a sunny day. the overall atmosphere of the video is peaceful and serene, capturing a simple yet beautiful moment between a mother and her child.",27.421875