mcpField
M
manim-explainer-animation

manim-explainer-animation

github.com/calesthio创意与媒体219119 次安装15 周前更新
代码仓库

关于 manim-explainer-animation

Manim Explainer Animation 是一项用代码制作解释动画的技能,适用于需要精确数学、图形或图示运动来支撑讲解的场景。它指导技术与教育视频的策划、场景构建、节奏安排和审核。

主要功能

  1. 01将讲解规划为视觉节拍
  2. 02用 Manim 代码构建场景
  3. 03保持符号与布局一致
  4. 04让动画与旁白对齐
  5. 05检查无障碍要求与画面

适用场景

  1. 01为数学推导制作动画
  2. 02逐步讲解算法
  3. 03可视化数据或技术图示
  4. 04制作教育讲解视频

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/calesthio/generative-media-skills --skill manim-explainer-animation

安装后在 Claude Code 中输入/manim-explainer-animation确认已加载。

附带文件EVAL.md

详细介绍

Manim 讲解动画

使用此技能制作讲解动画,适用于解释内容依赖精确的符号、几何、图形、算法或图示运动的场景。应将 Manim 视为可编程的讲解工具,而不是通用视频渲染器。

证据标签

  • 有文档依据的事实是指有 Sources 中列出的官方文档或标准作为依据的行为或要求。
  • 制作经验法则是指有助于可靠制作讲解动画的实用规则;请根据需求调整。
  • 升级触发条件是指应暂停并在继续前咨询用户、主题专家、法律顾问或平台负责人。
  • 易变事实包括软件包版本、CLI 标志、平台交付规则、API 行为、定价,以及模型或提供商的可用性。请在制作时重新核实。

审慎选择 Manim

当以下任一项是交付内容的核心时,选择 Manim:

  • 公式、变换、证明、几何、向量场、图表、数轴、坐标系、算法、状态机、数据图形或技术图示需要精确定位和可重复的运动。
  • 视觉论证应能通过代码复现,并便于根据专家反馈修改。
  • 动画需要保持符号连贯性:同一个变量、颜色、坐标轴、对象或状态在整个过程中必须含义一致。
  • 项目受益于渲染闭环迭代:编写代码、渲染、检查、修补,再次渲染。

以下情况优先考虑其他合成软件或视频工具:

  • 作品主要涉及实景拍摄、电影化摄影语言、带纹理的品牌动效、角色表演、UI 录屏,或面向社交媒体的动态排版。
  • 用户想要写实或设计感很强的动态图形效果,而使用 After Effects、Remotion、HyperFrames/GSAP、Blender 或视频模型制作会更快。
  • 通过静态图示加旁白即可讲清内容,无需精确构建时间序列。

可根据需要采用混合方案:将 Manim 场景渲染为透明片段或全画幅片段,再用合成软件添加音乐、字幕、品牌下三分之一、实景素材或适配特定平台的包装。

从讲解内容入手,而非从代码入手

编写 Manim 代码前,先撰写简短的制作简报:

  1. 受众及其必备知识。
  2. 一句话学习目标。
  3. 核心误区或矛盾点。
  4. 需要 SME 或来源审核的确切事实、公式、数据集或领域主张。
  5. 时长、画面比例、预期旁白风格及交付平台。
  6. 限制条件:品牌配色、字体、字幕、本地化、无障碍、来源标注或无音频观看。

然后制定概念拆解:

  • **对象:**每个有意义的视觉对象及其代表内容。
  • **符号:**变量、颜色、标签、单位、坐标系及其含义。
  • **动作:**随时间发生的变化,以及每项变化的教学作用。
  • **认知负荷:**每个节拍中可见、突出、隐藏或淡化的内容。
  • **验证:**审核人员可以从视觉和数学角度检查的内容。

如果脚本包含医疗、法律、金融、安全、工程、科学或教育方面的主张,且其正确性比风格更重要,请在开始制作前升级处理。

将分镜拆解为易于讲解的节拍

将分镜写成表格或结构化列表,并包含以下字段:

  • time:计划的起始和结束秒数。
  • narration:确切或接近最终稿的台词。
  • visual_state:该节拍开始时屏幕上的内容。
  • animation:具体的 Manim 动作、变换、镜头移动、图像显现或示意图更新。
  • learning_purpose:此视觉动作的作用。
  • assets_or_data:公式、数据文件、SVG、图像、字体或引用来源。
  • qa_checks:渲染、数学、对比度、布局、字幕和闪烁检查。

