macの画面録画でできたMOVをMP4に変換したい
macで画面録画をするとmovで保存されます。
mac上で動画単体で使う分には問題ないのですが、html内に挿入したり、他のプラットフォームと共有しようとするとちょっと不便です。
あと、Retinaディスプレイのmacで画面録画をするとびっくりするくらい高解像度で録画されていたりします。私は画質と処理の軽さのバランスから720Pが一番好きなので720Pに変換したい。
そこで、ffmpegを使ってmovを720Pのmp4に変換するコマンドをChatGPTに教えてもらいました。
input.movをoutput.mp4に変換
ffmpeg -i input.mov -vf "scale=-1:720" -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k output.mp4
ChatGPTによる引数の説明を掲載しておきます。
このコマンドの各部分は以下のように機能します:
ChatGPTによる説明
-i input.mov
:変換する入力ファイル(ここではinput.mov)を指定します。-vf "scale=-1:720"
:ビデオフィルターを使用して、出力の解像度を720pに設定します。-1はアスペクト比を維持するために使用され、横の解像度は自動的に計算されます。-c:v libx264
:ビデオのコーデックとしてlibx264(H.264)を使用します。-preset slow
:エンコードの品質とエンコード時間のバランスを取るためのプリセットです。slowは品質を優先しますが、より速いエンコードが必要な場合はfastなど他の値に変更できます。-crf 23
:ビデオの品質を指定します。CRF(Constant Rate Factor)の値が低いほど、品質が高くなりますが、ファイルサイズも大きくなります。デフォルトは23で、一般的な使用に適しています。-c:a aac
:オーディオコーデックとしてAACを使用します。-b:a 128k
:オーディオのビットレートを128kbpsに設定します。output.mp4
:出力ファイル名としてoutput.mp4を指定します。
720Pより小さい動画は解像度を変更しないようにしたバージョン
ffmpeg -i input.mov -vf "scale='min(iw,1280)':'min(ih,720)'" -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k output.mp4
ChatGPTによる説明
scale='min(iw,1280)':'min(ih,720)'
: この式は、入力動画の幅(iw)と高さ(ih)がそれぞれ1280ピクセルと720ピクセルを超えないようにします。もし入力動画のどちらかの寸法がこれらの値より小さい場合、その寸法は変更されません。これにより、元の動画が720pより小さい場合には、そのサイズが維持されます。
このコマンドラインの他の部分は、ビデオとオーディオのエンコード設定を指定します。これにより、元の動画が720p以下の場合にサイズがそのまま維持され、720pより大きい場合には720pに縮小されるMP4ファイルが作成されます。
ただし、scaleフィルターのこの使用法では、元の動画が16:9のアスペクト比から大きく逸脱している場合、出力のアスペクト比が期待と異なる可能性があることに注意してください。必要に応じて、アスペクト比を維持するための追加のオプションやフィルターを検討することが重要です。
ファイル名を引数として与えられるシェルスクリプト
#!/bin/bash
# すべての引数に対してループ
for input_file in "$@"
do
# 入力ファイル名から拡張子を除いた部分を取得
base_name=$(basename "$input_file" .mov)
# 出力ファイル名を定義(元のファイル名+新しい拡張子)
output_file="${base_name}.mp4"
# ffmpegを使用して動画を変換
ffmpeg -i "$input_file" -vf "scale='min(iw,1280)':'min(ih,720)':force_original_aspect_ratio=decrease" -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k "$output_file"
done