diff --git a/tutorials.md.in b/tutorials.md.in index d6ace40092..0b7b512f69 100644 --- a/tutorials.md.in +++ b/tutorials.md.in @@ -21,6 +21,7 @@ Ignition @IGN_DESIGNATION_CAP@ library and how to use the library effectively. * \subpage meshtofuel "Importing a Mesh to Fuel": Build a model directory around a mesh so it can be added to the Ignition Fuel app. * \subpage detachablejoints "Detachable Joints": Creating models that start off rigidly attached and then get detached during simulation * \subpage triggeredpublisher "Triggered Publisher": Using the TriggeredPublisher system to orchestrate actions in simulation +* \subpage videorecorder "Video Recorder": Record videos from the 3D render window. **Migration from Gazebo-classic** diff --git a/tutorials/files/video_recorder/video_recorder.gif b/tutorials/files/video_recorder/video_recorder.gif new file mode 100644 index 0000000000..e9e9b28dc9 Binary files /dev/null and b/tutorials/files/video_recorder/video_recorder.gif differ diff --git a/tutorials/files/video_recorder/video_recorder.png b/tutorials/files/video_recorder/video_recorder.png new file mode 100644 index 0000000000..f9b06895c9 Binary files /dev/null and b/tutorials/files/video_recorder/video_recorder.png differ diff --git a/tutorials/video_recorder.md b/tutorials/video_recorder.md new file mode 100644 index 0000000000..54b8fbe519 --- /dev/null +++ b/tutorials/video_recorder.md @@ -0,0 +1,107 @@ +\page videorecorder Video Recorder + +## Using the video recorder plugin + +Ignition Gazebo offers a video recorder tool for recording videos from the 3D +scene. The recorder tool is available as a GUI plugin. To open this plugin, +first launch Ignition Gazebo and select the ellipsis menu on top right +(3 dots menu), and scroll down to find the `Video Recorder` option. Click on the +plugin to open the Video Recorder tool. Alternatively, launch the demo world in +Ignition Gazebo that already has this plugin included in the GUI. + +``` +ign gazebo -v 4 video_record_dbl_pendulum.sdf +``` + +In this plugin, you should see a single button with a video recorder icon. +Clicking on the button gives you the video format options that are available. + +@image html files/video_recorder/video_recorder.png + +Once an option is selected, recording starts immediately as indicated by +a flashing video recorder icon. At anytime that you wish to stop recording, +click on the flashing icon and select `Stop`. A file dialog window should pop up +and let you select the path to save the recorded video in. + +Playback the video you just saved and you should notice that the resolution +of the video is based on the size of your 3D scene window. So if you wish +to record the video in a different size, make sure to configure the GUI +window prior to recording. + +@image html files/video_recorder/video_recorder.gif + + +## Video recorder configurations + +A few video recorder parameters can be specified using GUI configurations, see +the [GUI Configuration](gui_config.html) tutorial for more information. +If you launched Ignition Gazebo with the +`video_record_dbl_pendulum.sdf` demo world, the GUI configurations are embedded +in the world SDF file so you will need to download a copy of the +[sdf file](https://raw.githubusercontent.com/ignitionrobotics/ign-gazebo/ign-gazebo3/examples/worlds/video_record_dbl_pendulum.sdf). +and modify the GUI configuration in that file. On the other hand, if you +launched Ignition Gazebo with a world file that does not have GUI +configurations, you will need to specify the settings in +`$HOME/.ignition/gazebo/gui.config`. + +Recall that videos are recorded from the 3D scene, we will to set the video +configurations in the 3D scene plugin. Here is an example of the +Scene 3D plugin with custom video recorder settings: + +```xml + + + 3D View + false + docked + + + ogre2 + scene + 0.4 0.4 0.4 + 0.8 0.8 0.8 + 6 0 6 0 0.5 3.14 + + + true + true + 4000000 + + + +``` + +Options are: + +* **use_sim_time**: Values are `[true|false]`. Record videos based on sim time, +i.e. each frame encoded into the video will be timestamped using sim time. +For example, if a complex simulation was running at half of real time speed, and +`` is set to true, video playback should ignore delays due +to low Real Time Factor (RTF) and plays back video as if RTF was 1.0. +By default, the value is `false`, which means the videos are recorded based +on real time. + +* **lockstep**: Values are `[true|false]`. Lockstep simulation for video +recording. This forces the GUI to pause and only process a new state update +from the server until the video recorder finishes encoding the current frame. +This ensures that the video recorder does not miss any updates / frames in the +resulting video. This configuration makes more sense when used with +`` set to `true`, in which case it produces smooth videos +with exact timing, i.e. if you record simulation for 1 minute sim time, +the resulting video should be also 1 minute long (+/- 1 second due to encoder +settings). Defaults to `false`. Note: the server publishes states at 60Hz +and the video recorder records at 25 FPS so it also makes sense to update the +Scene Broadcaster system to only publish states at 25Hz. You can do this by +going to the world SDF file, locate the +`ignition::gazebo::systems::SceneBroadcaster` system, and set the +`` parameter: + +```xml + + 25 + +``` + +* **bitrate**: Video encoding bitrate in bps. This affects the quality of the +generated video. The default bitrate is 2Mbps.