Askthewind’s diary

個人的なメモ

FFmpegでpng画像1枚からズームするgifアニメーションを作る

Creating a GIF animation from one PNG

 

From upper left

f:id:Askthewind:20181214214613g:plain

左上からズームアップ(デフォルト)

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d='25*4':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d='25*4':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 

画像をズームインするには"zoompan"フィルタを使用します。"zoompan"フィルタでは、フレームごとに評価し、ズームインする距離を設定するzオプションが使用できます。

zoompan=z='zoom+0.0015'で各フレームの前のズーム値に0.0015を加えて15%拡大アニメーションを設定します。

:d='25*4'でエフェクトの持続時間(デフォルトの25フレーム/秒で4秒)の指定

:s='480*270'で出力サイズ(width*heigt)を指定します。

split[a],palettegen,[a]paletteuseでパレットを最適化しています。

 

From upper right

f:id:Askthewind:20181214221449g:plain

右上からズームアップ

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d='25*4':x='iw-(iw/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d='25*4':x='iw-(iw/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
From lower left

f:id:Askthewind:20181214224412g:plain

左下からズームアップ

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:y='ih-(ih/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:y='ih-(ih/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
From lower right

f:id:Askthewind:20181214225727g:plain

右下からズームアップ

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:x='iw-(iw/zoom)':y='ih-(ih/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:x='iw-(iw/zoom)':y='ih-(ih/zoom)':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
From center position

f:id:Askthewind:20181214231249g:plain

真ん中からズームアップ

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=z='zoom+0.0015':d=25*4:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
loop

f:id:Askthewind:20181214231936g:plain

ループ

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan=d=25*4:z='if(gte(zoom,2)+eq(ld(1),1)*gt(zoom,1),zoom-0.04*st(1,1),zoom+0.04+0*st(1,0))':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan=d=25*4:z='if(gte(zoom,2)+eq(ld(1),1)*gt(zoom,1),zoom-0.04*st(1,1),zoom+0.04+0*st(1,0))':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
From center 1.2 to 1

f:id:Askthewind:20181215002009g:plain

真ん中からズームダウン

ffmpegでプレビュー

ffmpeg -i input.png -filter_complex "zoompan='if(eq(on,1),1.2,zoom-0.0015)':d=25*4:x='(iw-iw/zoom)/2':y='(ih-ih/zoom)/2':s='480*270',split[a],palettegen,[a]paletteuse" -f matroska - | ffplay -i -

ffmpegでコンバート

ffmpeg -i input.png -filter_complex "zoompan='if(eq(on,1),1.2,zoom-0.0015)':d=25*4:x='(iw-iw/zoom)/2':y='(ih-ih/zoom)/2':s='480*270',split[a],palettegen,[a]paletteuse" "output.gif"
 
 
 
参考にさせていただきました。Specal thanks