[ PROMPT_NODE_27778 ]
calculate-metadata
[ SKILL_DOCUMENTATION ]
# 使用 calculateMetadata
在 `` 上使用 `calculateMetadata`,以便在渲染前动态设置时长、尺寸和转换属性。
tsx
## 基于视频设置时长
使用 mediabunny/metadata 技能中的 `getMediaMetadata()` 函数获取视频时长:
tsx
import {CalculateMetadataFunction} from 'remotion';
import {getMediaMetadata} from '../get-media-metadata';
const calculateMetadata: CalculateMetadataFunction = async ({props}) => {
const {durationInSeconds} = await getMediaMetadata(props.videoSrc);
return {
durationInFrames: Math.ceil(durationInSeconds * 30),
};
};
## 匹配视频尺寸
tsx
const calculateMetadata: CalculateMetadataFunction = async ({props}) => {
const {durationInSeconds, dimensions} = await getMediaMetadata(props.videoSrc);
return {
durationInFrames: Math.ceil(durationInSeconds * 30),
width: dimensions?.width ?? 1920,
height: dimensions?.height ?? 1080,
};
};
## 基于多个视频设置时长
tsx
const calculateMetadata: CalculateMetadataFunction = async ({props}) => {
const metadataPromises = props.videos.map((video) => getMediaMetadata(video.src));
const allMetadata = await Promise.all(metadataPromises);
const totalDuration = allMetadata.reduce((sum, meta) => sum + meta.durationInSeconds, 0);
return {
durationInFrames: Math.ceil(totalDuration * 30),
};
};
## 设置默认输出文件名
根据属性设置默认输出文件名:
tsx
const calculateMetadata: CalculateMetadataFunction = async ({props}) => {
return {
defaultOutName: `video-${props.id}.mp4`,
};
};
## 转换属性
在渲染前获取数据或转换属性:
tsx
const calculateMetadata: CalculateMetadataFunction = async ({props, abortSignal}) => {
const response = await fetch(props.dataUrl, {signal: abortSignal});
const data = await response.json();
return {
props: {
...props,
fetchedData: data,
},
};
};
当 Studio 中的属性发生变化时,`abortSignal` 会取消过期的请求。
## 返回值
所有字段均为可选。返回的值将覆盖 `` 的属性:
- `durationInFrames`: 帧数
- `width`: