# [メタ情報] # 識別子: 動画を360p音質キープに変換_exe # 補足: # [/メタ情報] 要約: このワークフローは、入力された動画ファイルを一括して360p解像度に変換するシェルスクリプトです。入力された各ファイルについて、新しいファイル名(元のファイル名に`_360p`を付加)を生成し、動画処理を行います。 動画はアスペクト比を保ちつつ、高さが360ピクセルになるようにスケーリングされます(または幅が360ピクセルになるよう調整され、もう一方が-2で自動設定)。映像コーデックにはH.264(libx264)を使用し、品質はCRF 23、エンコード速度は`veryfast`プリセット、ピクセルフォーマットは`yuv420p`が設定されています。 音声に関しては、`ffprobe`で元の音声コーデックとビットレートを判定します。もし元の音声がAACであれば`copy`モードで劣化なく複製され、それ以外のコーデックであれば、元のビットレート(取得できない場合は256kbps)に近い値でAAC形式に再エンコードされます。最終的に、データサイズの最適化とWeb再生に適した形式で360p動画が出力されます。 動画を360p音質キープに変換.workflow 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 ```