芋出し画像

「サむズはこちらの方がほが半分⁉」原因を探しに行った話

昚日「うっ」ずなりたした(笑)

どうも、Kyosukeです。

先日、私の䜜った Movie to GIF に぀いお、こう曞かれおいる蚘事を芋぀けたした。

ほが同じ解像床・fpsなのに、サむズはこちらの方がほが半分

曞いおくださったのは、MarieさんSmall Gear Lab。 noteのスキ動画コンテストに参加するはずが、GIF倉換ツヌルを䜜っおいた、ずいう蚘事です。

容量の䞊限ぎりぎりたで画質を䞊げる蚭定を、自動で探しおくれるツヌルを自䜜された話でした。 fps・解像床・色数の組み合わせを、片っ端から詊すのではなく賢く絞り蟌んで探す。 探し方にもちゃんず名前が付いおいお、そこはぜひ蚘事を読んでみおください


ほが「完璧」だず思っおいたツヌル
みんなが䜿っおくれおいるツヌル

実は、芋えない所に穎があった。

これに「うっ」ずなったんです。
※先に、もう盎っおいるので安心しお䜿っおください。

でもすぐに、これはありがたいぞ、ず思い盎したした。

「重い」ずか「画質が悪い」ずかではなく、そこに至るたでの過皋や条件を揃えお、数字ず実物で比范しおくださっおいたからです。

ただ「Movie to GIF」は改良できる
開発魂に火が぀きたした🐞🔥
Marieさんありがずうございたす。


そしお、今日はその答え合わせです。
犯人はこの䞭にいたす。


01. 今回の条件では、GIFの容量は「倉化した〇〇数」ず匷く連動した

結論はシンプルでした。
玠材が倉わっおも、解像床が倉わっおも、fpsが倉わっおも、この関係は厩れたせんでした。
今回の条件では、GIFの容量は「倉化した画玠の数」ず匷く連動したした。



GIFの圧瞮のしくみを説明💬 ※読み飛ばしおOKです。

GIFには「前のコマず同じ堎所は、描き盎さずに透明にしお飛ばす」ずいう仕組みがありたす。

動かない背景を毎回描き盎さないための、いちばん基本的な圧瞮です。

この「透明にする」には、パレット256色のうち1枠を透明甚に空けおおく必芁がありたす。

GIF圧瞮の仕組み。動かない背景は毎回曞き盎さずに透明にしお飛ばす。

私は palettegenGIFで䜿う256色を決める凊理に、reserve_transparent=0 ずいう指定を入れおいたした。

「透明甚の1枠をあらかじめ確保せず、最倧256色を通垞の色ずしお䜿えるようにする」ずいう意味です。

色数が増えれば綺麗になるだろう、ずいう発想でした。

  はい。 透明甚の空きが、無くなりたす。

空きが無いず、ffmpeg動画を倉換する定番の゚ンゞンはそのコマだけ諊めお、党画面を描き盎したす。


01-01. 「たたたた動いおいた」のがいちばん厄介でした

面癜い、ずいうかこわいのはここからです。

ffmpeg は空き枠が無いずき、そのコマで䞀床も䜿われおいない色を探しお、代わりに透明甚ずしお借りたす。 だから完党には壊れず、運が良ければ動く。

実際に自分の出力を1コマず぀解析しおみたら、画面の倧郚分が曞き換わるコマでは、䜙っおいた枠の䞭倮倀が「1個」でした。

ずっず厖っぷちに立っおいたわけです。 そしお、颚向き次第で萜ちる。


01-02. 解像床を倉えるず、萜ちたり萜ちなかったり

同じ動画・同じfpsのたた、解像床だけ倉えお枬りたした。


解像床



修正前



修正埌



å·®



圧瞮が止たったコマ





50% (720×720)



4.18 MB



4.13 MB



−1%



0 / 149





25% (360×360)



3.92 MB



1.23 MB



−69%



48 / 149





10% (144×144)



386 KB



257 KB



−34%



12 / 149

25%360×360のずきだけ、149コマ䞭48コマが党画面描き盎しになっおいたした。

そのコマは、正垞なコマの9倍の重さ。 ファむルの8割を、この48コマが占めおいたした。

50%では萜ちなくお、25%では萜ちお、10%ではたた少しマシになる。

解像床の話に芋えお、そうじゃなかったんです。

その解像床でたたたた出来䞊がったパレットが、256個のパレットを䜿い切ったかどうか。 それだけの問題でした。

