シークが早いH.264動画のエンコード

プログラムに連動して動画ファイルをシークさせようとした時に、

エンコード設定の違いで動作が劇的にスムーズになったのでメモ。

 

動画エンコードにはffmpegを使う。Macportsとかでインストールできる。

ffmpegの使い方については以下のサイトが分かりやすかった。

サンプルで使って慣れる。ffmpeg の使い方。 - それマグで!

ffmpegの使い方:tech.ckme.co.jp

 

通常の視聴用にエンコードされたmp4(H264)ファイルはシークできる間隔が数秒単位で開いている事が多い。そのままだと、プログラムからシークできないフレームを呼び出した際にカクつきやすい。

プログラムから動画を細かくシークする場合には( -g 1)オプションを入れる事で全フレームがシーク可能になる。

nico-lab.net


また、( -tune zerolatency)オプションを追加することで再生の際のレイテンシーを減らす事ができる。ファイルサイズは少し増加するが、頭出しが速くなる。

あとは解像度(-vf scale=横幅ピクセル数:-1)や画質(-crfオプション)を調整してファイルサイズを小さくしたり、必要に応じて音声なし(-an オプション)にしたりするとスムーズに動くようになると思う。

自分の環境だと全フレームシーク可能化(-g 1)と低レイテンシ(-tune zerolatency)の設定の有無で違いが大きかった。

 

ffmpegは操作がコマンドラインからだったりしてとっつきにくいけども、シンプルに使えて自由度も高いので、今後もお世話になりそう。