
Byted Las Video Resize
- 33 installs
- 411 repo stars
- Updated August 4, 2026
- bytedance/agentkit-samples
byted-las-video-resize is a Claude skill that wraps Volcengine LAS to resize, scale and transcode video resolution with GPU NVENC encoding.
About
This skill wraps the Volcengine LAS video-resize operator through the lasutil CLI to change video resolution and dimensions with GPU NVENC encoding. A developer uses it to upscale or downscale video, adapt clips for different platforms, compress by reducing resolution, or convert landscape to portrait. It runs an async submit-poll workflow and writes the resized file to a TOS directory the user provides.
- Wraps Volcengine LAS las_video_resize for GPU NVENC-accelerated video resolution changes
- Supports min/max width and height ranges with aspect-ratio strategies including landscape-to-portrait
- Async submit-poll workflow that writes the resized video to a user-provided TOS directory
Byted Las Video Resize by the numbers
- 33 all-time installs (skills.sh)
- Ranked #957 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
byted-las-video-resize capabilities & compatibility
Requires a Volcengine LAS_API_KEY; billed by Volcengine per resolution tier and duration, not free.
- Capabilities
- video resize · video transcode · video compression
- Use cases
- video generation
- Pricing
- Bring your own API key
What byted-las-video-resize says it does
将视频调整到指定分辨率范围,支持宽高比保持策略和 GPU NVENC 编码。
**强制固定尺寸**:需要设置 `min_width=max_width` 且 `min_height=max_height`,并将 `force_original_aspect_ratio_type=disable`。
**环境变量**: `LAS_API_KEY` (必填)
npx skills add https://github.com/bytedance/agentkit-samples --skill byted-las-video-resizeAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 33 |
|---|---|
| repo stars | ★ 411 |
| Last updated | August 4, 2026 |
| Repository | bytedance/agentkit-samples ↗ |
What it does
Resize, scale or transcode video resolution with GPU NVENC via Volcengine LAS, including aspect-ratio conversion.
Who is it for?
Upscaling or downscaling video, adapting resolution for platforms, compressing by lowering resolution, or landscape-to-portrait conversion.
Skip if: Users without a writable TOS output directory, which output_tos_dir requires.
When should I use this skill?
The user wants to resize or scale video resolution, change dimensions for a platform, compress a video, or convert aspect ratio.
What you get
Returns a resized and re-encoded video at the target resolution, stored at the user's TOS output directory.
- resized video output_path
By the numbers
- 6-step submit-poll workflow (Step 0 to Step 5)
Files
LAS 视频分辨率调整(las_video_resize)
将视频调整到指定分辨率范围,支持宽高比保持策略和 GPU NVENC 编码。
设计模式
本 skill 主要采用:
- Tool Wrapper:封装
lasutilCLI 调用 - Pipeline:包含 Step 0 → Step N 的顺序工作流
核心 API 与配置
- 算子 ID:
las_video_resize - API: 异步(
submit→poll) - 环境变量:
LAS_API_KEY(必填)
详细参数与接口定义见 references/api.md。
Gotchas
- 强制固定尺寸:需要设置
min_width=max_width且min_height=max_height,并将force_original_aspect_ratio_type=disable。 - 密钥安全:若聊天框屏蔽密钥,让用户在当前目录创建
env.sh并写入export LAS_API_KEY="...",SDK 会自动读取。 - 免责声明:最终回复结果时必须包含:"本方式的计费均为预估计费,与实际费用有差距,实际费用以运行后火山产生的账单为准。计费说明请参考 Volcengine LAS 定价。",且禁止使用"实际费用"字眼描述预估价。
工作流(严格按步骤执行)
复制此清单并跟踪进度:
执行进度:
- [ ] Step 0: 前置检查
- [ ] Step 1: 初始化与准备
- [ ] Step 2: 预估价格
- [ ] Step 3: 提交任务
- [ ] Step 4: 异步查询
- [ ] Step 5: 结果呈现Step 0: 前置检查(⚠️ 必须在第一轮对话中完成)
在接受用户的任务后,不要立即开始执行,必须首先进行以下环境检查: 1. 检查 `LAS_API_KEY` 与 `LAS_REGION`:确认环境变量或 .env 中是否已配置。
- 若无,必须立即向用户索要(提示:
LAS_REGION常见为cn-beijing)。 - 注意:
LAS_REGION必须与您的 API Key 及 TOS Bucket 所在的地域完全一致。如果用户中途切换了 Region,必须提醒用户其 TOS Bucket 也需对应更换,否则会导致权限异常或上传失败。
2. 检查输入路径:
- 如果用户要求处理的是本地文件,则需要先通过 File API 上传至 TOS(只需
LAS_API_KEY,无需额外 TOS 凭证)。 - 如果算子的输出结果存放在 TOS 上,且用户需要下载回本地,则需要
VOLCENGINE_ACCESS_KEY和VOLCENGINE_SECRET_KEY。对于仅需要上传输入文件的场景,TOS 凭证不再必须。
3. 检查输出路径:
output_tos_dir为必填参数,必须由用户提供自己可写的 TOS 目录路径(格式:tos://bucket/output_dir/)。- 服务端需要将缩放后的视频写入此目录。
4. 确认无误后:才能进入下一步。
Step 1: 初始化与准备
环境初始化(Agent 必做):
# 执行统一的环境初始化与更新脚本(会自动创建/激活虚拟环境,并检查更新)
source "$(dirname "$0")/scripts/env_init.sh" las_video_resize
workdir=$LAS_WORKDIR如果网络问题导致更新失败,脚本会跳过检查,使用本地已安装的 SDK 继续执行。
- 处理本地文件时:使用 File API 上传(只需
LAS_API_KEY,无需 TOS 凭证和 Bucket):
lasutil file-upload <local_path>上传成功后返回 JSON,取其中的 presigned_url(HTTPS 预签名下载链接,24 小时有效)传给算子作为输入 URL。
Step 2: 预估价格(⚠️ 必须获得用户确认)
1. 读取 references/prices.md 获取最新计费标准。 2. 获取视频信息(时长、编码、分辨率):
lasutil media-duration <video_url>3. 根据档位查表计算总价,将计费单价与预估总价一并告知用户并强制暂停执行,明确等待用户回复确认。在用户明确回复"继续"、"确认"等同意指令前,绝对禁止进入下一步(执行/提交任务)。提示:预估仅供参考,实际以火山账单为准。计费说明请参考 Volcengine LAS 定价。
Step 3: 提交任务 (Submit)
构造基础 data.json:
{
"video_path": "<presigned_url>",
"output_tos_dir": "tos://<your-bucket>/output_dir/",
"output_file_name": "resized.mp4",
"min_width": 1280, "max_width": 2560,
"min_height": 720, "max_height": 1440,
"force_original_aspect_ratio_type": "increase"
}重要提示: output_tos_dir 必须由用户提供,需要填写用户自己账号下可写的 TOS 目录(服务端会将缩放后的视频写入此目录)。单文件提交:
data=$(cat "$workdir/data.json")
lasutil submit las_video_resize "$data" > "$workdir/submit.json"⚠️ 强制反馈:任务提交成功后,必须立即向用户返回生成的 `task_id`,以便用户跟踪进度或在必要时手动查询。
Step 4: 异步查询 (Poll)
⚠️ 异步任务与后台轮询约束:
- 如果你当前的环境支持后台任务/异步长效运行:你可以利用环境提供的后台能力(例如发起后台轮询任务),并在任务完成后主动将结果返回给用户。
- 如果你当前的环境不支持长效后台任务(如普通的单轮对话沙箱),且直接
sleep循环会导致超时崩溃:绝对禁止在代码中执行死循环等待! 此时必须立即向用户输出 Task ID 并结束当前轮次,告知用户:"任务已提交,请稍后向我询问进度"。
单任务查询:
lasutil poll las_video_resize {task_id}COMPLETED→ 返回输出视频路径result.data.output_path。RUNNING/PENDING→ 稍后重试。
Step 5: 结果呈现
处理结果:
# 获取缩放后的视频 URL
resized_url=$(cat "./output/{task_id}/result.json" | jq -r '.data.output_path')
echo "缩放后的视频: $resized_url"视频文件:
- 缩放后的视频已保存在 TOS,直接返回预签名 URL
- 无需再次上传
向用户展示: 1. 缩放后的视频下载链接 2. 输出分辨率、编码信息 3. 本地结果路径:./output/{task_id}/ 4. 计费声明
审查标准
执行完成后,Agent 应自检: 1. 环境变量是否正确配置 2. 输入文件是否成功上传 3. 输出结果是否正确呈现给用户 4. 计费声明是否包含
byted-las-video-resize 自检清单(Skill Hub)
- SKILL.md 顶部包含 YAML frontmatter(name/description)
- 文档不包含任何真实密钥、Token、Cookie(只引用
LAS_API_KEY环境变量名) - 文档包含预估价格步骤,且 references/prices.md 提供单价信息或占位说明
- 推荐流程为 submit + 短轮询 poll,不包含阻塞等待示例
- 批处理示例包含 tos-ls、batch-submit、batch-poll,并强调
--max-seconds以避免 openclaw 阻塞 - 大批量支持在 workdir 下按 batch_001/batch_002 分批隔离 inputs/data/state
- 常见问题包含 openclaw
task_id 为 null、$RANDOM不可用等环境差异 - skill 目录内不包含临时文件(如
__pycache__、.DS_Store、大体积输出文件)
{
"skill_name": "byted-las-video-resize",
"evals": [
{
"id": 1,
"prompt": "我有一个视频 tos://bucket/input.mp4,想把分辨率调整到宽 1280-2560、高 720-1440 范围内,并输出到 tos://bucket/output/,文件名 resized.mp4。请给出 data.json 模板、lasutil submit 命令,并说明后续如何用短轮询 poll 拿到 data.output_path。",
"expected_output": "给出 data.json、submit 命令、说明 COMPLETED 后从 data.output_path 获取结果,强调短轮询不阻塞。",
"files": []
},
{
"id": 2,
"prompt": "我有一个目录 tos://bucket/input/ 下很多 mp4 要批量 resize。请给出 tos-ls 生成总清单、按 batch_001 目录分批、batch-submit/batch-poll 的完整流程。注意 input_field 要用 video_path。",
"expected_output": "给出 workdir/batch_001 的目录组织,batch-submit/batch-poll 命令与关键参数含义(jobs/max-seconds/progress-interval),并提醒用 -h 查看参数说明。",
"files": []
},
{
"id": 3,
"prompt": "用户给了本地文件 ./input.mp4,要求最终输出落到本地 ./output.mp4。请给出上传到 TOS、中转输出到 TOS、短轮询 poll、最后下载到本地的步骤。",
"expected_output": "包含 lasutil tos-upload/tos-download 的桥接步骤,以及 submit/poll 的命令示例。",
"files": []
}
]
}
# Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
las_video_resize API 参考
las_video_resize 为异步算子:先 submit 获取 task_id,再 poll 轮询直到 COMPLETED/FAILED。
Base / Region
- API Base:
https://operator.las.<region>.volces.com/api/v1 - Region:
cn-beijingcn-shanghai- 鉴权:
Authorization: Bearer $LAS_API_KEY
Submit 请求体
| 字段名 | 类型 | 是否必选 | 说明 |
|---|---|---|---|
| operator_id | string | 是 | 固定为 las_video_resize(CLI 自动填充) |
| operator_version | string | 是 | 固定为 v1(CLI 自动填充) |
| data | VideoResizeReqParams | 是 | `data.json` 的内容对应此字段,详情见下 |
VideoResizeReqParams
| 字段名 | 类型 | 是否必选 | 说明 |
|---|---|---|---|
| video_path | string | 是 | 输入视频 TOS 路径或可下载 URL(tos://bucket/key 或 http/https) |
| output_tos_dir | string | 是 | 输出目录(tos://bucket/prefix/) |
| output_file_name | string | 是 | 输出文件名(同名会覆盖) |
| min_width | integer | 是 | 最小宽度(像素) |
| max_width | integer | 是 | 最大宽度(像素) |
| min_height | integer | 是 | 最小高度(像素) |
| max_height | integer | 是 | 最大高度(像素) |
| force_original_aspect_ratio_type | string | 否 | disable/increase/decrease,默认 increase |
| force_divisible_by | integer | 否 | 像素对齐步长,默认 2 |
| cq | integer | 否 | NVENC 质量参数(0-51,0=自动) |
| rc | string | 否 | NVENC 码率模式(constqp/vbr/cbr,默认 vbr) |
Poll 请求体
| 字段名 | 类型 | 是否必选 | 说明 |
|---|---|---|---|
| operator_id | string | 是 | 固定为 las_video_resize(CLI 自动填充) |
| operator_version | string | 是 | 固定为 v1(CLI 自动填充) |
| task_id | string | 是 | submit 返回的任务 ID(CLI 自动填充) |
Poll 响应体(摘要)
| 字段名 | 类型 | 备注 |
|---|---|---|
| metadata.task_status | string | ACCEPTED/RUNNING/COMPLETED/FAILED |
| data.output_path | string | 输出视频 TOS 路径 |
| data.width | integer | 输出宽度 |
| data.height | integer | 输出高度 |
| data.duration | float | 视频时长 |
计费信息(占位)
计费项和时长,输入视频分辨率相关。
| 计费项编号 | 价格 | 用量单位 |
|---|---|---|
| video-resize_H.265-2k_cn-beijing | 0.525 | 元/分钟 |
| video-resize_H.265-1080p_cn-beijing | 0.244 | 元/分钟 |
| video-resize_H.265-720p_cn-beijing | 0.122 | 元/分钟 |
| video-resize_H.265-540p_cn-beijing | 0.102 | 元/分钟 |
| video-resize_H.265-480p_cn-beijing | 0.081 | 元/分钟 |
| video-resize_H.265-360p_cn-beijing | 0.054 | 元/分钟 |
| video-resize_H.265-240p_cn-beijing | 0.043 | 元/分钟 |
| video-resize_H.265-4k_cn-beijing | 1.05 | 元/分钟 |
| video-resize_H.264-2k_cn-beijing | 0.105 | 元/分钟 |
| video-resize_H.264-1080p_cn-beijing | 0.049 | 元/分钟 |
| video-resize_H.264-720p_cn-beijing | 0.024 | 元/分钟 |
| video-resize_H.264-540p_cn-beijing | 0.02 | 元/分钟 |
| video-resize_H.264-480p_cn-beijing | 0.016 | 元/分钟 |
| video-resize_H.264-360p_cn-beijing | 0.011 | 元/分钟 |
| video-resize_H.264-240p_cn-beijing | 0.009 | 元/分钟 |
| video-resize_H.264-4k_cn-beijing | 0.21 | 元/分钟 |
#!/bin/bash
# ==============================================================================
# 视频格式预检查
# Usage: scripts/check_format.sh <file_path>
# ==============================================================================
FILE_PATH="$1"
if [ -z "$FILE_PATH" ]; then
echo "❌ 错误: 请提供文件路径"
exit 1
fi
# 获取文件扩展名并转小写
EXT=$(echo "$FILE_PATH" | awk -F. '{print tolower($NF)}')
# 允许的视频格式
ALLOWED_FORMATS="mp4 wmv avi mkv mov flv webm mpg mpeg"
if [[ " $ALLOWED_FORMATS " =~ " $EXT " ]]; then
echo "✅ 格式检查通过: $EXT"
exit 0
else
echo "⚠️ 警告: 文件扩展名 '$EXT' 不在推荐格式列表中"
echo " 推荐格式: $ALLOWED_FORMATS"
echo " 请确认输入格式正确"
exit 1
fi
#!/bin/bash
# ==============================================================================
# LAS SDK & Skill 环境初始化与更新脚本
# 用法: source scripts/env_init.sh <operator_id>
# ==============================================================================
OPERATOR_ID=$1
if [ -z "$OPERATOR_ID" ]; then
echo "❌ 错误: 必须提供 operator_id"
return 1 2>/dev/null || exit 1
fi
# 1. 虚拟环境隔离
# Find project root dynamically, then check for .las_venv
# skill structure: <project_root>/skills/<skill>/scripts/env_init.sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
# 优先复用项目根目录的虚拟环境,不存在才创建新的
if [ -d "${PROJECT_ROOT}/.las_venv" ]; then
source "${PROJECT_ROOT}/.las_venv/bin/activate"
elif [ ! -d ".las_venv" ]; then
python3 -m venv .las_venv
source .las_venv/bin/activate
else
source .las_venv/bin/activate
fi
# 2. 获取远程 manifest
manifest_url="https://las-ai-cn-beijing-online.tos-cn-beijing.volces.com/operator_cards_serving/public/skills/sdk/manifest.json"
manifest=$(curl -sf "$manifest_url" || echo '{}')
# 3. 比较 SDK 版本并自动更新
local_ver=$(lasutil --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' || echo "0.0.0")
remote_ver=$(echo "$manifest" | jq -r '.sdk_version // "unknown"')
if [ "$local_ver" = "0.0.0" ] || [ "$local_ver" != "$remote_ver" ]; then
echo "📦 SDK 更新: $local_ver → $remote_ver,正在安装..."
pip install --quiet --upgrade https://las-ai-cn-beijing-online.tos-cn-beijing.volces.com/operator_cards_serving/public/skills/sdk/las_sdk-0.2.0-py3-none-any.whl
fi
# 4. 检查当前算子的参数变更
op_changes=$(echo "$manifest" | jq -r ".operators.${OPERATOR_ID}.changes_since // {} | to_entries[] | \" 自 \(.key) 起: \(.value[])\"" 2>/dev/null)
if [ -n "$op_changes" ]; then
echo "⚠️ 算子 ${OPERATOR_ID} 有参数更新:"
echo "$op_changes"
echo "建议使用 find-skills 检索并更新此 skill 到最新版本。"
fi
# 5. 初始化工作目录
export LAS_WORKDIR=$(mktemp -d /tmp/las_work_XXXXXX)
echo "✅ 环境初始化完成,工作目录: $LAS_WORKDIR"
#!/bin/bash
# ==============================================================================
# 生成结果展示 markdown 模板,自动包含计费声明
# Usage: scripts/generate_result.md.sh <task_id> <output_dir> <estimated_price>
# ==============================================================================
TASK_ID="$1"
OUTPUT_DIR="$2"
ESTIMATED_PRICE="$3"
if [ -z "$TASK_ID" ] || [ -z "$OUTPUT_DIR" ]; then
echo "❌ 错误: 参数不全"
exit 1
fi
STATUS=$(cat "${OUTPUT_DIR}/COMPLETED" 2>/dev/null || echo "UNKNOWN")
cat <<EOF
# ASR 识别结果
## 任务信息
- **任务 ID**: \`${TASK_ID}\`
- **最终状态**: \`${STATUS}\`
EOF
if [ -n "$ESTIMATED_PRICE" ]; then
cat <<EOF
- **预估计费**: ${ESTIMATED_PRICE} 元
EOF
fi
if [ -f "${OUTPUT_DIR}/transcript.txt" ]; then
TEXT_LEN=$(wc -c < "${OUTPUT_DIR}/transcript.txt")
DURATION_MS=$(cat "${OUTPUT_DIR}/result.json" | jq -r '.data.audio_info.duration // 0')
DURATION_MIN=$(echo "scale=1; $DURATION_MS / 1000 / 60" | bc)
LANG=$(cat "${OUTPUT_DIR}/result.json" | jq -r '.data.result.additions.lid_lang // "unknown"')
cat <<EOF
## 识别统计
- **音频时长**: ${DURATION_MIN} 分钟
- **识别语种**: ${LANG}
- **总字数**: ${TEXT_LEN} 字符
## 文本预览(前 500 字)
\`\`\`
$(head -c 500 "${OUTPUT_DIR}/transcript.txt")
\`\`\`
EOF
fi
cat <<EOF
## 结果文件位置
\`${OUTPUT_DIR}/\`
- \`result.json\` - 完整 API 响应
- \`transcript.txt\` - 完整识别文本
EOF
if [ -f "${OUTPUT_DIR}/utterances.csv" ]; then
cat <<EOF
- \`utterances.csv\` - 分句说话人信息(CSV格式)
- \`utterances.json\` - 分句原始数据
EOF
fi
cat <<'EOF'
---
本方式的计费均为预估计费,与实际费用有差距,实际费用以运行后火山产生的账单为准。计费说明请参考 [Volcengine LAS 定价](https://www.volcengine.com/docs/6492/1544808)。
EOF
#!/bin/bash
# ==============================================================================
# 后台轮询脚本 - 动态间隔
# Usage: scripts/poll_background.sh <task_id> [output_dir]
# ==============================================================================
TASK_ID="$1"
OUTPUT_DIR="${2:-output/${TASK_ID}}"
if [ -z "$TASK_ID" ]; then
echo "❌ 错误: 请提供 task_id"
exit 1
fi
# 加载环境
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
if [ -f "${PROJECT_ROOT}/.env" ]; then
source "${PROJECT_ROOT}/.env"
export LAS_API_KEY LAS_REGION
fi
# 激活虚拟环境
if [ -d "${PROJECT_ROOT}/.las_venv" ]; then
source "${PROJECT_ROOT}/.las_venv/bin/activate"
fi
OPERATOR_ID="las_video_resize"
mkdir -p "${OUTPUT_DIR}"
echo "$(date): Starting background polling for task ${TASK_ID}" >> "${OUTPUT_DIR}/poll.log"
# 轮询计数,用于动态调整间隔
ATTEMPT=0
# Poll until terminal state
while true; do
((ATTEMPT++))
# 动态调整轮询间隔:
# - 前 5 次: 60秒
# - 5-10 次: 120秒
# - 10次之后: 300秒(长视频理解时间更长)
if [ $ATTEMPT -le 5 ]; then
SLEEP=60
elif [ $ATTEMPT -le 10 ]; then
SLEEP=120
else
SLEEP=300
fi
# Save full response first, then extract status
FULL_OUTPUT=$(lasutil poll "${OPERATOR_ID}" "${TASK_ID}")
echo "$FULL_OUTPUT" > "${OUTPUT_DIR}/last_poll.json"
# Extract status
STATUS=$(echo "$FULL_OUTPUT" | python3 -c "
import json
import sys
try:
data = json.load(sys.stdin)
print(data['metadata']['task_status'])
except Exception as e:
print('ERROR')
")
echo "$(date): Attempt $ATTEMPT, status = ${STATUS}, next poll in ${SLEEP}s" >> "${OUTPUT_DIR}/poll.log"
if [ "$STATUS" = "COMPLETED" ] || [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "TIMEOUT" ] || [ "$STATUS" = "CANCELED" ]; then
# Save final result
echo "$FULL_OUTPUT" > "${OUTPUT_DIR}/result.json"
# Create completion flag
echo "$STATUS" > "${OUTPUT_DIR}/COMPLETED"
echo "$(date): Poll completed, final status = ${STATUS}" >> "${OUTPUT_DIR}/poll.log"
exit 0
fi
sleep "$SLEEP"
done
Related skills
FAQ
How do I force an exact output size?
Set min_width equal to max_width, min_height equal to max_height, and force_original_aspect_ratio_type to disable.
What credentials are needed?
It requires the LAS_API_KEY environment variable and a writable TOS output directory.