blog/content/posts/2023-11-16/index.md

1.4 KiB

author draft categories date tags keywords title relpermalink url decription
usbharu true
技術
2023-11-16T20:36:52+09:00
Kotlin
JavaCV
FFmpeg
Kotlin
JavaCV
FFmpeg
JavaCVを利用して動画を特定のFPSにする posts/2023-11-16/ posts/2023-11-16/ JavaCVを利用して動画を特定のFPSで再エンコードし、保存します。

取りあえず動くリポジトリ

https://git.usbharu.dev/usbharu/javacv-demo

JavaCV で FPS を変更する

GPU を利用したフレーム補間などではなく、単にフレームを複製、もしくは削減してフレーム数を調整します。 このコードの肝はwhileがネストしている部分で、フレームが増えたり減ったりして音声と同期が取れなくなった分を多めに取得することで途中で無音になる問題を解決しています。


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)
                    }
                }