Command line video

動画作りに重宝する tips 集

動画をくっそ軽くする

ffmpeg -i source.mov -vcodec libx265 -crf 28 output.mp4

28 がデフォルトで(変なの)数を落とすと画質が上がり容量が増える。

200Mb の mov が 18Mb になったりして楽しい。ただし QuickTime でみられなくなるので、 vlc では余裕。それがなぜか嫌ならば、-vcodec libx264 -crf 24 にすると良い。

最近の Mac だと、エンコード用のチップがあるので、それをつかう場合は、

ffmpeg -i source.mov -vcodec libx265 -crf 28 output.mp4
ffmeg -i source.mov -vcodec h264_videotoolbox -crf 28 output.mp4

その時に、画質がすこし荒れるので、crf 値はすこし低めのほうが良い。

とすると、CPU つかわないのに、もうちょっとスピードがでる。

最近の使い方

大きさと fps を揃えて、圧縮する。

ffmpeg -i in.mov -vf scale=1920:-1,fps=30  -vcodec h264_videotoolbox -q:v 65 out.mp4

bitrate を指定する方法もあるんだろうけど、 -q:v 65 の方が直感的?

画像のシークエンスから軽めの gif を作る

プレゼン用にあらーい gif を使うことがある。

元の連番画像は Finalcut なり、Premier なりで書き出す。

それができたら、 imagemagick で対応する。このコマンドは本当にえらい。

convert -loop 0 -dispose previous -layers 'optimize' -ordered-dither o4x4 -resize 560 -fuzz 10% -quality 80 frame-*.png reduced.gif

この-ordered-dither は値が小さいほど粗い、o4x4 はスライドの背景に使える程度、ちゃんと見せる場合は o8x8 か o16x16 の方が良さそう。このオプション他にも沢山ある

動画から gif を作る

ffmpeg -ss 00:02:14.000 -i outcome.mov -pix_fmt rgb24 -r 10 -s 640x480 -t 00:00:10.000 output_outcome.gif

-ss がスタート、-s でサイズ。

そんで、convert で optimize する(ややおまじない的)

convert -layers Optimize output_outcome.gif optimized_outcome.gif

mp4 から mov

twitch とか youtube の自分の動画を再編集するときに、Final Cut では何故だか開けない mp4 を落としたときに、mp4 -> mov にしたい。何も考えずにネットで検索すると、怪しい変換サイトやソフトを売り付けてくるサイトが検索の上位に引っかかる。

ffmpeg -i input.mp4 -acodec copy -vcodec copy -f mov output.mov

で変換すればよし

連番画像から mp4

h.264 コーデック、yuv420p はよくわかりません。出力は 29.94/fps(だっけ?)要するに ntsc 形式。-r ntsc を -framerate 30 とかにすればそれ相応の対応をしてくださる。

ffmpeg -r ntsc -i frame_%04d.png -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

こんな簡単なことが FinalCutPro ではできない事はなんだけど、全然直感的でない。そのために blender でもできそうだとか、やれやっぱり AfterEffects に戻るしかないのかしらと、悩んでいたけど、ffmpeg がまたもや助けてくれた。Adobe の CC、自分では絶対払いたくないけど、FCP もちょっとどうなのこれ。Vegas とかよかったな。まだあるのかなあれ。

Date: 2020-06-29 08:57