diff --git a/orx-video-profiles/README.md b/orx-video-profiles/README.md index 4052d068..c40db764 100644 --- a/orx-video-profiles/README.md +++ b/orx-video-profiles/README.md @@ -4,3 +4,104 @@ A collection of `VideoWriterProfile` implementations that can be used with `Scre ## 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()) { + profile = GIFProfile() + } + extend { + drawer.clear(ColorRGBa.GREEN) + } + } +} +``` + +Later use `gifsicle` or similar to further reduce file size. For example: + +``` +$ gifsicle --loop --delay=4 --colors 16 --optimize=2 heavy.gif >lessheavy.gif +``` + +More about [gifsicle](http://www.lcdf.org/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()) { + profile = PNGProfile() + outputFile = "frame-%05d.png" + } + 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()) { + // .apply is optional, for further configuration + profile = ProresProfile().apply { + profile = ProresProfile.Profile.HQ4444 + codec = "prores_ks" + } + } + extend { + drawer.clear(ColorRGBa.GREEN) + } + } +} +``` + +### X265 + +``` +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()) { + // .apply is optional, for further configuration + profile = X265Profile().apply { + mode(X265Profile.WriterMode.Lossless) + constantRateFactor(23) + hlg = true + } + } + extend { + drawer.clear(ColorRGBa.GREEN) + } + } +} +``` \ No newline at end of file diff --git a/orx-video-profiles/src/main/kotlin/PNGProfile.kt b/orx-video-profiles/src/main/kotlin/PNGProfile.kt new file mode 100644 index 00000000..0654cdc4 --- /dev/null +++ b/orx-video-profiles/src/main/kotlin/PNGProfile.kt @@ -0,0 +1,16 @@ +package org.openrndr.extra.videoprofiles +import org.openrndr.ffmpeg.VideoWriterProfile + +/** + * This profile requires specifying a file name like this + * outputFile = "frame-%05d.png" + * where `%05d` means "zero-padded five-digit frame number". + * The frame number format is not optional. + */ +class PNGProfile : VideoWriterProfile() { + override val fileExtension = "png" + + override fun arguments(): Array { + return arrayOf("-vf", "vflip") + } +} \ No newline at end of file