{"componentChunkName":"component---src-templates-acg-portal-new-template-tsx","path":"/lmpb58sbb","result":{"data":{"markdownRemark":{"html":"<h2 id=\"简介\"><a href=\"#%E7%AE%80%E4%BB%8B\" aria-label=\"简介 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>简介</h2>\n<p><code>VideoQualityScore</code> 是基于 Daft + Ray 分布式框架的视频质量评分组件，利用 CLIP 模型对视频帧进行质量评估，输出一个综合质量分数，适用于视频筛选、质量过滤等场景。视频质量评分处理器，基于 CLIP-IQA 对采样帧评分并聚合为视频质量分</p>\n<h2 id=\"功能\"><a href=\"#%E5%8A%9F%E8%83%BD\" aria-label=\"功能 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>功能</h2>\n<ul>\n<li>支持通过视频采样进行质量评分</li>\n<li>基于 CLIP 模型的视频帧质量评估</li>\n<li>支持多种帧采样策略（如均匀采样）</li>\n<li>支持多种分数聚合方式（如平均值）</li>\n</ul>\n<h2 id=\"输入\"><a href=\"#%E8%BE%93%E5%85%A5\" aria-label=\"输入 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>输入</h2>\n<table>\n<thead>\n<tr>\n<th>输入列名</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>video_paths</td>\n<td>可选，视频文件路径列（本地、BOS、HTTP等），与 video_binaries 二选一</td>\n</tr>\n<tr>\n<td>video_binaries</td>\n<td>可选，视频二进制数据列，与 video_paths 二选一</td>\n</tr>\n<tr>\n<td>video_formats</td>\n<td>可选，视频格式字符串列，配合 video_binaries 使用</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"参数\"><a href=\"#%E5%8F%82%E6%95%B0\" aria-label=\"参数 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>参数</h2>\n<table>\n<thead>\n<tr>\n<th>参数名称</th>\n<th>类型</th>\n<th>默认值</th>\n<th>描述</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>model_path</td>\n<td>str</td>\n<td>/opt/aihc/models</td>\n<td>模型文件存储路径</td>\n</tr>\n<tr>\n<td>clip_model_name</td>\n<td>str</td>\n<td>openai/clip-vit-large-patch14</td>\n<td>CLIP 模型名称或路径</td>\n</tr>\n<tr>\n<td>prompt</td>\n<td>str</td>\n<td>quality</td>\n<td>质量评估提示词</td>\n</tr>\n<tr>\n<td>device</td>\n<td>str</td>\n<td>cuda</td>\n<td>设备类型，支持CPU和GPU设备默认值：\"cuda\"可选值：\"cpu\", \"cuda\", \"cuda:0\", \"cuda:1\"等</td>\n</tr>\n<tr>\n<td>sample_mode</td>\n<td>str</td>\n<td>by_count_uniform</td>\n<td>采样模式，参考 VideoFrameSampler</td>\n</tr>\n<tr>\n<td>start_time_sec</td>\n<td>float</td>\n<td>0.0</td>\n<td>采样起始时间（秒）</td>\n</tr>\n<tr>\n<td>end_time_sec</td>\n<td>float or None</td>\n<td></td>\n<td>采样结束时间（秒）</td>\n</tr>\n<tr>\n<td>count_k</td>\n<td>int or None</td>\n<td>8</td>\n<td>均匀采样帧数（by_count_uniform使用）</td>\n</tr>\n<tr>\n<td>interval_sec</td>\n<td>float or None</td>\n<td></td>\n<td>时间间隔（秒，by_interval_time使用）</td>\n</tr>\n<tr>\n<td>interval_frames</td>\n<td>int or None</td>\n<td></td>\n<td>解码帧间隔（by_interval_frames使用）</td>\n</tr>\n<tr>\n<td>target_fps</td>\n<td>float or None</td>\n<td></td>\n<td>目标采样FPS（by_fps使用）</td>\n</tr>\n<tr>\n<td>timestamps_sec</td>\n<td>list[float] or None</td>\n<td></td>\n<td>采样时间戳列表（秒，by_timestamps使用）</td>\n</tr>\n<tr>\n<td>max_frames</td>\n<td>int or None</td>\n<td></td>\n<td>返回帧上限</td>\n</tr>\n<tr>\n<td>reduce_mode</td>\n<td>str</td>\n<td>avg</td>\n<td>多帧聚合策略，可选 \"avg\"</td>\n</tr>\n<tr>\n<td>default_video_format</td>\n<td>str</td>\n<td>mp4</td>\n<td>二进制/BASE64输入的视频格式</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"输出\"><a href=\"#%E8%BE%93%E5%87%BA\" aria-label=\"输出 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>输出</h2>\n<p>包含视频质量评分的浮点数组，无法评分返回null值</p>\n<h2 id=\"使用示例\"><a href=\"#%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B\" aria-label=\"使用示例 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>使用示例</h2>\n\n    <div class=\"code-block-wrapper\">\n        <div class=\"code-block\">\n            <div class=\"code-block-header\">\n                <span class=\"code-block-name\">Plain Text</span>\n                <button class=\"code-copy-btn\" data-tooltip-text=\"\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.57894 3.45614C5.57894 3.38832 5.63392 3.33333 5.70175 3.33333H12.5439C12.6117 3.33333 12.6667 3.38832 12.6667 3.45614V10.2982C12.6667 10.3661 12.6117 10.4211 12.5439 10.4211H11.7544V5.70175C11.7544 4.89754 11.1025 4.24561 10.2982 4.24561H5.57894V3.45614ZM4.24561 4.24561V3.45614C4.24561 2.65194 4.89754 2 5.70175 2H12.5439C13.3481 2 14 2.65194 14 3.45614V10.2982C14 11.1025 13.3481 11.7544 12.5439 11.7544H11.7544V12.5439C11.7544 13.3481 11.1025 14 10.2982 14H3.45614C2.65194 14 2 13.3481 2 12.5439V5.70175C2 4.89754 2.65194 4.24561 3.45614 4.24561H4.24561ZM3.33333 5.70175C3.33333 5.63392 3.38832 5.57894 3.45614 5.57894H10.2982C10.3661 5.57894 10.4211 5.63392 10.4211 5.70175V12.5439C10.4211 12.6117 10.3661 12.6667 10.2982 12.6667H3.45614C3.38832 12.6667 3.33333 12.6117 3.33333 12.5439V5.70175Z\" fill=\"currentColor\"></path> </svg>\n                    复制\n                </button>\n            </div>\n            <div class=\"code-block-content\">\n                <pre class=\"language-text\"><code><span class=\"line-number\">1</span>from __future__ import annotations\n<span class=\"line-number\">2</span>\n<span class=\"line-number\">3</span>import logging\n<span class=\"line-number\">4</span>import os\n<span class=\"line-number\">5</span>\n<span class=\"line-number\">6</span>import ray\n<span class=\"line-number\">7</span>\n<span class=\"line-number\">8</span>import daft\n<span class=\"line-number\">9</span>from daft import col\n<span class=\"line-number\">10</span>from daft.aihc.common.udf import aihc_udf\n<span class=\"line-number\">11</span>from daft.aihc.functions.video.video_quality_score import VideoQualityScore\n<span class=\"line-number\">12</span>\n<span class=\"line-number\">13</span>if __name__ == &quot;__main__&quot;:\n<span class=\"line-number\">14</span>    if os.getenv(&quot;DAFT_RUNNER&quot;, &quot;native&quot;) == &quot;ray&quot;:\n<span class=\"line-number\">15</span>        import ray\n<span class=\"line-number\">16</span>        ray.init(dashboard_host=&quot;0.0.0.0&quot;, ignore_reinit_error=True)\n<span class=\"line-number\">17</span>        daft.set_runner_ray()\n<span class=\"line-number\">18</span>    daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)\n<span class=\"line-number\">19</span>\n<span class=\"line-number\">20</span>    model_path = os.getenv(&quot;MODEL_PATH&quot;, &quot;/opt/aihc/models&quot;)\n<span class=\"line-number\">21</span>    num_gpus = 1\n<span class=\"line-number\">22</span>\n<span class=\"line-number\">23</span>    samples = {\n<span class=\"line-number\">24</span>        &quot;video_path&quot;: [&quot;https://{bucket}.bj.bcebos.com/sample.mp4&quot;],\n<span class=\"line-number\">25</span>    }\n<span class=\"line-number\">26</span>    ds = daft.from_pydict(samples)\n<span class=\"line-number\">27</span>\n<span class=\"line-number\">28</span>    constructor_kwargs = {\n<span class=\"line-number\">29</span>        &quot;model_path&quot;: model_path,\n<span class=\"line-number\">30</span>        &quot;clip_model_name&quot;: &quot;openai/clip-vit-large-patch14&quot;,\n<span class=\"line-number\">31</span>        &quot;prompt&quot;: &quot;quality&quot;,\n<span class=\"line-number\">32</span>        &quot;rank&quot;: 0,\n<span class=\"line-number\">33</span>        &quot;sample_mode&quot;: &quot;by_count_uniform&quot;,\n<span class=\"line-number\">34</span>        &quot;count_k&quot;: 4,\n<span class=\"line-number\">35</span>        &quot;reduce_mode&quot;: &quot;avg&quot;,\n<span class=\"line-number\">36</span>    }\n<span class=\"line-number\">37</span>\n<span class=\"line-number\">38</span>    ds = ds.with_column(\n<span class=\"line-number\">39</span>        &quot;quality_score&quot;,\n<span class=\"line-number\">40</span>        aihc_udf(VideoQualityScore, construct_args=constructor_kwargs, num_gpus=num_gpus, batch_size=1, concurrency=1)(\n<span class=\"line-number\">41</span>            col(&quot;video_path&quot;)\n<span class=\"line-number\">42</span>        ),\n<span class=\"line-number\">43</span>    )\n<span class=\"line-number\">44</span>\n<span class=\"line-number\">45</span>    ds.show()\n<span class=\"line-number\">46</span>#╭────────────────────────────────┬───────────────────╮                                                                                                                                                         \n<span class=\"line-number\">47</span>#│ video_path                     ┆ quality_score     │\n<span class=\"line-number\">48</span>#│ ---                            ┆ ---               │\n<span class=\"line-number\">49</span>#│ String                         ┆ Float64           │\n<span class=\"line-number\">50</span>#╞════════════════════════════════╪═══════════════════╡\n<span class=\"line-number\">51</span>#│ https://{bucket}.bj.bcebos.com/┆ 0.372357835372289 │\n<span class=\"line-number\">52</span>#╰────────────────────────────────┴───────────────────╯</code></pre>\n            </div>\n        </div>\n    </div>\n  ","fields":{"slug":"lmpb58sbb","title":"视频质量评分","date":"2026-06-04","extractedHeadings":[]},"headings":[{"value":"简介","depth":2},{"value":"功能","depth":2},{"value":"输入","depth":2},{"value":"参数","depth":2},{"value":"输出","depth":2},{"value":"使用示例","depth":2}]}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"lmpb58sbb","prev":{"id":"smpb58s91","name":"视频片段切分-时长","path":"smpb58s91","filePath":"操作指南/AI数据处理/算子列表/视频/视频片段切分-时长.md","seo":null,"parentIds":["ilib2qygp","Ymo88m8hi","Imob3m6so","6mpawyry0"],"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null},{"id":"Ymo88m8hi","documentId":"c8cb5e38-f8c5-40f4-a424-b0c7895f0c0a","name":"AI数据处理","repoName":"AIHC","filePath":"操作指南/AI数据处理","disabled":false,"path":"Ymo88m8hi","lastMergeTime":"2026-04-21 14:23:10","isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"Imob3m6so","documentId":"fe548e34-6659-4ff5-86f6-eee2c43aec90","name":"算子列表","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表","disabled":false,"path":"Imob3m6so","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"6mpawyry0","documentId":"3428d02c-e287-45b8-9d16-5a7b20881dd4","name":"视频","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表/视频","disabled":false,"path":"6mpawyry0","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""}]},"next":{"id":"vmpb58sdc","name":"通用视频格式转换","path":"vmpb58sdc","filePath":"操作指南/AI数据处理/算子列表/视频/通用视频格式转换.md","seo":null,"parentIds":["ilib2qygp","Ymo88m8hi","Imob3m6so","6mpawyry0"],"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null},{"id":"Ymo88m8hi","documentId":"c8cb5e38-f8c5-40f4-a424-b0c7895f0c0a","name":"AI数据处理","repoName":"AIHC","filePath":"操作指南/AI数据处理","disabled":false,"path":"Ymo88m8hi","lastMergeTime":"2026-04-21 14:23:10","isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"Imob3m6so","documentId":"fe548e34-6659-4ff5-86f6-eee2c43aec90","name":"算子列表","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表","disabled":false,"path":"Imob3m6so","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"6mpawyry0","documentId":"3428d02c-e287-45b8-9d16-5a7b20881dd4","name":"视频","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表/视频","disabled":false,"path":"6mpawyry0","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""}]},"parents":[{"id":"ilib2qygp","documentId":"bfa43a8b-968a-41a1-8c9d-906507eeaed9","name":"操作指南","repoName":"AIHC","filePath":"操作指南","disabled":false,"path":"ilib2qygp","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":null},{"id":"Ymo88m8hi","documentId":"c8cb5e38-f8c5-40f4-a424-b0c7895f0c0a","name":"AI数据处理","repoName":"AIHC","filePath":"操作指南/AI数据处理","disabled":false,"path":"Ymo88m8hi","lastMergeTime":"2026-04-21 14:23:10","isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"Imob3m6so","documentId":"fe548e34-6659-4ff5-86f6-eee2c43aec90","name":"算子列表","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表","disabled":false,"path":"Imob3m6so","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""},{"id":"6mpawyry0","documentId":"3428d02c-e287-45b8-9d16-5a7b20881dd4","name":"视频","repoName":"AIHC","filePath":"操作指南/AI数据处理/算子列表/视频","disabled":false,"path":"6mpawyry0","lastMergeTime":null,"isApiDoc":null,"httpMethod":null,"seo":null,"sourceOrgName":null,"sourceRepoName":null,"sourceDocumentId":""}],"specificSeo":null}}}