Skip to content

Latest commit

 

History

History

orx-video-profiles

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

orx-video-profiles

GIF, H265, PNG, Prores, TIFF and Webp VideoWriterProfiles for ScreenRecorder and VideoWriter.

Usage

GIF

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            gif()
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}

Then use gifsicle or a similar tool to reduce the gif file size. For example:

$ gifsicle --loop --delay=4 --colors 16 --optimize=2 heavy.gif >lessheavy.gif

More about gifsicle.

PNG sequence

This profile requires specifying a file name: outputFile = "frame-%05d.png", where %05d means "zero-padded five-digit frame number". The frame number format is not optional.

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            pngSequence()
            outputFile = "frame-%05d.png"
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}

TIFF sequence

TIFF images are lossless and they can be faster to write than other formats. You will probably need to convert them later to a more common format or combine them into a video file.

This profile requires specifying a file name: outputFile = "frame-%05d.tif", where %05d means "zero-padded five-digit frame number". The frame number format is not optional.

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            tiffSequence()
            outputFile = "frame-%05d.tif"
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}

Animated Webp

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            webp()
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}

Prores (large file, high quality video)

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            prores {
                profile = ProresProfile.Profile.HQ4444
            }
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}

H265

import org.openrndr.application
import org.openrndr.color.ColorRGBa
import org.openrndr.extra.videoprofiles.*
import org.openrndr.ffmpeg.ScreenRecorder

fun main() = application {
    program {
        extend(ScreenRecorder()) {
            h265 {
                constantRateFactor(23)
            }
        }
        extend {
            drawer.clear(ColorRGBa.GREEN)
        }
    }
}