制作经验:

  • 每个节拍只呈现一个概念变化。如果台词包含两件事,要么拆分节拍,要么使用清晰的视觉层级。
  • 优先使用变换,而不是替换。观众会在 a 变成 a^2、点沿曲线移动,或节点改变状态而非消失时理解连续性。
  • 将呈现顺序作为教学手段:先展示问题,再展示对象,然后是规则,最后是结果。
  • 保留一个持续的视觉锚点:在细节变化时保持稳定的公式、坐标轴、示意图骨架或图例。
  • 有意识地安排停顿。完成困难的变换后短暂调用 wait(),通常比再加一个动画更有助于学习。

场景架构

已记录的事实:Manim 脚本通常定义继承自 Scene 的类,将动画代码放在 construct() 中,将视觉对象作为 mobject 管理,并通过 Scene.play() 播放动画。

将场景编写为制作代码:

  • 每个逻辑章节或渲染片段使用一个类;除非视频非常短,否则不要用一个庞大的场景类承载整部视频。
  • 将调色板、字体、尺寸、时长和符号颜色设为带名称的常量。
  • 为重复使用的结构编写辅助函数,例如坐标轴、公式行、标注框、图表标签和算法节点。
  • 在文件靠近顶部的位置维护符号清单:x = yellow、rate = blue、area = green 等。
  • 当坐标表示概念位置而非屏幕位置时,在代码注释中明确单位。
  • 避免使用魔法坐标。适当使用带名称的锚点、next_to、align_to、to_edge、arrange、VGroup 和坐标轴转换方法,例如 c2p()/coords_to_point()。
  • 尽量使用简短的场景方法:introduce_problem()、build_axes()、show_invariant()、compare_cases()、conclude()。
  • 使用确定性输入。固定 Python 软件包集合,记录 Manim 版本,将源数据保存在本地,并在使用随机性时设置明确的随机种子。

项目骨架示例:

project/
  pyproject.toml or requirements.txt
  scenes/
    main.py
    theme.py
    data/
      measurements.csv
    assets/
      logo.svg
  renders/
  captions/
  README-production-notes.md  # outside this skill; for the user's project handoff

theme.py 模式示例:

from manim import *

BG = "#0B1020"
FG = "#F6F7FB"
MUTED = "#8A93A6"
ACCENT = "#FFD166"
BLUE = "#4CC9F0"
GREEN = "#80ED99"
RED = "#FF5C8A"

TITLE_SIZE = 46
BODY_SIZE = 30
FORMULA_SIZE = 42

def title(text: str) -> Text:
    return Text(text, font="Inter", color=FG, font_size=TITLE_SIZE)

def caption(text: str) -> Text:
    return Text(text, font="Inter", color=MUTED, font_size=24)

坐标系和布局

已记录的事实:Manim 为 Axes 和 NumberPlane 等坐标系提供 mobject;Axes 提供坐标到点的转换、图表标签和绘制线图等方法。

制作规则:

  • 区分场景坐标和数学坐标。场景中的点 (2, 2, 0) 不一定是概念坐标轴上的点 (2, 2),除非平面使用默认坐标框架,或通过坐标轴对象进行转换。
  • 通过绘图对象创建图表上的所有点:axes.c2p(x, y)、axes.plot(...)、axes.get_lines_to_point(...)。
  • 为字幕、平台 UI 和移动端裁切留出安全边距。
  • 预留稳定区域:公式放在顶部或左侧,可视化放在中央,说明标签放在对象附近;除非需要烧录字幕而采用其他布局,否则将字幕放在下方三分之一处。
  • 使用 3D 时,先确认是否确有必要。3D 可以澄清曲面和向量几何,但也可能掩盖关系。提供方向提示、坐标轴标签,并确保镜头移动足够缓慢,便于观众跟上。
  • 制作竖屏视频时,减少同时出现的对象,并使用堆叠式变换;不要只是裁切 16:9 的坐标平面。

排版、公式和符号一致性

有据可查:Manim 支持普通文本 mobject 和基于 LaTeX 的 Tex/MathTex;可以通过 TexTemplate 添加额外的 LaTeX 宏包;MathTex 可以隔离子字符串,以便可靠地为部分内容着色或应用变换。