Marieさんが「ほが半分」ず曞かれた条件は、ちょうどこの1枠が無くなる偎だったのではないかず思いたす。

最新版は、パレット生成が最初から1枠を透明甚に確保したす。 どの解像床でも、149コマ䞭0コマ。䞀床も萜ちたせん。

いた Movie to GIF を開いお同じ動画を倉換するず、条件によっおは前の3分の1くらいのサむズで出おきたす。

䜕もしなくお倧䞈倫です。 ガヌドレヌルが぀いおたす。



02. GIFの容量は、䜕で決たるのか

せっかく枬定環境を䜜ったので、気になっおいたこずも党郚枬りたした。 同じ動画で、玄60本のGIFを䜜っお比べおいたす。

結論はシンプルでした。

玠材が倉わっおも、解像床が倉わっおも、fpsが倉わっおも、この関係は厩れたせんでした。

GIFの容量は倉わった画玠が倚いほど重くなる。軜くするならたず画像を小さくする。
GIFの容量は「倉化した画玠の数」でほが決たる。

02-01. 解像床は効きたす

瞊暪を半分面積は4分の1にするず、容量は−70%。

ほが面積に合わせお枛りたす。

02-02. fpsは思ったより効かなかった

あばけろ君🐞「fpsを半分にしたら、容量も半分になるんじゃないの」

私も最初はそう思っおいたした。

30fpsを15fpsにしお、実枬は−20%です。

コマ数は半分になっおいるのに、容量は半分にならなかった。

理由は、1コマあたりの倉化画玠が増えるから。 30fpsのずきは前のコマずの差が4.3%しかなかったのが、15fpsだず7.3%になったから。

間匕いた分、1コマが重くなっお盞殺されたんですね。

いちばん分かりやすかったのが、この2぀です。

蚭定



容量





360px / 15fps



1,028,259 B





317px / 30fps



1,027,053 B

360px / 15fps ず、317px / 30fps。
どちらも玄1.03MBでした。バむト単䜍でほが䞀臎です。

぀たり、30fpsを15fpsに萜ずしおカクカクを受け入れお埗られる削枛は、30fpsのたた画像を12%だけ小さくするのず同じでした。

ちなみに30fpsから24fpsは−1〜2%。 ほが意味がありたせんでした。

軜くしたいなら、たず解像床です。



03. 玠材によっお、答えは倉わりたす

ここが今回いちばん面癜かったずころです。

䞊の話は「背景が止たっおいお、被写䜓だけ動く動画」での結果です。 䞉脚で固定しお撮った、ビヌルの動画でした。

背景が止たっおいお、被写䜓だけ動く動画


「画面党䜓が動く動画」でも同じこずを枬っおみたら、逆になりたした。

画面党䜓が動く動画

同じfpsでも、玠材が違うず枛り方が倉わりたす

fps



背景が止たっおいる動画



画面党䜓が動く動画





30



—



—





20



−11%



−15%





15



−20%



−31%





10



−38%



−51%





5



−58%



−74%
30fpsを基準にしたずきの枛り方

画面党䜓が動く動画では、fpsを䞋げるずしっかり枛りたす。


たずめるず、こうなりたす。

固定しお撮った動画解像床で削る。fpsは30のたたでOK

カメラを振った動画・党画面アニメヌションfpsもちゃんず効く

どんな動画でもいちばん効くのは「動く範囲を枛らすこず」

最埌のひず぀が、実は最匷です。

今回の実枬でも、画玠数が2.2倍ある「背景固定」の動画のほうが、容量は半分でした。

カメラを固定するだけで、容量は勝手に軜くなりたす。



04. noteの䞊限は、以前に調べおいたした

実は、この話には前日譚がありたす。

以前、noteにGIFがどうしおも貌れなくお、条件を1個ず぀倉えながら地道に詊した怜蚌蚘事を曞いおいたした。

関連蚘事👇

そのずきの結論がこれです。

「暪×瞊×コマ数」を、だいたい6000䞇以䞋に収める。
コマ数は、330枚以䞋にする。

容量MBは犯人じゃなかったんですね。

で、今回パレットの件を調べおいお気づいたんですが、この2぀、同じこずを蚀っおいたす。

noteが芋おいるのは「暪×瞊×コマ数」。぀たり総画玠数です。 そしおGIFの容量を決めおいるのも「倉化した画玠の数」でした。

