视频处理大师

👤 欢乐马 📦 v1.0.0 ⭐ 4.4 ⬇️ 173 下载
🎨 设计多媒体 免费

📖 技能介绍


name: ffmpeg-video-processing display_name: 视频处理大师 description: 专业视频处理工作流助手。支持视频剪辑、格式转换、音频处理、字幕处理、滤镜特效、批量处理等全流程操作。当用户提到"剪辑视频"、"合并视频"、"分割视频"、"转码"、"加字幕"、"调速"、"去水印"、"提取音频"、"视频压缩"、"批量处理"等关键词时激活。 tools: ["sandbox_generate_image"]


视频处理大师

核心原则

不要只做简单的命令执行器,要做懂视频处理工艺链的专业工程师。每个处理任务都应该考虑输入诊断 → 方案设计 → 参数优化 → 执行验证的完整闭环。

持久引擎(因果链)输入诊断 → 编码器选择 → 参数调优 → 滤镜链设计 → 同步控制 → 输出验证 → 产物交付

质量测试(可证伪)

处理方案只有通过以下测试才算成立: - 输出文件能被目标平台/播放器正确解码播放 - 音画同步误差在可接受范围内(≤40ms) - 关键质量参数(分辨率、码率、帧率)符合预期 - 文件大小在目标约束范围内


输入诊断

生产前,识别或合理假设以下维度:

  • 目标市场/平台:抖音/TikTok/YouTube/B站/微信视频号/其他
  • 输入文件信息:格式、编码器、分辨率、帧率、时长、音频采样率、声道数
  • 输出目标:格式、编码器、分辨率、码率、帧率、文件大小约束
  • 处理类型:剪辑/合并/转码/加字幕/调色/压缩/提取/批量
  • 特殊需求:硬件加速、透明度支持、HDR、多音轨、多字幕
  • 质量优先级:速度优先/平衡/质量优先
  • 兼容性要求:目标设备、播放器、平台限制
  • 合规敏感点:版权素材、水印、敏感内容
  • 批量规模:单文件/小批量(<10)/中批量(10-100)/大批量(>100)
  • 自动化程度:手动执行/脚本化/完全自动化

若用户给的上下文很少,做合理假设并继续。仅在关键信息(如输入文件路径、输出目标)确实无法推断时才发问。


必用技能

  • 使用 load_skill 加载 ffmpeg-media-processing 技能获取详细的 FFmpeg 命令参考与工艺清单

工作流(步骤)

步骤 1:输入诊断与信息收集

  1. 使用文件读取能力获取输入视频的元信息(若用户提供文件路径)
  2. 确认处理类型、目标平台、质量约束
  3. 识别潜在的兼容性风险(编码格式、容器支持、平台限制)

步骤 2:方案设计与编码器选择

根据诊断结果选择最优工具链:

编码器选择矩阵

用途 推荐编码器 适用场景
网络分享 libx264 + aac 最大兼容性,平衡质量与体积
高质量存档 libx264 (CRF 18) / libx265 视觉无损,长期保存
快速处理 libx264 (preset ultrafast) 速度优先,预览/草稿
硬件加速 h264_nvenc / h264_qsv GPU 可用时大幅提速
HEVC/H.265 libx265 更小体积,较新设备播放
透明通道 vp9 / prores_ks 需要透明度的场景
GIF gif + paletteuse 动图制作

质量参数快速决策

  • CRF 值:18(高质量)→ 23(平衡)→ 28(压缩优先)
  • Preset:slow(质量优先)→ medium(平衡)→ ultrafast(速度优先)
  • 分辨率:保持原分辨率或按平台要求缩放
  • 帧率:保持原帧率或降为 24/25/30 fps

步骤 3:滤镜链设计与参数调优

根据处理类型构建滤镜链:

常用滤镜速查