制作规则:

  • 普通语言标签使用 Text,数学符号使用 MathTex/Tex。
  • 公式要足够大。如果一个公式有多行,应将其制作成推导动画,而不是密集的段落。
  • 对需要突出显示或变换的符号,使用 substrings_to_isolate、双花括号拆分或单独的字符串参数。
  • 不要在没有说明变化原因的情况下对同一符号使用不一致的颜色。
  • 使用公式记录表:符号、含义、颜色、首次出现位置以及单位(如有)。
  • 为了便于访问,应在旁白中说明公式的含义;不要只依赖观众阅读视觉公式。
  • 在承诺交付前,先在本地测试 LaTeX。缺失的 TeX 宏包、字体和操作系统差异都是常见的制作阻碍。

公式变换模式:

start = MathTex(r"A", r"=", r"\pi", r"r^2", font_size=56)
expanded = MathTex(r"A", r"=", r"\pi", r"\cdot", r"3^2", font_size=56)
for mob in (start, expanded):
    mob.set_color_by_tex("A", YELLOW)
    mob.set_color_by_tex("r", BLUE)
self.play(Write(start))
self.play(TransformMatchingTex(start, expanded))

图表、数据、示意图和算法动画

图表:

  • 绘图前先定义坐标轴范围和单位。
  • 即使是风格化的解说视频,也要标注坐标轴和单位。
  • 先为定义域制作动画,再为函数或数据制作动画,最后添加注释。
  • 优先使用移动的点、切线、填充面积或阈值线来表达随时间的变化。
  • 对数据集,记录数据来源、时间戳、转换操作和任何平滑处理。如果数据支持影响重大的主张,应升级处理。

示意图:

  • 将逻辑模型与视觉风格分开。先定义节点、边、状态和转换,再决定颜色和动态效果。
  • 保持空间隐喻稳定:从左到右表示时间,从上到下表示层级,同心结构表示包含关系,网络表示关系。
  • 使用边的动画展示因果关系;使用颜色或状态变化展示状态。
  • 如果示意图看起来像官方架构、系统或协议,请向来源或 SME 确认。

算法:

  • 展示输入、不变量、状态、操作和输出。
  • 展示一个小型演算示例,而不是完整规模的问题。
  • 使用指针/光标 mobject 表示当前索引/状态。
  • 如果算法依赖存储的值,使用表格或 VGroup 表示内存/状态。
  • 讲解操作为何有效,而不只是说明正在运行哪一行伪代码。

旁白与时间对齐

有据可查:Manim Voiceover 是 Manim Community 的官方插件方案,可将旁白文本关联到场景代码,并提供时长跟踪功能以便对齐动画。

使用以下三种时间模式之一:

  1. **静音/视觉优先:**不添加旁白;所有含义都必须能从视觉内容、标题、标签和字幕中读懂。
  2. **旁白主导:**先录制或合成语音,再根据音频为动画计时。
  3. **代码主导并使用旁白插件:**使用 Manim Voiceover 或类似工作流,将旁白文本绑定到场景代码块,并使用跟踪器时长。

制作经验法则:

  • 对技术内容,旁白语速保持在每分钟约 120-160 个口语单词,除非用户要求采用其他风格。
  • 让难懂的视觉内容有充分的呈现时间:公式仍在变换时,避免同时讲解新概念。
  • 让视觉重点与口头强调保持一致。如果旁白说“斜率”,就在那一刻突出显示斜率。
  • 根据最终定时脚本导出或制作字幕,而不是使用早期草稿。
  • 如果使用 TTS,记录提供商、模型/语音、参数、许可限制和生成文件路径。制作时重新核查提供商条款和服务可用性。

旁白时间模式:

from manim import *
from manim_voiceover import VoiceoverScene
from manim_voiceover.services.recorder import RecorderService

class SlopeIntro(VoiceoverScene):
    def construct(self):
        self.set_speech_service(RecorderService())
        axes = Axes(x_range=[0, 4], y_range=[0, 4]).add_coordinates()
        line = axes.plot(lambda x: x, x_range=[0, 3], color=YELLOW)

        with self.voiceover(text="A line's slope tells us how fast y rises as x moves right.") as tracker:
            self.play(Create(axes), run_time=tracker.duration * 0.35)
            self.play(Create(line), run_time=tracker.duration * 0.65)

无障碍与安全

