簡単に動画を圧縮する方法

技術記

2021/02/10


こんにちは

あき@Akii0205です

今回は

  • mov ファイルを mp4 ファイルに出力する方法

  • mov ファイルを gif に出力する方法

の2つを紹介します


Mac でスクショした動画や iPhone で撮った動画は Mov ファイルで、かなりでかいので、圧縮するのにいつも検索していた気がする

拡張子も mp4 の方が汎用性が高いので、サイズ圧縮して、mp4 にする方法がないかなと思っていたら、

便利なライブラリを見つけた

FFmpegというもの

mov ファイルだけでなく、様々な拡張子を扱うことができるようです。

まぁ今回自分の用途としては、PC もしくは iPhone で撮った mov ファイルを圧縮する、または GIF ファイルにする、ということがしたかったので、以下のコマンドを使ってる

mov => mp4 pix_fmt オプションは名前の通り、動画の粗さを決めるものですが、yuv444p が一番劣化が少ないみたい


BASH
ffmpeg -i ${変換元ファイル名}.mov -pix_fmt yuv444p ${変換後ファイル名}.mp4

毎回コマンドやオプション書くの面倒なので、関数化してる


BASH
function _mov2mp4() {
if [ $# != 2 ]; then
echo '引数の数が違うよ'
return
fi
if [[ ! $1 =~ .*\.mov$ ]]; then
echo '第1引数はmovふぁいるにしてね'
return
fi
if [[ ! $2 =~ .*\.mp4$ ]]; then
echo '第2引数はmp4ふぁいるにしてね'
return
fi
ffmpeg -i $1 -pix_fmt yuv444p $2
}

mov => gif gif の場合はちょっと違ってこう


BASH
ffmpeg -i $1 -r 24 $2

そして、同じくよく使うので、関数化している


BASH
function _mov2gif() {
if [ $# != 2 ]; then
echo '引数の数が違うよ'
return
fi
if [[ ! $1 =~ .*\.mov$ ]]; then
echo '第1引数はmovふぁいるにしてね'
return
fi
if [[ ! $2 =~ .*\.gif$ ]]; then
echo '第2引数はgifふぁいるにしてね'
return
fi
ffmpeg -i $1 -r 24 $2
}

あとはエイリアスで関数をより簡単に使えるようにしておくなどは個人の好みかな 自分はこんな感じ


BASH
alias -g m24='_mov2mp4'
alias -g m2g='_mov2gif'

圧縮率は結構良いと思う


変換前変換後
mp4 に変換123.2MB12.2MB
gif85MB45.9MB

ただ、動画のファイルサイズというよりも、画面の大きさによって圧縮率が結構変わるような気がする

そこらへんは詳しくないけど、同じようなファイルサイズでも、圧縮率が変わったりするのはそこらへんが関係してるんじゃないかなと思った

変換にかかる時間はファイルサイズにもよるけど、数十秒〜、大きいと 1 分ちょいぐらいかかると思う

他にもっといい圧縮アプリとかあるかもしれないけど、画面の撮影にアプリ使うのも面倒だし、このライブラリを使えば、標準の機能だけでそこそこに使えるので自分は気に入っている


じゃ、今日はこんなところで



WRITTEN BY

40ヶ国渡航した難聴エンジニア。 趣味はピアノ、語学学習、サッカー、旅行

Tokyo, Shibuya