--- author: usbharu draft: true categories: - 技術 date: 2023-11-16T20:36:52+09:00 tags: - Kotlin - JavaCV - FFmpeg keywords: - Kotlin - JavaCV - FFmpeg title: JavaCVを利用して動画を特定のFPSにする relpermalink: posts/2023-11-16/ url: posts/2023-11-16/ decription: JavaCVを利用して動画を特定のFPSで再エンコードし、保存します。 --- 取りあえず動くリポジトリ [https://git.usbharu.dev/usbharu/javacv-demo](https://git.usbharu.dev/usbharu/javacv-demo) ## JavaCV で FPS を変更する GPU を利用したフレーム補間などではなく、単にフレームを複製、もしくは削減してフレーム数を調整します。 このコードの肝は`while`がネストしている部分で、フレームが増えたり減ったりして音声と同期が取れなくなった分を多めに取得することで途中で無音になる問題を解決しています。 ```kotlin while (true) { val grab = grabber.grab() ?: break println("GRAB ${grab.timestamp} : ${grab.image} ${grab.samples}") if (grab.image != null || grab.samples != null) { filter.push(grab) } while (true) { val frame = filter.pull() ?: break it.record(frame) } } ```