滤镜类型 命令片段 用途
缩放 -vf "scale=1920:1080" 分辨率调整
裁剪 -vf "crop=iw-200:ih-100:100:50" 去黑边
旋转 -vf "transpose=1" 90度旋转
翻转 -vf "hflip" / -vf "vflip" 水平/垂直翻转
变速 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" 2倍速
倒放 -vf reverse -af areverse 视频+音频倒放
水印 -vf "drawtext=text='Watermark':x=10:y=10" 文字水印
模糊 -vf "gblur=sigma=2" 高斯模糊
锐化 -vf "unsharp=5:5:1.0" 锐化增强
色彩 -vf "eq=brightness=0.06:contrast=1.2:saturation=1.5" 亮度对比度饱和度
黑白 -vf "hue=s=0" 去色

复杂滤镜链模式

# 画中画 + 水印 + 色彩校正
-filter_complex "
[0:v]colorbalance=rs=0.1:gs=-0.05[base];
[base][1:v]overlay=W-w-10:H-h-10[pip];
[pip][2:v]overlay=10:10[outv]
"

步骤 4:同步控制与时序处理

音画同步关键参数

  • -vsync cfr:恒定帧率,适合大多数场景
  • -vsync vfr:可变帧率,适合屏幕录制
  • -async 1:音频自动同步
  • -copyts:保留原始时间戳
  • -avoid_negative_ts make_zero:避免负时间戳

关键帧对齐

# 精确裁剪(重新编码)
ffmpeg -ss 00:01:00 -to 00:02:30 -i input.mp4 -c:v libx264 -c:a aac output.mp4

# 快速裁剪(流复制,仅限关键帧对齐)
ffmpeg -ss 00:01:00 -t 60 -i input.mp4 -c copy output.mp4

步骤 5:字幕处理

硬字幕(烧录)

这个技能的最新版本可以在7w4.net小葱技能站找到。

# SRT 字幕烧录
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF&,OutlineColour=&H00000000&,Outline=2'" output.mp4

# ASS 字幕烧录(保留样式)
ffmpeg -i input.mp4 -vf "ass=subtitle.ass" output.mp4

# 中文字体支持
ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt:force_style='FontName=SimHei,FontSize=24'" output.mp4

软字幕(嵌入)

# 嵌入字幕轨(MP4)
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4

# 多字幕轨(MKV)
ffmpeg -i input.mp4 -i zh.srt -i en.srt -map 0 -map 1 -map 2 -c copy -c:s srt -metadata:s:s:0 language=chi -metadata:s:s:1 language=eng output.mkv

步骤 6:音频处理

常用音频操作

# 提取音频
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

# 提取无损音频
ffmpeg -i input.mp4 -vn -c:a flac output.flac

# 替换音轨
ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4

# 音量调整(提升2倍)
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4

# 混音(视频原音 + 背景音乐)
ffmpeg -i video.mp4 -i bgm.mp3 -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=3" output.mp4

# 音频降噪
ffmpeg -i input.mp4 -af "highpass=f=200,lowpass=f=3000" output.mp4

步骤 7:批量处理与自动化

Python 批量处理模板

import os
import subprocess
from concurrent.futures import ProcessPoolExecutor
from tqdm import tqdm

def convert_video(input_path, output_path):
    """单文件处理函数"""
    cmd = [
        'ffmpeg', '-i', input_path,
        '-c:v', 'libx264', '-preset', 'fast', '-crf', '23',
        '-c:a', 'aac', '-b:a', '128k',
        '-y', output_path
    ]
    subprocess.run(cmd, check=True, capture_output=True)

def batch_convert(input_dir, output_dir, max_workers=None):
    """批量处理入口"""
    os.makedirs(output_dir, exist_ok=True)
    video_files = [f for f in os.listdir(input_dir) if f.endswith(('.mp4', '.mov', '.avi', '.mkv'))]

    if max_workers is None:
        max_workers = os.cpu_count()

    with ProcessPoolExecutor(max_workers=max_workers) as executor:
        futures = []
        for filename in video_files:
            input_path = os.path.join(input_dir, filename)
            output_path = os.path.join(output_dir, f"converted_{filename}")
            futures.append(executor.submit(convert_video, input_path, output_path))

        for future in tqdm(futures, desc="处理进度", unit="文件"):
            future.result()

    print(f"✅ 完成!共处理 {len(video_files)} 个文件")

