Hero img
ウェブページ用に動画をwebp,apngに変換する。

gifは時代遅れに、新しい画像拡張子に変換する。

webp apng avif等新しい拡張子が増えファイルサイズも小さく、画質もきれいなアニメーションをブラウザーに表示することができるようになりました。


目次

  • 目標
  • 環境
  • 画像の拡張子
  • 映像ファイルはどれを使えば?
  • 画像をwebpに変換する
  • 使うもの
  • ffmpegをインストールする
  • pathを追加する
  • ffmpegの起動を確認する
  • batファイルを用意する
  • 変換する
  • 検証
  • apngについて
  • apngとwebp avifどれがいいのか? 
  • 個人的意見
  • apng
  • webp
  • avif
  • avifのオプション
  • まとめ

目標

かなり簡単に動画を最新の拡張子webp,apng,avifに変換する環境を作る。

環境

  • Windows 10

画像の拡張子

ブラウザーで表示できる動画ファイルは「gif」ファイルでした。しかし今はwebp,apng,avifが画像のファイルサイズが小さく、高画質になったため、gifを使う理由がなくなった。

映像ファイルはどれを使えば?

では映像ファイルをブラウザーにアップしたい場合どれを使えばいいのか?
今はとりあえずwebpにしておけばファイルサイズを小さく画質は高画質にすることができる。webpより高画質なavifがあるが、まだすべてのブラウザ、端末で対応していないのでとりあえずwebpにしておいた方が良いかもしれない。

画像をwebpに変換する

webpを使うと小さいファイルサイズに、さらに高画質に、全てのブラウザ、端末で表示されるので映像をwebpに変換していく。

使うもの

使用するものはffmpegというものを使って変換をしていく。

ffmpegをインストールする

  1. 1.ffmpegをダウンロードする

ffmpegをgitページからダウンロードをします。

最新バージョンがffmpeg-master-latest-win64-gpl.zipだったのでこれをダウンロードしました。

webp-apng-ffmpeg-download

時期によって最新バージョンが異なるので、とりあえずffmpeg-n〇.〇-latest-win64-lgpl-〇.〇.zipをダウンロードしても大丈夫です。 〇.〇の部分は現在6.1が最新の様です。

webp-apng-ffmpeg-latestversion
  1. 2.ffmpegを移動させる

ffmpegを解凍したらbinフォルダー内に3つファイルがあるのでそれを移動させます。 私の場合はCドライブ直下にffmpegというファイルを作成しその中に入れています。

webp-apng-ffmpeg-path1 webp-apng-ffmpeg-path2

pathを追加する

環境変数にffmpeg.exeの入っているフォルダー場所を追加します。

私の場合
C:\ffmpeg
webp-apng-ffmpeg-add-envpath

パスの追加方法の詳細はここを参照してください。

ffmpegの起動を確認する

  1. 1.ウィンドウズキーを押して「cmd」と入力し、コマンドプロンプトを起動します。 webp-apng-run-cmd.png

  2. 2.ffmpegと入力して画像のようにに表示されたら正常に環境変数が追加でき、ffmpegが起動できる状態になりました。

webp-apng-run-ffmpeg

batファイルを用意する

cd/d %~p1
:FILEDROP
ECHO ファイル受け取り

:REPEAT
ffmpeg -i %1 -vcodec libwebp -lossless 0 "%~n1.webp"
if "%~2"=="" GOTO EXIT
shift
GOTO REPEAT
:EXIT
  1. 1.メモ帳を開いてコマンドをコピぺする
webp-apng-open-memopad
  1. 2.bat形式で保存する
  • ファイル名の最後に「.bat」と入力する。
  • ファイルの種類は「すべてのファイル」する。
  • 文字コードはANSIにする。
webp-apng-run-save-batfile

変換する

あとは画像ファイルを選んでドラッグアンドドロップで変換がされます。

webp-apng-convert-webp

検証

ファイルサイズ

画像のファイルサイズは312KBから25.3KBになりました。
およそ12分の1まで小さくなりました。 webp-apng-filesize

画質について

元の画像もあまりよくありませんが、劣化もあまり感じられない。 webp-apng-convert-result

apngについて

apngはアニメーションpngです。webpと同様gifアニメーションの上位互換です。 以下のコマンドで良いクオリティで出現できると思います。

ffmpeg -i %1 -vcodec libwebp -lossless 0 -qscale 5 -vf fps=8,scale=640:-1,format=pal8 -pix_fmt yuv420p -preset default -y -loop 0 -b:v 100k "%~n1.webp"

apngとwebp avifどれがいいのか? 

よく webp vs apng vs avif。何が優れている、どっちを使えばいいのか。と言う議論があるが、今のところどちらでも良い、大差無しと感じます。
私は諸事情によりapngではなく、webpを使っています。そろそろavifに切り替えを検討中。

個人的意見

webp apngどちらを使うべきか、ズバリwebpを使う方が良いと考えます。
理由としては汎用性、端末、ブラウザの対応状況がwebpがほんの少し優れているからです。
また、apngがオプションの指定が少し複雑なためです。適切にパラメーターを調整できればapngの方が優れている。動画によるので本当にケースバイケースになる。
そのため、汎用性が高いwebpを使うべきだと考える。

apng

apngが良いと思える部分

  • 画質が良い
  • ファイルサイズが小さい

不満がある部分

  • apng拡張子を認識しないサービス、端末等がある。
  • 拡張子がpngでも可能だが、png形式というのが普及しているため混在してしまうできるだけapngにしたい。
  • 変換時のオプションの設定がめんどくさい
  • 動画毎にパラメーターを調整しないと恩恵が受けれない。

webp

webpが良いと思える部分

  • 変換のオプションが簡単
  • ほぼ全てのサービス、端末がwebpを対応しているので 迷ったらwebpに変換しておけば解決する。

不満がある部分

  • 画質が荒い,ファイルサイズが大きくなる

avif

正直avifがかなり良い。品質良いし、ファイルサイズ小さい。のだた、まだブラウザー側が対応していないところもあるので...
と言ってもほとんど対応しているので、webpからavifに切り替えてしまおうか迷っている...

ffmpeg -i %1 -c:v libaom-av1 -b:v 80k -vf scale=640:-1,framerate=8 -pix_fmt yuv420p -aom-params lossless=0 -movflags faststart -g 80 -cpu-used 8 -y  "%~n1.avif"

avifのオプション

上記のコマンドで私の場合満足しているが、人によって欲しい結果が異なるので、どこを変更すればいいのか

変更箇所
#映像クオリティ
-b:v 80k
変更例:80k -> 1M 500k
#フレームレート
-framerate=8 -g 80
両方を合わせるべき
変更例:framerate=8 -g 80 -> framerate=15 -g 150  
#画像サイズ
-vf scale=640:-1
変更例:-vf scale=1080:-1

参考までに40秒の動画を変換したところ

webp-apng-diff3extension

画質に関しては動画でご確認ください。

どれが映像がどの拡張子なのか

答え合わせ
webpavif
gifapng

となっています。

まとめ

ウェブページで動く画像は何がいいのかは、現時点ではwebpが良いと思う。
やはり人によって表示されない状況は避けたい。
しかし、正直のところこの画像問題についてはcloudinaryを使っているため、何も考えずに済んでいる

もう少しでavifも全て対応されるのでavifを使うのも悪く無い選択肢。そろそろwebpからavifに切り替えようかな...

関連記事

コメント

コメントを書く

質問や、間違いがありましたら、お気軽にどうぞ

※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください