簡単に動画を圧縮する方法
技術記
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 が一番劣化が少ないみたい
ffmpeg -i ${変換元ファイル名}.mov -pix_fmt yuv444p ${変換後ファイル名}.mp4
毎回コマンドやオプション書くの面倒なので、関数化してる
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 の場合はちょっと違ってこう
ffmpeg -i $1 -r 24 $2
そして、同じくよく使うので、関数化している
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}
あとはエイリアスで関数をより簡単に使えるようにしておくなどは個人の好みかな 自分はこんな感じ
alias -g m24='_mov2mp4'alias -g m2g='_mov2gif'
圧縮率は結構良いと思う
変換前 | 変換後 | |
---|---|---|
mp4 に変換 | 123.2MB | 12.2MB |
gif | 85MB | 45.9MB |
ただ、動画のファイルサイズというよりも、画面の大きさによって圧縮率が結構変わるような気がする
そこらへんは詳しくないけど、同じようなファイルサイズでも、圧縮率が変わったりするのはそこらへんが関係してるんじゃないかなと思った
変換にかかる時間はファイルサイズにもよるけど、数十秒〜、大きいと 1 分ちょいぐらいかかると思う
他にもっといい圧縮アプリとかあるかもしれないけど、画面の撮影にアプリ使うのも面倒だし、このライブラリを使えば、標準の機能だけでそこそこに使えるので自分は気に入っている
じゃ、今日はこんなところで