视频元数据提取
更新时间:2026-05-18
视频元数据提取
简介
视频元数据提取算子,基于 FFprobe 实现,用于从视频文件中提取详细的媒体信息。
功能描述
使用 FFprobe 提取视频文件的元数据信息,包括时长、格式、编码器、分辨率、帧率、音频信息等。支持 BOS 和 S3 路径的预签名 URL 处理。
算子参数
输入
| 输入 | 含义 |
|---|---|
| input_path | 输入视频文件路径(支持本地路径、BOS 路径或远程 URL) |
输出
| 输出 | 含义 |
|---|---|
| duration | 视频时长(秒) |
| format_name | 封装格式名称 |
| bit_rate | 比特率 |
| has_video | 是否包含视频流 |
| has_audio | 是否包含音频流 |
| video_codec | 视频编码器名称 |
| video_width | 视频宽度 |
| video_height | 视频高度 |
| video_fps | 视频帧率 |
| audio_codec | 音频编码器名称 |
| audio_sample_rate | 音频采样率 |
| audio_channels | 音频通道数 |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| timeout | int | None | 提取超时时间(秒) |
调用示例
Plain Text
1from __future__ import annotations
2
3import os
4import subprocess
5
6import daft
7from daft import col
8
9from daft.aihc.common.udf import aihc_udf
10from daft.aihc.functions.video.video_extract_metadata import VideoExtractMetadata
11
12if __name__ == "__main__":
13 if os.getenv("DAFT_RUNNER", "native") == "ray":
14 import ray
15 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
16 daft.set_runner_ray()
17 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
18
19 # 检查 ffprobe 是否可用
20 try:
21 subprocess.run(["ffprobe", "-version"], capture_output=True, check=True)
22 except (subprocess.CalledProcessError, FileNotFoundError):
23 print("SKIP: ffprobe not available")
24 exit(0)
25
26 samples = {
27 "video_path": [
28 "/tmp/test_clip1.mp4",
29 "/tmp/test_clip2.mov",
30 ]
31 }
32 ds = daft.from_pydict(samples)
33 ds = ds.with_column(
34 "metadata",
35 aihc_udf(
36 VideoExtractMetadata,
37 construct_args={"timeout": 60},
38 num_cpus=1,
39 concurrency=4,
40 batch_size=8,
41 )(col("video_path")),
42 )
43 ds = ds.with_column("duration", col("metadata")["duration"])
44 ds = ds.with_column("resolution", col("metadata")["video_width"])
45 ds.show()
评价此篇文章