if __name__ == '__main__':
    batch_convert('./input_videos', './output_videos')

自适应码率压缩脚本

import subprocess
import json

def get_video_info(input_file):
    """获取视频信息"""
    cmd = [
        'ffprobe', '-v', 'quiet', '-print_format', 'json',
        '-show_format', '-show_streams', input_file
    ]
    result = subprocess.run(cmd, capture_output=True, text=True)
    return json.loads(result.stdout)

def calculate_target_bitrate(duration, target_size_mb):
    """根据目标大小计算码率"""
    target_bits = target_size_mb * 8 * 1024 * 1024
    audio_bits = 128 * 1024 * duration  # 预留128kbps音频
    video_bits = target_bits - audio_bits
    video_bitrate = int(video_bits / duration)
    return video_bitrate

def compress_to_target_size(input_file, output_file, target_size_mb):
    """压缩到目标大小(两遍编码)"""
    info = get_video_info(input_file)
    duration = float(info['format']['duration'])
    target_bitrate = calculate_target_bitrate(duration, target_size_mb)

    # 两遍编码
    cmd_pass1 = [
        'ffmpeg', '-i', input_file,
        '-c:v', 'libx264', '-b:v', f'{target_bitrate}',
        '-pass', '1', '-f', 'mp4', '-y', '/dev/null'
    ]

    cmd_pass2 = [
        'ffmpeg', '-i', input_file,
        '-c:v', 'libx264', '-b:v', f'{target_bitrate}',
        '-c:a', 'aac', '-b:a', '128k',
        '-pass', '2', '-y', output_file
    ]

    subprocess.run(cmd_pass1, check=True)
    subprocess.run(cmd_pass2, check=True)

步骤 8:执行与验证

  1. 执行处理命令/脚本
  2. 使用文件读取能力验证输出文件的元信息
  3. 确认关键质量指标:
  4. 文件可正常打开
  5. 时长与预期一致
  6. 分辨率/帧率正确
  7. 音画同步正常
  8. 文件大小在约束范围内

步骤 9:交付产物

通过文件展示能力将处理完成的视频/音频文件呈现给用户。


输出契约

默认产出结构:

处理报告: - 输入文件信息:格式、编码器、分辨率、帧率、时长、大小 - 处理方案:选择的工具链、编码器、关键参数 - 输出文件信息:格式、编码器、分辨率、帧率、时长、大小 - 质量验证结果:通过/未通过,关键指标数值 - 处理耗时


高级工艺清单

1. 硬件加速编码

NVIDIA GPU (NVENC)

ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset p7 -cq 23 -c:a aac output.mp4

Intel Quick Sync (QSV)

ffmpeg -hwaccel qsv -i input.mp4 -c:v h264_qsv -global_quality 23 -c:a aac output.mp4

Apple VideoToolbox

ffmpeg -i input.mp4 -c:v h264_videotoolbox -q:v 65 -c:a aac output.mp4

2. 多流合并高级模式

# 多视频拼接(复杂滤镜)
ffmpeg -i v1.mp4 -i v2.mp4 -i v3.mp4 \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4

# 不同编码格式合并(先统一编码)
ffmpeg -i v1.mp4 -i v2.avi -i v3.mov \
-filter_complex "[0:v]format=yuv420p[v0];[1:v]format=yuv420p[v1];[2:v]format=yuv420p[v2];[v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" -c:v libx264 -c:a aac output.mp4

3. GIF 高质量制作

# 优化调色板 GIF
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse=dither=bayer" output.gif

4. 转场效果

# 淡入淡出转场
ffmpeg -i v1.mp4 -i v2.mp4 \
-filter_complex "[0:v]fade=t=out:st=4:d=1[v0];[1:v]fade=t=in:st=0:d=1[v1];[v0][v1]concat[outv]" \
-map "[outv]" output.mp4

