diff options
author | reduz <reduzio@gmail.com> | 2022-06-17 00:55:19 +0200 |
---|---|---|
committer | reduz <reduzio@gmail.com> | 2022-06-21 11:28:47 +0200 |
commit | 5786516d4d6b517e6a28aec191f944aecf2f544d (patch) | |
tree | 8a79324296035a7aa8b7802d610596912b7c1642 /doc/classes | |
parent | 362f53ff02c381ea94640baa16e84e6f6956efef (diff) |
Implement Running Godot as Movie Writer
* Allows running the game in "movie writer" mode.
* It ensures entirely stable framerate, so your run can be saved stable and with proper sound (which is impossible if your CPU/GPU can't sustain doing this in real-time).
* If disabling vsync, it can save movies faster than the game is run, but if you want to control the interaction it can get difficult.
* Implements a simple, default MJPEG writer.
This new features has two main use cases, which have high demand:
* Saving game videos in high quality and ensuring the frame rate is *completely* stable, always.
* Using Godot as a tool to make movies and animations (which is ideal if you want interaction, or creating them procedurally. No other software is as good for this).
**Note**: This feature **IS NOT** for capturing real-time footage. Use something like OBS, SimpleScreenRecorder or FRAPS to achieve that, as they do a much better job at intercepting the compositor than Godot can probably do using Vulkan or OpenGL natively. If your game runs near real-time when capturing, you can still use this feature but it will play no sound (sound will be saved directly).
Usage:
$ godot --write-movie movie.avi [scene_file.tscn]
Missing:
* Options for configuring video writing via GLOBAL_DEF
* UI Menu for launching with this mode from the editor.
* Add to list of command line options.
* Add a feature tag to override configurations when movie writing (fantastic for saving videos with highest quality settings).
Diffstat (limited to 'doc/classes')
-rw-r--r-- | doc/classes/@GlobalScope.xml | 14 | ||||
-rw-r--r-- | doc/classes/Image.xml | 13 | ||||
-rw-r--r-- | doc/classes/MovieWriter.xml | 53 | ||||
-rw-r--r-- | doc/classes/ProjectSettings.xml | 12 |
4 files changed, 86 insertions, 6 deletions
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 18ea29857b..fed6270247 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -2512,19 +2512,21 @@ </constant> <constant name="PROPERTY_HINT_SAVE_FILE" value="38" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="39" enum="PropertyHint"> + <constant name="PROPERTY_HINT_GLOBAL_SAVE_FILE" value="39" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_INT_IS_POINTER" value="41" enum="PropertyHint"> + <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="40" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_ARRAY_TYPE" value="40" enum="PropertyHint"> + <constant name="PROPERTY_HINT_INT_IS_POINTER" value="42" enum="PropertyHint"> </constant> - <constant name="PROPERTY_HINT_LOCALE_ID" value="42" enum="PropertyHint"> + <constant name="PROPERTY_HINT_ARRAY_TYPE" value="41" enum="PropertyHint"> + </constant> + <constant name="PROPERTY_HINT_LOCALE_ID" value="43" enum="PropertyHint"> Hints that a string property is a locale code. Editing it will show a locale dialog for picking language and country. </constant> - <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="43" enum="PropertyHint"> + <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="44" enum="PropertyHint"> Hints that a dictionary property is string translation map. Dictionary keys are locale codes and, values are translated strings. </constant> - <constant name="PROPERTY_HINT_MAX" value="44" enum="PropertyHint"> + <constant name="PROPERTY_HINT_MAX" value="45" enum="PropertyHint"> </constant> <constant name="PROPERTY_USAGE_NONE" value="0" enum="PropertyUsageFlags"> </constant> diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml index da5b907fab..20e26714bc 100644 --- a/doc/classes/Image.xml +++ b/doc/classes/Image.xml @@ -380,6 +380,19 @@ [b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which means [method save_exr] will return [constant ERR_UNAVAILABLE] when it is called from an exported project. </description> </method> + <method name="save_jpg" qualifiers="const"> + <return type="int" enum="Error" /> + <argument index="0" name="path" type="String" /> + <argument index="1" name="quality" type="float" default="0.75" /> + <description> + </description> + </method> + <method name="save_jpg_to_buffer" qualifiers="const"> + <return type="PackedByteArray" /> + <argument index="0" name="quality" type="float" default="0.75" /> + <description> + </description> + </method> <method name="save_png" qualifiers="const"> <return type="int" enum="Error" /> <argument index="0" name="path" type="String" /> diff --git a/doc/classes/MovieWriter.xml b/doc/classes/MovieWriter.xml new file mode 100644 index 0000000000..6cc3829b20 --- /dev/null +++ b/doc/classes/MovieWriter.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="MovieWriter" inherits="Object" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + <method name="_get_audio_mix_rate" qualifiers="virtual const"> + <return type="int" /> + <description> + </description> + </method> + <method name="_get_audio_speaker_mode" qualifiers="virtual const"> + <return type="int" enum="AudioServer.SpeakerMode" /> + <description> + </description> + </method> + <method name="_handles_file" qualifiers="virtual const"> + <return type="bool" /> + <argument index="0" name="path" type="String" /> + <description> + </description> + </method> + <method name="_write_begin" qualifiers="virtual"> + <return type="int" enum="Error" /> + <argument index="0" name="movie_size" type="Vector2i" /> + <argument index="1" name="fps" type="int" /> + <argument index="2" name="base_path" type="String" /> + <description> + </description> + </method> + <method name="_write_end" qualifiers="virtual"> + <return type="void" /> + <description> + </description> + </method> + <method name="_write_frame" qualifiers="virtual"> + <return type="int" enum="Error" /> + <argument index="0" name="frame_image" type="Image" /> + <argument index="1" name="audio_frame_block" type="const void*" /> + <description> + </description> + </method> + <method name="add_writer" qualifiers="static"> + <return type="void" /> + <argument index="0" name="writer" type="MovieWriter" /> + <description> + </description> + </method> + </methods> +</class> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index ad95572bf1..281c9adfba 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -547,6 +547,18 @@ See [enum DisplayServer.VSyncMode] for possible values and how they affect the behavior of your application. Depending on the platform and used renderer, the engine will fall back to [code]Enabled[/code], if the desired mode is not supported. </member> + <member name="editor/movie_writer/disable_vsync" type="bool" setter="" getter="" default="false"> + </member> + <member name="editor/movie_writer/fps" type="int" setter="" getter="" default="60"> + </member> + <member name="editor/movie_writer/mix_rate_hz" type="int" setter="" getter="" default="48000"> + </member> + <member name="editor/movie_writer/mjpeg_quality" type="float" setter="" getter="" default="0.75"> + </member> + <member name="editor/movie_writer/movie_file" type="String" setter="" getter="" default=""""> + </member> + <member name="editor/movie_writer/speaker_mode" type="int" setter="" getter="" default="0"> + </member> <member name="editor/node_naming/name_casing" type="int" setter="" getter="" default="0"> When creating node names automatically, set the type of casing in this project. This is mostly an editor setting. </member> |