How to Pause and Resume rav1e AV1 Encoding
This article explains the mechanisms available to pause and resume active video encoding jobs when using the rav1e (librav1e) AV1 encoder. Because rav1e is designed as a library and a command-line tool, managing an active job requires a combination of operating system process control, API-level loop management, or integration with external multi-pass chunking frameworks.
Operating System Process Control
The most direct way to pause and resume an active rav1e encoding job
without losing progress is through operating system-level process
signals. This method works for both the rav1e command-line interface
(CLI) and applications linking to the librav1e library.
- Linux and macOS (POSIX): You can suspend the
encoder process by sending a
SIGSTOPsignal, which halts execution and keeps the current state in memory. To resume, send aSIGCONTsignal.- Pause:
kill -TSTP <PID>orkill -STOP <PID> - Resume:
kill -CONT <PID>
- Pause:
- Windows: You can pause the rav1e process using the
Resource Monitor or Process Explorer. Right-click the
rav1e.exeprocess and select “Suspend”. To resume, right-click the process and select “Resume”.
These methods preserve the exact state of the encoder in the system RAM, allowing for an instant pause and resume cycle.
API-Level Flow Control (librav1e)
For developers integrating librav1e into their own
software, pausing and resuming is controlled via the application’s
frame-feeding loop.
The librav1e API operates on a push-pull model using the
following functions: * Context::send_frame() to input raw
video frames. * Context::receive_packet() to retrieve
encoded AV1 packets.
Because the encoding process is synchronous with these function
calls, you can pause the encoding job simply by halting the thread that
manages this loop. Since the encoder state is preserved within the
Context struct in memory, resuming encoding is as simple as
restarting the loop and resuming calls to send_frame() and
receive_packet().
Persistent Pause and Resume via Segmented Encoding
Neither the rav1e CLI nor the librav1e API
supports native session serialization (saving the entire encoder state
to a file to resume after a system reboot or application crash).
To achieve persistent pause and resume capabilities across system restarts, you must use a segmented encoding workflow:
- Scene Detection and Chunking: Split the source video into smaller segments (chunks) at keyframe intervals.
- Sequential Encoding: Encode each chunk individually using rav1e.
- State Tracking: Maintain a queue or a manifest file tracking which chunks have been successfully encoded.
- Concatenation: Merge the finished AV1 segments into a single container without re-encoding.
If the encoding process is interrupted or manually stopped, the tool can read the manifest and resume encoding from the start of the last uncompleted chunk, preventing the need to restart the entire video encoding job from the beginning.
Popular third-party encoding frameworks like Av1an use this segmented approach to manage rav1e encoding jobs, providing robust crash-recovery and pause/resume functionality.