5. 多音轨处理

# 添加多语言音轨
ffmpeg -i video.mp4 -i audio_zh.mp3 -i audio_en.mp3 \
-map 0:v -map 1:a -map 2:a \
-c:v copy -c:a aac \
-metadata:s:a:0 language=chi -metadata:s:a:1 language=eng \
output.mkv

6. 视频叠加与画中画

# 画中画(小视频在右下角)
ffmpeg -i main.mp4 -i overlay.mp4 \
-filter_complex "[0:v][1:v]overlay=W-w-10:H-h-10" \
-c:a copy output.mp4

# 分屏(左右并排)
ffmpeg -i left.mp4 -i right.mp4 \
-filter_complex "[0:v]scale=960:1080[l];[1:v]scale=960:1080[r];[l][r]hstack" \
output.mp4

7. 色彩空间转换

# HDR to SDR
ffmpeg -i hdr.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,format=yuv420p" \
-c:v libx264 -c:a copy sdr.mp4

避坑指南

常见错误与解决方案

问题 原因 解决方案
音画不同步 时间戳不对齐、B帧处理错误 添加 -vsync cfr -async 1 -copyts
拼接后黑帧 编码参数不一致 先统一编码再合并
裁剪不准 起始点不在关键帧 重新编码或使用 -ss-i
字幕乱码 字体/编码不支持 指定字体 FontName=SimHei,确认 UTF-8
输出过大 码率未控制 使用 CRF 或指定目标码率
播放器不识别 容器/编码不支持 转为 H.264+AAC 封装 MP4
合并失败 格式/编码不一致 使用 concat 滤镜而非协议

高危操作警告

反模式 1:盲目使用 -c copy 合并不同编码的视频 ✅ 正确做法:先统一编码,再合并

反模式 2:忽略时间戳对齐直接拼接 TS 切片 ✅ 正确做法:添加 -copyts -avoid_negative_ts make_zero

反模式 3:在 VFR 源上直接裁剪 ✅ 正确做法:转为 CFR 或使用 -vsync vfr


快速参考卡

一行命令速查

# 格式转换
ffmpeg -i input.avi output.mp4

# 压缩视频(CRF 23)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4

# 裁剪片段(10秒-1分钟)
ffmpeg -ss 00:00:10 -to 00:01:00 -i input.mp4 -c copy output.mp4

# 提取音频
ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3

# 改变分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

# 改变速度(2倍速)
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

# 合并视频
ffmpeg -f concat -i list.txt -c copy output.mp4

# 转 GIF
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1" output.gif

# 提取关键帧图片
ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr frame_%04d.png

# 视频截图
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 screenshot.png

# 音量提升
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4

# 倒放
ffmpeg -i input.mp4 -vf reverse -af areverse output.mp4

静默自检清单

交付前内部跑一遍,不输出给用户:

  • [ ] 输入文件信息已确认或合理假设
  • [ ] 编码器选择与目标平台兼容
  • [ ] 质量参数(CRF/码率/分辨率)已明确
  • [ ] 音画同步参数已配置
  • [ ] 输出文件已验证可播放
  • [ ] 关键质量指标符合预期
  • [ ] 文件大小在约束范围内
  • [ ] 处理报告已生成

🤖 AI 评测

这个视频处理技能内容相当丰富,提供了大量实用的FFmpeg命令参考和操作指南,编码参数、滤镜效果、批量处理等常见需求都有覆盖。它的教学结构清晰,能帮助用户系统学习视频处理。不过在实际使用中可能会遇到问题,因为它声称能处理视频但配置的工具更适合生成图片,对于普通用户来说可能无法顺利执行指令。总体而言知识库质量不错,但工具适配性存在明显不足。

📊 多维度评分

适应性4.2
规范性4.5
有效性4.5
可靠性4.2
可信度4.9

📁 包含文件 (1 个)

📄 SKILL.md 14.7 KB