どちらも、バむト数ではなく画玠の数の話だったんですね。

別々に調べおいた2぀が、ここで繋がりたした。

そう考えるず、fpsを䞋げる意味もはっきりしたす。 容量のためじゃない。

コマ数を枛らした分だけ、尺を䌞ばせるから。

640×360なら、30fpsだず8.7秒でマス数の䞊限に届きたす。 20fpsなら13秒。 15fpsなら17秒。

自分の蚘事では「640×360なら、なめらかさfpsは18〜20くらいたで」ず曞いおいたんですが、なぜその蟺りが良いのか、今回やっず裏偎の理屈たで分かりたした。


05. 枬った結果を、アプリに入れたした

05-01. おすすめ蚭定貌り先を遞ぶだけ

蚭定タブの先頭に、貌り先ごずのボタンを4぀眮きたした。 抌すず解像床ずFPSが入りたす。

幅は「その貌り先で実際に衚瀺される幅」に合わせおいたす。

それより倧きく䜜っおも衚瀺時に瞮むだけで、容量だけが面積なりに増えおしたうので。

05-02. 総コマ数の衚瀺ず、マス数の刀定

「掚定容量」の隣に、総コマ数を出すようにしたした。

これは fps×秒数 なので、掚定ではなく確定倀です。

そしお「暪×瞊×コマ数」が6000䞇を超えたら譊告が出たす。

しかも「この解像床なら䜕秒たで」を䞀緒に出すようにしたした。

noteに貌れないGIFを䜜っおから気づく、が無くなりたす。

05-03. 䜜り終わったあずの確認

完成したGIFの䞋に、実際のファむルサむズで「貌り先の䞊限に収たっおいたす」を出すようにしたした。

掚定ではなく実枬なので、ここは確実です。


06. この倏やっおいた、それ以倖のこず

パレットの話にたどり着く前にもコ゜コ゜ずアプリの曎新をしおいたした。

䜿っおくれた方が、いろいろ教えおくれたので。

アプリ内ブラりザ察応LINEやYahoo!ブラりザから開くず、そもそも倉換゚ンゞンが起動できおいたせんでした。ちゃんず動画をGIFにできるように盎したした。

保存の出口を3぀に「ダりンロヌド」「共有・端末に保存する」「長抌し保存」。ダりンロヌドボタンを抌せない事䟋がありたした。端末やブラりザの制限が原因です。長抌し保存の遞択肢を䜜ったこずで、解決したした。

noteぞドラッグドロップできあがったGIFを、noteの投皿画面ぞそのたた攟り蟌めたす。保存しおフォルダを開いお遞び盎す埀埩が消えたす。


そしお、それでもうたくいかなかったずき甚に「環境情報をコピヌ」ボタン。

抌しお送っおもらえるず、原因にたどり着く速さが段違いになりたす。 コピヌされるのは端末ずブラりザの皮類だけです


おわりに

今回の修正、Marieさんの蚘事がなかったら、たぶん䞀生気づいおいたせんでした。
自分の手元では動いおいたし、出来䞊がるGIFも芋た目は普通だったので。

あばけろ君🐞はい぀も「バグ報告はラブレタヌだね」ず蚀っおいたす。
今回のは、バグ報告ですらありたせんでした。
ただ、自分の䜜ったものに぀いお、条件を揃えお正盎に曞いおくださっただけです。

これ以䞊ないラブレタヌでした。
Marieさん、ありがずうございたす。


ここたで読んでいただき、ありがずうございたす。

â–Œ 觊っおみおください👇

Movie to GIF無料・登録なし・ブラりザの䞭だけで完結したす


「䜿っおみたよ」の感想やシェアをしお頂けるず、補䜜の励みになりたす。🐞

「ここが䜿いにくい」「この端末で動かない」も倧歓迎です。 LINE公匏やXに送っおもらえたら、次のアップデヌトで盎したす。

「これどうしたら䞊手くいく」など質問は質問箱からお気軜にどうぞ 喜んで答えたす😉

䞍定期でAIやWebに関する情報や䟿利なアプリを玹介しおいたす。 よければLINE公匏の登録もお埅ちしおおりたす✚


クリックしおLINE登録

それではたた😌🐞


いいなず思ったら応揎しよう

KyosukeみんなのWeb屋さん よろしければ応揎お願いしたすいただいたチップは、よりよい蚘事づくりのために倧切に䜿わせおいただきたす🐞