画像形式の変換

FFmpeg コード

今回、swf形式から WebP、WebM に変換するに当たり、最終的に FFmpeg を使いました。ChatGPT に聞いたコードが以下です。私の状況に応じて最適なコードです。

ffmpeg -i input.mov -c:v libwebp_anim -lossless 1 -compression_level 6 -loop 0 -an output.webp
ffmpeg -i input.mov -c:v libvpx-vp9 -lossless 1 -pix_fmt yuva420p -row-mt 1 -an output-HQ.webm
ffmpeg -i input.mov -c:v libvpx-vp9 -pix_fmt yuva420p -b:v 0 -crf 30 -an output.webm

馬 WebP の before / after

画像

馬 WebP:before

画像

馬 WebP:after

馬拡大画像before

馬 WebP[拡大]:before

馬の拡大画像after

馬 WebP[拡大]:after

前に載せていた WebP とどこが変わったのか、一番ジャギーが目立つ部分を拡大して見比べました。同じですね。単なる圧縮ですから。ピクセルの形やアルファの形は変更されない。

ChatGPT が言うには、見た目は同じでも WebP アニメーションとして正しく最適化されるのは「after」の方だけだそうです。以下が、Gemini が教えてくれた「before」のコードです。

ffmpeg -i input.mov -lossless 1 -loop 0 output.webp

Gemini に教えてもらいながら変換しましたが、何度も失敗しました。最終的に、「もっと簡単なコードの方が成功するのでは?」と伝えたところ、 このコードを出してくれました。成功はしましたが、実際には簡易的なコードだったようです。最初から ChatGPT に聞いていれば良かったです。

before と after の違い

項目beforeafter
コーデックFFmpegが自動 WebPアニメ専用
品質ロスレスだけど最適化不足 ロスレス+最適化
容量無駄が出る可能性あり最小になりやすい
再現性不安定安定
正式な作り方

ちなみに、FFmpegでの透過に関しては、ChatGPT、Gemini が出したコードでは成功しませんでした。私の場合は特殊なケースですので仕方がないとは思いましたが、 試しに Copilot に聞いてみたら、一度で成功しました。AI にも得意不得意があるようですね。