SlackやDiscordなどにmp4の動画を共有したいとき、サイズがやたら大きくて困る時がありました。そんなときに役に立つスクリプトを紹介します。
前提条件
圧縮処理にはFFmpegを使用します。FFmpegがインストールされていない場合は、Chocolateyを使って簡単にインストールできます。
# 管理者権限でPowerShellを開き、以下のコマンドを実行
choco install ffmpeg -y
単一の動画ファイルを圧縮する
1つのmp4ファイルを圧縮する場合は、以下のコマンドを使用します:
ffmpeg -i "input.mp4" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "compressed_output.mp4"
実際の使用例:
ffmpeg -i "講義動画.mp4" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "圧縮済み_講義動画.mp4"
フォルダ内の全mp4ファイルを圧縮する
フォルダ内にある全てのmp4ファイルを一括で圧縮する場合は、以下のコマンドを使用します:
Get-ChildItem -Filter "*.mp4" | ForEach-Object { ffmpeg -i $_.FullName -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k ("compressed_" + $_.Name) }
特定のファイル名パターンに一致する動画を圧縮する
例えば、「lecture」という文字列を含むmp4ファイルのみを圧縮する場合:
Get-ChildItem -Filter "*lecture*.mp4" | ForEach-Object { ffmpeg -i $_.FullName -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k ("compressed_" + $_.Name) }
圧縮設定のカスタマイズ
パラメータの説明
-
-c:v libx264
: H.264コーデックを使用 -
-crf 23
: 品質設定(値の範囲: 0-51)- 低い値 = 高品質・大きいファイルサイズ
- 高い値 = 低品質・小さいファイルサイズ
- 18-28が一般的な使用範囲
-
-preset
: エンコード速度と圧縮効率のバランス- 選択肢: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
- 速い = 大きいファイルサイズ
- 遅い = 小さいファイルサイズ
-
-c:a aac
: 音声コーデック -
-b:a 128k
: 音声ビットレート
カスタマイズ例
高品質優先の設定
ffmpeg -i "input.mp4" -c:v libx264 -crf 18 -preset veryslow -c:a aac -b:a 192k "high_quality_output.mp4"
サイズ重視の設定
ffmpeg -i "input.mp4" -c:v libx264 -crf 28 -preset medium -c:a aac -b:a 96k "small_size_output.mp4"
処理速度重視の設定
ffmpeg -i "input.mp4" -c:v libx264 -crf 23 -preset veryfast -c:a aac -b:a 128k "fast_process_output.mp4"