已记录的事实:WCAG 2.2 要求同步媒体中的预录音频提供字幕,符合 A 级要求;除非该媒体明确标注为文本的媒体替代内容。WCAG 2.2 还包含一项 A 级闪烁标准:除非低于规定阈值,否则内容在任意 1 秒内闪烁次数不应超过 3 次。

制作要求:

  • 除非用户明确说明视频是已标注的文本媒体替代内容,否则应为带旁白的导出视频提供字幕。
  • 当非语音音频会影响理解时,应在字幕中包含有意义的非语音音频信息。
  • 对于教育、合规或无音频场景,应提供文字稿;如果画面包含未通过语音表达的关键信息,还应加入视觉描述。
  • 避免快速全屏闪烁、高对比度闪烁和反复的红色闪烁。如果需要视觉提醒,请改用缓慢脉冲、轮廓、箭头或标签。
  • 检查文本和重要标签的颜色对比度。不要仅靠颜色传达含义;应搭配标签、形状、位置或图案。
  • 避免在移动设备上显示过小的公式。请渲染竖屏预览,或按预期设备尺寸检查。
  • 对于对运动敏感的用户,避免不必要的镜头旋转、快速缩放和抖动。对于密集的技术内容,请使用直接切换或缓慢转场。

如果客户端要求正式的无障碍合规认证、受监管的教育合规、医疗/安全指导或公共部门交付,请升级处理。提供制作证据,但不要提供法律建议。

资产保管与来源信息

为每项外部输入维护资产台账,记录:

  • 来源 URL 或本地路径;
  • 已知的创作者/所有者;
  • 许可或授权状态;
  • 访问日期;
  • 所做的转换;
  • 该资产是否出现在最终渲染结果中;
  • 是否存在隐私、同意、品牌或数据使用方面的顾虑。

已记录的事实:C2PA Content Credentials 会在 C2PA 清单中存储来源信息;该规范明确警告,不应将来源信息视为对内容好坏的价值判断。

制作规则:

  • 在项目交付包中,将源代码、数据集、渲染帧/视频、音频、字幕和来源信息记录放在一起。
  • 如果平台或客户端要求 Content Credentials/C2PA,请使用兼容的签名工作流,并在任何后期处理之后验证最终导出文件。交付时重新检查目标格式的支持情况。
  • 不要声称 C2PA 可以证明真实性。如果正确实施,它可以传达来源、编辑记录和防篡改元数据。
  • 对于 AI 生成的旁白、音乐、图像或代码辅助,请记录工具、模型名称、适用情况下的提示词、日期以及权利/条款说明。

对于受版权保护的教科书插图、专有数据集、未经授权的品牌资产、学生/医疗/个人数据,或任何要求来源元数据具有法律约束力的情况,请升级处理。

渲染设置与交付

已记录的事实:Manim 会从文件中渲染场景类,并默认将输出写入 media 目录,且会根据质量设置使用不同的输出文件夹。Manim v0.19.0 文档指出,Manim 核心安装已用 PyAV 替代外部 FFmpeg,但 FFmpeg 仍适用于后期处理和交付转码。

开发工作流:

  • 先渲染快速预览:使用低质量设置,并且只渲染一个场景。
  • 调试布局或时间安排时,渲染指定片段。
  • 按目标宽高比、帧率和分辨率渲染最终版本。
  • 后期处理后检查最终视频,而不只是检查 Manim 的输出。

检查当前文档后可调整使用的常见 Manim 命令:

manim -pql scenes/main.py SceneName      # quick local preview
manim -pqm scenes/main.py SceneName      # medium review
manim -pqh scenes/main.py SceneName      # high-quality review
manim -p --format=png scenes/main.py SceneName  # spot-check stills if supported in current version

常见的 FFmpeg 收尾任务:

  • 合并分别渲染的场景文件;
  • 添加或混流音频;
  • 转码为兼容性广泛的 H.264/AAC MP4;
  • 生成缩略图或审阅用静帧;
  • 按需进行响度标准化;
  • 仅在平台/客户端要求开放字幕时烧录字幕。

在制作时重新核实平台交付规格。社交、LMS、广播、会议和广告平台接受的编解码器、宽高比、字幕格式、文件大小限制和安全区域叠层都会变化。

可复现性资料包

