SceneFileWriter

限定名称: manim.scene.scene\_file\_writer.SceneFileWriter

class SceneFileWriter(renderer, scene_name, **kwargs)[来源]

基类: object

SceneFileWriter 是实际将播放的动画写入视频文件(使用 FFMPEG)的对象。这主要供 Manim 内部使用。您很少(如果有的话)需要使用此类的各种方法,除非您正在修改 Manim 的核心实现。

参数:
  • renderer (CairoRenderer | OpenGLRenderer)

  • scene_name (StrPath)

  • kwargs (Any)

sections

用于场景分段

类型:

包含 Section 的列表

sections_output_dir

各分段视频的存储位置

类型:

pathlib.Path

output_name

不带扩展名的电影名称,也是分段视频名称的基础

类型:

str

一些有用的属性包括
“write_to_movie” (bool=False)

是否将动画写入视频文件。

“movie_file_extension” (str=”.mp4”)

输出视频的文件类型扩展名。

“partial_movie_files”

所有部分电影文件的列表。

方法

add_audio_segment

此方法从 AudioSegment 类型对象和合适的参数添加一个音频片段。

add_partial_movie_file

根据哈希值,将新的部分电影文件路径添加到 scene.partial_movie_files 和当前分段。

add_sound

此方法从声音文件添加一个音频片段。

begin_animation

Manim 内部使用此方法将动画流式传输到 FFMPEG 以进行显示或写入文件。

clean_cache

将通过删除最旧的部分电影文件来清理缓存。

close_partial_movie_stream

关闭当前打开的视频容器。

combine_files

combine_to_movie

Manim 内部使用此方法将构成一个场景的单独部分电影文件组合成该场景的单个视频文件。

combine_to_section_videos

连接每个分段的部分电影文件。

create_audio_segment

创建一个空的、静音的音频片段。

encode_and_write_frame

仅供内部使用:获取给定帧(np.ndarray 格式)并将其写入流。

end_animation

Manim 内部使用此方法优雅地停止向 FFMPEG 流式传输。

finish

完成向 FFMPEG 缓冲区写入或将图像写入输出目录。将部分电影文件组合成完整场景。如果 save_last_frame 为 True,则将最后一帧保存到默认图像目录。

finish_last_section

如果当前分段为空,则删除。

flush_cache_directory

删除所有缓存的部分电影文件

get_resolution_directory

获取直接包含视频文件的分辨率目录的名称。

init_audio

准备写入器以向电影添加音频。

init_output_directories

初始化输出目录。

is_already_cached

将检查是否存在以 hash_invocation 命名的文件。

listen_and_write

仅供内部使用:阻塞直到队列中出现新帧。

next_section

在此处创建分段切点。

open_partial_movie_stream

打开一个包含视频流的容器。

output_image

print_file_ready_message

将“文件就绪”消息打印到标准输出。

save_final_image

此名称不准确。

write_frame

Manim 内部使用此方法将帧写入 FFMPEG 输入缓冲区。

write_subcaption_file

写入字幕文件。

属性

force_output_as_scene_name

add_audio_segment(new_segment, time=None, gain_to_background=None)[来源]

此方法从 AudioSegment 类型对象和合适的参数添加一个音频片段。

参数:
  • new_segment (AudioSegment) – 要添加的音频片段

  • time (float | None) – 应该添加声音的时间戳。

  • gain_to_background (float | None) – 片段相对于背景的增益。

add_partial_movie_file(hash_animation)[来源]

根据哈希值,将新的部分电影文件路径添加到 scene.partial_movie_files 和当前分段。此方法将根据哈希值计算路径。此外,它还将新动画添加到当前分段。

参数:

hash_animation (str) – 动画的哈希值。

add_sound(sound_file, time=None, gain=None, **kwargs)[来源]

此方法从声音文件添加一个音频片段。

参数:
  • sound_file (str) – 声音文件的路径。

  • time (float | None) – 应该添加音频的时间戳。

  • gain (float | None) – 给定音频片段的增益。

  • **kwargs – 此方法使用 add_audio_segment,因此此处可以引用该方法中使用的任何关键字参数。

