MovieWriter¶
继承: Object
非实时视频录制编码器的抽象类。
描述¶
i3D可以录制非实时模拟的视频。就像--fix d-fps命令行参数一样,这会强制Item.Update()函数中报告的delta跨帧相同,而不管渲染帧实际需要多长时间。无论您的硬件功能如何,这都可以用来录制具有完美帧步调的高质量视频。
i3D有2个内置的MovieWriter:
-带有MJPEG的AVI容器,用于视频和未压缩的音频(. avi文件扩展名)。有损压缩,中等文件大小,快速编码。有损压缩质量可以通过更改ProjectSettings.editor/movie_writer/mjpeg_quality来调整。生成的文件可以在大多数视频播放器中查看,但必须将其转换为另一种格式,以便在网络上或通过VideoStreamPlayer的i3D进行查看。MJPEG不支持透明度。AVI输出目前限制为最多4 GB大小的文件。
-视频的PNG图像序列和音频的WAV(. png文件扩展名)。无损压缩,大文件大小,编码速度慢。设计用于在录制后使用另一个工具(如FFmpeg)编码到视频文件中。目前不支持透明度,即使根视口设置为透明。
如果您需要编码为不同的格式或通过第三方软件传输流,您可以扩展MovieWriter类以创建您自己的电影作家。出于性能原因,这通常应该使用S3Extension来完成。
编辑器用法:可以在ProjectSettings.editor/movie_writer/movie_file中指定默认电影文件路径。或者,对于运行单个场景,可以将movie_file元数据添加到根节点,指定录制该场景时将使用的电影文件的路径。设置路径后,单击编辑器右上角的视频卷轴图标以启用Movie Maker模式,然后照常运行任何场景。引擎将在启动画面完成后立即开始录制,只有在引擎退出时才会停止录制。再次单击视频卷轴图标以禁用Movie Maker模式。请注意,切换Movie Maker模式不会影响已经在运行的项目实例。
注意:MoviWriter可用于编辑器和导出项目,但它不是*设计用于最终用户在播放时录制视频。希望录制应用视频的用户应该安装工具,如OBS Studio或SimpleScreenRecorder。
方法¶
_get_audio_mix_rate() virtual const |
|
_get_audio_speaker_mode() virtual const |
|
_handles_file(path: String) virtual const |
|
_write_begin(movie_size: Vector2i, fps: int, base_path: String) virtual |
|
void |
_write_end() virtual |
_write_frame(frame_image: Image, audio_frame_block: |
|
void |
add_writer(writer: MovieWriter) static |
方法说明¶
int _get_audio_mix_rate() virtual const 🔗
当引擎请求用于录制音频的音频采样率时调用。返回的值必须以Hz为单位指定。如果未覆盖_get_audio_mix_rate(),则默认为48000 Hz。
SpeakerMode _get_audio_speaker_mode() virtual const 🔗
当引擎请求用于录制音频的音频扬声器模式时调用。这会影响生成的音频文件/流中的输出通道数。如果未覆盖_get_audio_speaker_mode(),则默认为AudioServer.SPEAKER_MODE_STEREO。
bool _handles_file(path: String) virtual const 🔗
当引擎确定该MovieWriter是否能够处理位于path的文件时调用。如果该MovieWriter能够处理给定的文件路径,则必须返回true,否则返回false。通常,_handles_file()被以如下方式重写,以允许用户使用给定文件扩展名,在任何路径下记录一个文件:
func _handles_file(path):
# 允许指定一个具有 `.mkv` 文件扩展名(不区分大小写)的输出文件。
# 或者在 Project Settings 中进行操作,或者通过 `--write-movie <path>` 命令行参数实现。
return path.get_extension().to_lower() == "mkv"
Error _write_begin(movie_size: Vector2i, fps: int, base_path: String) virtual 🔗
在引擎开始写入视频和音频数据之前调用一次。movie_size是要保存的视频的宽度和高度。fps是在项目设置中指定的每秒帧数或使用--fix d-fps<fps>命令行参数。
void _write_end() virtual 🔗
当引擎完成写入时调用。当引擎通过按下窗口管理器的关闭按钮退出或调用SceneTree.quit()时,就会发生这种情况。
注意:在运行编辑器/项目的终端上按Ctrl+C不*会导致_write_end()被调用。
Error _write_frame(frame_image: Image, audio_frame_block: const void*) virtual 🔗
在每个渲染帧的末尾调用。应写入frame_image和audio_frame_block函数参数。
void add_writer(writer: MovieWriter) static 🔗
添加引擎可用的写入器。可以通过覆盖_handles_file()来设置支持的文件扩展名。
注意:add_writer()必须在引擎初始化的足够早的时间调用才能工作,因为电影写作被设计为与引擎的其余部分同时开始。