Title Image

Maya Tools: FFmpeg Playblast

Level:
Advanced
Software:
Maya
Language:
Python
Duration:
6 hours 51 minutes
Instructor:
Chris Zurbrigg

Become a Patron!

Overview

An advanced, project-based course focused on delivering a production-ready playblasting toolset that replaces Maya's outdated media encoder.

The completed toolset will allow for a unified playblast experience with support for automation, custom scripts and provide a robust Qt-based graphical user interface.
* This is a Patreon series. Project files and videos marked with a Patreon logo are Total Access exclusives.

Course Outline

35 Videos (6 hours 51 minutes)

00 - Introduction

A general overview of this series, the course requirements and what viewers can expect in upcoming lessons.

01 - Project Overview

An overview of the project objectives and deliverables including a detailed walkthrough of the prototype playblast UI and its desired functionality.

02 - Production Quality

A review of the term "Production Quality" and what it means to deliver a finished project that reaches this level of quality.

03 - Requirements

A comprehensive breakdown of the project requirements and expected functionality that should be implemented by the end of this course.

04 - Playblast Logic (Part 1)

This first of the two major sections in this project focusing on wrapping all of the playblast and encoding logic into a single standalone class.

05 - Playblast Logic (Part 2)

Continuing on from the previous lesson, the initial setup for the ffmpeg executable is added.

06 - Playblast Logic (Part 3)

In this lesson, special handling is implemented to support custom macros for the output directory and filename.

07 - Playblast Logic (Part 4)

The focus of this lesson is on the helper methods required to set up the camera and manage the viewport for the playblast operation.

08 - Playblast Logic (Part 5)

Over the next few lessons, the remaining user configurable playblast options (resolution, frame range and encoding settings) will be implemented along with the helper methods for supporting custom presets.

09 - Playblast Logic (Part 6)

Continuing on from the previous lesson, in this video the required frame range logic and preset helper methods are implemented.

10 - Playblast Logic (Part 7)

In this lesson, the methods responsible for setting the encoder, encoder specific options and output format are implemented.

11 - Playblast Logic (Part 8)

While testing the code a couple potential problems were discovered. This lesson will highlight those issues and implement the necessary fixes.

12 - Playblast Logic (Part 9)

With the majority of the methods required to configure a playblast complete, it's time to put it all together and implement the remainder of the execute method.

13 - Playblast Logic (Part 10)

Continuing on from the previous lesson, this video implements the pre and post playblast logic and finalizes the playblast operation.

14 - Encoding with ffmpeg (Part 1)

With the playblast operation complete, the next step is to encode the playblasted image sequence, using ffmpeg, to create the final h264 encoded mp4.

15 - Encoding with ffmpeg (Part 2)

Using the QProcess class, the ffmpeg command will be executed in a separate process with the ffmpeg output directed back to Maya.

16 - Encoding with ffmpeg (Part 3)

With video encoding complete, it is time to add support for audio that correctly handles the playback start time and audio offset.

17 - Cleanup

In this lesson, the remaining methods -- for cleaning up the temporary image directory and opening the final output in a media player -- are implemented.

18 - Node Visibility (Part 1)

The final remaining feature to be added to this class is the ability to control which node types are visible during the playblast.

19 - Node Visibility (Part 2)

Continuing on from the previous lesson, the required node visibility methods are implemented.

20 - Node Visibility (Part 3)

Wrapping up the ZurbriggPlayblast class, visibility logic is added to temporarily alter the viewport display during a playblast.

21 - User Interface (Part 1)

With the playblast logic complete, it is time to create a robust, production ready front end for the playblast tool using Qt for Python (PySide2).

22 - User Interface (Part 2)

Building on the base code from the previous lesson, the first step is to implemented the default functionality of Playblast button.

23 - User Interface (Part 3)

The next step in the UI's creation is to hook up the Output Window so that any messages from the UI, Maya or ffmpeg are displayed to the user.

24 - User Interface (Part 4)

In this lesson, UI functionality is added to make the ffmpeg executable path a user configurable option.

25 - User Interface (Part 5)

In this lesson, the output selection buttons are implemented -- including special handling to resolve supported macros.

26 - User Interface (Part 6)

The next area of the UI to be implemented is the options section. These options expose most of the user configurable playblast settings.

27 - User Interface (Part 7)

Continuing on from the previous lesson, in this video the remaining methods connected to the playblast option widgets are implemented.

28 - User Interface (Part 8)

With the individual refresh methods complete, it becomes trivial to implement the main refresh method called by the Refresh button.

29 - User Interface (Part 9)

In this lesson, the functionality for the Encoder Settings dialog is implemented.

30 - User Interface (Part 10)

Wrapping up the user configurable options, the remaining logic required by the Node Visibility dialog is added.

31 - User Interface (Part 11)

The final pieces of the UI to be implemented are the methods for loading and saving the default playblast values.

32 - User Interface (Part 12)

To improve usability, in this lesson support is added that allows the tool to be easily integrated into Maya's shelves and menus.

33 - Final Thoughts

Final thoughts on the completed FFmpeg Playblast project.

34 - Overscan Update

After completing this series, I realized I’d overlook a feature on the Playblast tool, one that I consider to be very important for a production pipeline.

Related Courses