Ubuntu 15.04: VLC のスナップショットが間違ったアスペクト比で保存される

Ubuntu 15.04 にしてから、VLC で動画のスナップショットを保存すると、画像の縦横比がおかしくなることがある。

ピクセルアスペクト比が 1:1 でない動画で発生する現象で、例えばアスペクト比 16:9 の 1440 x 1080 の動画でスナップショットを保存すると 1920 x 1080 で保存してほしいのに、1440 x 1080 で保存されて、水平方向に潰れた画像になってしまう。設定でスナップショットの保存サイズを明示的に指定しても無視される。

これは VLC 2.2.x のバグで、2.2.2 で修正予定のようだ(Ubuntu の公式パッケージは 2.2.0)。開発中のソースコード上では既に修正済み。

修正内容はこちら。

一瞬何をどう修正したのかわからなかったが、どうもソースコードに手を入れているうちに if-else 節のネストがおかしくなって括弧の位置がズレてしまったのを修正したようだ。気をつけよう…

たいした量でもないのでソースパッケージに修正内容を適用してビルドする。作業の流れは以下の通り(コマンドの出力等は省略)。ソースコードの修正はパッチを作成して適用したほうがいいのだろうが、面倒なので手でやってしまった。

$ mkdir vlc-build
$ cd vlc-build
$ apt-get source vlc
$ sudo apt-get build-dep vlc
$ cd vlc-2.2.0
(エディタで src/misc/image.c を修正)
$ dpkg-buildpackage -rfakeroot -uc -b

deb ファイルがたくさん出来ているが、misc/image.c は libvlccore パッケージで使われるので、それだけインストールすればよい。

$ sudo dpkg -i libvlccore8_2.2.0-1_amd64.deb

これで OK だった。

追記: 2016-02-19

パッチを適用した vlc で 1080i のMPEG動画のスナップショットを保存すると、画像の高さが1088ピクセルになってしまう。

MPEGでは縦1080ピクセルの動画はデータ上では16の倍数になるように8ピクセル分のダミーデータが追加されて縦1088ピクセルで格納されている。動画プレイヤーは無効な8ピクセル分をカットして縦1080ピクセルで表示している。

上のパッチを当てた VLC で保存したスナップショット画像にはダミー部分は存在せず、1080ピクセルある有効な領域が縦に少し引き伸ばされた形で保存されていた。パッチを適用する前の vlc では縦サイズは正しく出力されていた。

これはコミット 903b3cbcbc3bf4eab01c80e15e91f2cca0bbeb5e の副作用で、これを適用しないビルドでは正しいサイズで出力された。ただし、このコミットで修正されている vlc の設定でスナップショットのサイズを指定しても効かないという不具合は残ってしまう。