每个正式的 Manim 解说项目都应交付:

  • 源代码和精确的渲染命令;
  • 依赖文件(requirements.txt、pyproject.toml、锁文件或环境导出文件);
  • Manim 版本和渲染器说明;
  • 相关的操作系统或容器详情;
  • 源素材和数据;
  • 最终脚本和字幕文件;
  • 渲染输出和缩略图;
  • 素材/来源记录;
  • 已知限制和审阅备注;
  • 重新渲染单个场景和最终合成视频的说明。

如果项目使用生成语音、生成音乐或外部 API,请提供足够的元数据,以便复现或替换素材。除非服务提供商保证 API 输出完全可复现,且已记录种子和设置,否则不要假设 API 输出能够精确复现。

QA 工作流

分层执行 QA:

  1. 代码 QA: 可正常导入,场景类名称正确,没有缺失文件,除非有意使用,否则不包含硬编码绝对路径,依赖项已记录。
  2. 渲染 QA: 预览渲染和最终渲染均成功完成;没有标签被裁切、字幕重叠、文字不可见、字形缺失、SVG 损坏或播放卡顿。
  3. 教学 QA: 每个节拍都能回答“现在应让观众学到什么?”;没有未解释的符号;画面与旁白没有矛盾。
  4. 技术正确性 QA: 按需由资料来源/主题专家审查公式、单位、图表刻度、算法和数据转换。
  5. 无障碍 QA: 字幕/文字稿、对比度、颜色独立性、移动设备可读性、闪烁风险、动作舒适度。
  6. 交付 QA: 最终文件可以打开,音画同步正确,时长/宽高比/编解码器符合目标规格,字幕格式符合要求。
  7. 来源 QA: 已记录来源和生成素材;已处理或上报所需的许可和 Content Credentials 工作流。

采用渲染后再修复的方式。渲染失败时,先检查第一条回溯信息,隔离最小场景,修复原因,并在尝试渲染完整视频前重新渲染该场景。

常见故障及修复方法:

  • 公式无法编译: 简化 LaTeX,向 TexTemplate 添加所需宏包,检查转义,并渲染一个最小测试场景。
  • 无法高亮符号: 隔离子字符串,或将公式拆分为多个参数。
  • 对象偏移或重叠: 使用布局容器和锚点,而不是固定坐标。
  • 图表点位置错误: 使用 axes.c2p() 转换,而不是场景坐标。
  • 旁白节奏太快: 拆分节拍、添加停顿,或移除同时发生的动作。
  • 最终输出与预览不一致: 检查渲染质量、帧率、宽高比、字体可用性和后期处理命令。

示例:微积分微讲解

示例意图:制作一段 45 秒的旁白动画,向高中生讲解“导数是瞬时变化率”。

分镜摘录:

时间旁白画面动画QA
0-5s“平均速度等于路程除以时间。”曲线上的两个点在两点之间绘制割线标签清晰可读
5-15s“缩短时间间隔。”同一条曲线和割线将第二个点移向第一个点点沿曲线移动;坐标轴匹配正确
15-28s“割线变成切线。”点处的切线将割线变形为切线公式与画面一致
28-40s“这个极限斜率就是导数。”f'(x) 公式先突出显示 \Delta x \to 0,再突出显示 f'(x)公式颜色记录表
40-45s回顾曲线、切线、简洁字幕淡出非必要标签字幕安全区域

Manim 场景示例:

from manim import *

