# [メタ情報] # 識別子: iPhoneのmov動画を360p音質キープに圧縮する_exe # システム名: iPhoneのmov動画を360p音質キープ、に圧縮する # 技術種別: Misc # 機能名: 基本的には音質は256kbをmaxとするので、容量はさほど大きくない。音楽再生専用動画を360pで運用する場合を想定。 # 使用言語: シェルスクリプト # 状態: 実行用 # [/メタ情報] 要約:Automatorで実行するシェルスクリプト。指定した動画(mov mp4)を順に処理し、360pに縮小して再出力する。音声コーデックとビットレートをffprobeで取得し、AACの場合は再エンコードせずコピー、その他はAACで再エンコードする。ビットレートが不明な場合は256kを設定。ffmpegでH.264圧縮・高速起動対応動画を生成する。 Automator シェルスクリプトを実行 /bin/bash 入力の引き渡し方法:引数として for f in "$@"; do dir=$(dirname "$f") filename=$(basename "$f") name="${filename%.*}" ext="${filename##*.}" output="${dir}/${name}_360p.${ext}" # 音声のコーデック名とビットレートを取得 acodec=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name \ -of default=nw=1:nk=1 "$f") abps=$(ffprobe -v error -select_streams a:0 -show_entries stream=bit_rate \ -of default=nw=1:nk=1 "$f") # ビットレート(kbps)に整形(取得できない時は 256k を既定) if [ -n "$abps" ] && [ "$abps" -gt 0 ]; then ab="$(( (abps + 500) / 1000 ))k" else ab="256k" fi # AACならコピー、AAC以外なら元ビットレート相当でAACへ再エンコード if [ "$acodec" = "aac" ]; then aopts="-c:a copy" else aopts="-c:a aac -b:a $ab" fi /usr/local/bin/ffmpeg -y -i "$f" \ -vf "scale=iw*min(1\,360/ih):-2" \ -c:v libx264 -crf 23 -preset veryfast -pix_fmt yuv420p \ $aopts -movflags +faststart \ "$output" done