凄腕の先輩エンジニアと隣にいる僕

2人の日常をさらさらと

rmagik の montage で 困った話

動画を配信するサービスをやっているので、動画の転送量が馬鹿にならない。 さぁどうするかね。

やりたかったこと

動画から生成した画像を montage する。その時、画像の容量が大きくなるため、できるだけ削減したい。

やったこと

まずは画像の容量下げる方法考える。

CLIでやりたかったから、JPEGminiなどのGUIツールは却下。

とりあえずGoogle先生に聞いて見ると、こんな答えが返ってくる。

https://developers.google.com/speed/docs/insights/OptimizeImages?hl=ja

jpegoptim jpegtran 使えと、ほうほう。

Linux上で使うことも考えて、さくっとできそうなjpegoptimを使ってみる。

手順

ffmpeg -i original.mp4 -f image2 -vf fps=fps=12 -crf 20 images/img%d.jpg
jpegoptim --strip-all -m80 *.jpg

EXIF情報などのメタデータを削除して、質を80% に変更

jpegoptim なし jpegoptim あり
584K 544K

まぁ画像の総量を比較すると、少し減ってるのがわかる。 大きい動画の場合、もっと減る。

画像を結合する

montage *.jpg -tile 5x6 -background none animations/%d.jpg
jpegoptim なし jpegoptim あり
564K 564K

……変化なし。

他のツールも使って見たけど、結果は同じ。

原因としては、montage 使うと、質の部分は元に戻るようだ。非可逆ではないjpegでどうやって認識してるのか分からないけど。 仕方ないので、montage のオプションで使えるのがないかを探すと、-quality でいけるみたい。 案外あっさりと見つかる。

montage *.jpg -tile 5x6 -background none -quality 80 animations/%d.jpg
quality 指定なし quality 80
564K 296K

下がったね。だいぶ

ちなみに今回作った画像の一部がこんな感じ

f:id:ko-jatan:20170705002548j:plain