class DerivativeAsLimit(Scene):
    def construct(self):
        self.camera.background_color = "#0B1020"
        axes = Axes(
            x_range=[0, 4, 1],
            y_range=[0, 5, 1],
            x_length=7,
            y_length=4.5,
            axis_config={"color": "#8A93A6", "include_numbers": True},
        ).to_edge(DOWN)
        labels = axes.get_axis_labels(MathTex("t"), MathTex("s(t)"))

        curve = axes.plot(lambda x: 0.45 * (x - 1) ** 2 + 1, x_range=[0.2, 3.8], color="#4CC9F0")

        x0 = 1.35
        dx_tracker = ValueTracker(1.8)

        p0 = always_redraw(lambda: Dot(axes.c2p(x0, 0.45 * (x0 - 1) ** 2 + 1), color="#FFD166"))
        p1 = always_redraw(lambda: Dot(
            axes.c2p(x0 + dx_tracker.get_value(), 0.45 * (x0 + dx_tracker.get_value() - 1) ** 2 + 1),
            color="#80ED99",
        ))

        secant = always_redraw(lambda: Line(
            p0.get_center(),
            p1.get_center(),
            color="#FFD166",
        ).set_stroke(width=5))

        formula = MathTex(
            r"\text{slope}", r"=", r"\frac{\Delta s}{\Delta t}",
            font_size=48,
        ).to_edge(UP)
        formula.set_color_by_tex(r"\Delta", "#FFD166")

        limit_formula = MathTex(
            r"f'(t)", r"=", r"\lim_{\Delta t \to 0}", r"\frac{\Delta s}{\Delta t}",
            font_size=48,
        ).to_edge(UP)
        limit_formula.set_color_by_tex(r"\Delta", "#FFD166")
        limit_formula.set_color_by_tex(r"f'", "#80ED99")

        self.play(Create(axes), Write(labels))
        self.play(Create(curve))
        self.play(FadeIn(p0), FadeIn(p1), Create(secant), Write(formula))
        self.wait(0.5)
        self.play(dx_tracker.animate.set_value(0.18), run_time=4, rate_func=smooth)
        self.play(TransformMatchingTex(formula, limit_formula))
        self.play(Circumscribe(limit_formula[0], color="#80ED99"))
        self.wait(1)

这种结构有效的原因:

  • 两个点和割线通过 axes.c2p() 关联到同一组坐标轴。
  • 时间间隔缩小的过程通过动作直观呈现,而不只是口头描述。
  • 观众看到几何极限后,公式才发生变换。
  • 颜色含义保持稳定:黄色表示有限变化,绿色表示导数结果。

可能的修订:

  • 使用 Manim Voiceover 添加旁白时间安排。
  • 添加下三分之一字幕区域和文字稿。
  • 如果观众需要具体背景,则添加一个以实际速度为例的第二个场景。

示例:算法讲解

示例意图:制作一段 60 秒动画,向初学者讲解二分查找。

制作计划:

  • 用一排已排序的方框表示数组。
  • 使用三个持续显示的指针:low、mid、high。
  • 将已排除的部分变灰;不要立即移除。
  • 展示不变量:“如果目标存在,它仍在当前范围内。”
  • 使用一个目标值,演示三轮迭代。

示例视觉状态结构:

values = [2, 5, 8, 12, 16, 23, 38]
boxes = VGroup(*[
    VGroup(Square(side_length=0.7), Text(str(v), font_size=24)).arrange(ORIGIN)
    for v in values
]).arrange(RIGHT, buff=0.12)

low_arrow = Arrow(DOWN, UP, color=BLUE).scale(0.45)
mid_arrow = Arrow(DOWN, UP, color=YELLOW).scale(0.45)
high_arrow = Arrow(DOWN, UP, color=GREEN).scale(0.45)

QA 检查:

  • 这一排内容始终有序且清晰易读。
  • 指针标签不会相互重叠。
  • 旁白解释为何可以安全地忽略被排除的部分。
  • 明确展示最终找到/未找到的状态。

示例:数据讲解

示例意图:通过一个小型数据集制作动画,展示移动平均如何平滑噪声。

制作计划:

  • 先显示原始数据点。
  • 为坐标轴标注单位和数据来源。
  • 动画展示一个窗口括号沿 x 轴移动。
  • 窗口演示规则后,再绘制移动平均线。
  • 保留说明:“平滑处理能揭示趋势,但会掩盖短期波动。”

QA 检查:

  • 记录数据来源和转换过程。
  • 说明平滑方法和窗口大小。
  • 除非脚本明确说明且方法能够支持,否则动画不得暗示预测。
  • 对图表中的任何现实世界主张进行来源审核。

来源和核验日期

来源访问日期:2026 年 7 月 11 日:

需要在生产时重新核验的易变信息:

  • 当前 Manim Community 版本、CLI 标志、渲染器行为和插件兼容性。
  • 操作系统或容器所需的当前 LaTeX/Pango/字体安装要求。
  • Manim Voiceover 支持的服务和 API 行为。
  • FFmpeg 构建功能和编解码器可用性,尤其是对 libx264/AAC 的支持。
  • 平台交付规则,包括宽高比、编解码器、字幕、时长、比特率、文件大小、缩略图和来源元数据。
  • 客户、司法管辖区、机构或分发平台特有的无障碍或法律要求。

评论

支持 Markdown