You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
视频处理
视频自适应压缩
复制全文
视频自适应压缩

算子介绍

描述

视频自适应压缩

核心功能

  • 根据目标文件大小自适应压缩视频
  • 多级压缩策略:帧率调整 -> 分辨率调整 -> 码率控制
  • 保持视频质量的前提下尽可能压缩文件大小
  • 支持CPU和GPU编码
  • 支持路径输入、二进制输入和TOS输出

压缩策略

  1. 检查原始文件大小,小于目标大小直接返回
  2. 调整帧率到target_fps,默认5fps,检查大小是否满足(原fps小于或接近目标2fps内则跳过)
  3. 按比例调整分辨率到最小分辨率,默认360p,检查大小是否满足(原分辨率小于或接近目标分辨率1.2倍内则跳过)
  4. 使用两遍码率控制强制压缩到目标大小

格式支持

  • MP4 (.mp4)
  • AVI (.avi)
  • MOV (.mov)
  • MKV (.mkv)
  • 其他常见视频格式

编码模式

  • CPU编码 (libx264):质量优先,压缩效率高,速度较慢,成本低
  • GPU编码 (h264_nvenc):速度快,成本相对高

Daft 调用

算子参数

输入

输入列名

说明

video_paths

视频文件路径列(本地、TOS、HTTP等),与video_binaries二选一

video_binaries

视频二进制数据列,与video_paths二选一

video_formats

视频格式字符串列,配合video_binaries使用

output_basenames

输出文件基础名称列(不含扩展名)

输出

压缩后的视频路径列

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

output_tos_dir

str

将压缩后的视频保存到该TOS目录中,如果为空则不保存。 格式:"tos://bucket/path/" 默认值:""

max_output_size_mb

float

50.0

最大输出文件大小(MB)。 默认值:50.0

target_fps

float

5.0

帧率调整的目标值。 默认值:5.0

min_resolution_height

int

360

最小分辨率高度(像素),保持宽高比。 默认值:360

allowed_formats

list

[mp4, avi, mov]

当视频大小满足时,允许直接输出的视频格式列表。 默认值:["mp4", "avi", "mov"]

rank

int or None

指定使用的GPU设备编号(多卡环境有效)。 默认值:None

调用示例

下面的代码展示了如何使用 Daft(适用于分布式)运行算子对视频进行自适应压缩,智能控制文件大小。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.udf import las_udf
from daft.las.functions.video import VideoAdaptiveCompress

if __name__ == "__main__":
    TOS_TEST_DIR = os.getenv("TOS_TEST_DIR", "tos_bucket")
    samples = {
        "video_path": [f"tos://{TOS_TEST_DIR}/video_adaptive_compress/sample.mp4"],
    }
    ds = daft.from_pydict(samples)

    output_tos_dir = f"tos://{TOS_TEST_DIR}/video_adaptive_compress"
    constructor_kwargs = {
        "output_tos_dir": output_tos_dir,
        "max_output_size_mb": 50.0,
        "target_fps": 5.0,
        "min_resolution_height": 360,
        "rank": None,
    }

    ds = ds.with_column(
        "compressed_video_path",
        las_udf(VideoAdaptiveCompress, construct_args=constructor_kwargs, num_gpus=1, batch_size=1, concurrency=1)(
            col("video_path")
        ),
    )

    ds.show()
    # ╭────────────────────────────────┬──────────────────────────────────╮
    # │ video_path                     ┆ compressed_video_path            │
    # │ ---                            ┆ ---                              │
    # │ Utf8                           ┆ Utf8                             │
    # ╞════════════════════════════════╪══════════════════════════════════╡
    # │ tos://tos_bucket/video_adapt…  ┆ tos://tos_bucket/video_adapt…    │
    # ╰────────────────────────────────┴──────────────────────────────────╯
最近更新时间:2026.01.08 19:14:20
这个页面对您有帮助吗?
有用
有用
无用
无用