begin_animation(allow_write=False, file_path=None)[来源]

Manim 内部使用此方法将动画流式传输到 FFMPEG 以进行显示或写入文件。

参数:
  • allow_write (bool) – 是否写入视频文件。

  • file_path (StrPath | None)

返回类型:

clean_cache()[来源]

将通过删除最旧的部分电影文件来清理缓存。

close_partial_movie_stream()[来源]

关闭当前打开的视频容器。

Manim 内部使用此方法首先刷新部分文件视频流中剩余的包,然后关闭相应的容器。

返回类型:

combine_to_movie()[来源]

Manim 内部使用此方法将构成一个场景的单独部分电影文件组合成该场景的单个视频文件。

combine_to_section_videos()[来源]

连接每个分段的部分电影文件。

返回类型:

create_audio_segment()[来源]

创建一个空的、静音的音频片段。

encode_and_write_frame(frame, num_frames)[来源]

仅供内部使用:获取给定帧(np.ndarray 格式)并将其写入流。

参数:
返回类型:

end_animation(allow_write=False)[来源]

Manim 内部使用此方法优雅地停止向 FFMPEG 流式传输。

参数:

allow_write (bool) – 是否写入视频文件。

返回类型:

finish()[来源]

完成向 FFMPEG 缓冲区写入或将图像写入输出目录。将部分电影文件组合成完整场景。如果 save_last_frame 为 True,则将最后一帧保存到默认图像目录。

返回类型:

finish_last_section()[来源]

如果当前分段为空,则删除。

返回类型:

flush_cache_directory()[来源]

删除所有缓存的部分电影文件

get_resolution_directory()[来源]

获取直接包含视频文件的分辨率目录的名称。

此方法获取直接包含视频文件的目录名称。此名称为 <height_in_pixels_of_video>p<frame_rate>。例如,如果您以 15fps 渲染 854x480 像素的动画,则直接包含视频文件的目录名称将是 480p15

目录的名称。

MEDIA_DIR
    |--Tex
    |--texts
    |--videos
    |--<name_of_file_containing_scene>
        |--<height_in_pixels_of_video>p<frame_rate>
            |--<scene_name>.mp4
返回:

文件结构应如下所示:

返回类型:

str

init_audio()[来源]

准备写入器以向电影添加音频。

init_output_directories(scene_name)[来源]

初始化输出目录。

注意

目录从 config 中读取,例如 config['media_dir']。如果目标目录尚不存在,则会创建它们。

参数:

scene_name (StrPath)

返回类型:

is_already_cached(hash_invocation)[来源]

将检查是否存在以 hash_invocation 命名的文件。

参数:

hash_invocation (str) – 对应于 scene.playscene.wait 调用的哈希值。

返回:

文件是否存在。

返回类型:

bool

listen_and_write()[来源]

仅供内部使用:阻塞直到队列中出现新帧。

next_section(name, type_, skip_animations)[来源]

在此处创建分段切点。

参数:
  • name (str)

  • type_ (str)

  • skip_animations (bool)

返回类型:

open_partial_movie_stream(file_path=None)[来源]

打开一个包含视频流的容器。

Manim 内部使用此方法初始化包含部分电影文件视频流的容器。

返回类型:

print_file_ready_message(file_path)[来源]

将“文件就绪”消息打印到标准输出。

save_final_image(image)[来源]

此名称不准确。此方法将传入的图像保存到默认图像目录。

参数:

image (ndarray) – 要保存图像的像素数组。

write_frame(frame_or_renderer, num_frames=1)[来源]

Manim 内部使用此方法将帧写入 FFMPEG 输入缓冲区。

参数:
  • frame_or_renderer (np.ndarray | OpenGLRenderer) – 帧的像素数组。

  • num_frames (int) – 写入帧的次数。

write_subcaption_file()[来源]

写入字幕文件。