13 Oct 2025

スマホで撮影した高品質mp4をベースラインmp4に変換するシェルスクリプト

 Geminiに書いてもらったのを修正した。


#!/bin/bash

##################################################

# Geminiに書いてもらったのを修正。

      # mp4ディレクトリに変換後のmp4が出力される。

# 使い方はmp4のあるディレクトリにこのシェルを置いて実行するだけ。

# ./mp4toLowmp4.sh

##################################################


# 出力先フォルダの定義

OUTPUT_DIR="mp4"


# 出力先フォルダが存在しない場合は作成

if [ ! -d "$OUTPUT_DIR" ]; then

    mkdir -p "$OUTPUT_DIR"

    echo "出力フォルダ $OUTPUT_DIR を作成しました。"

fi


# 【重要】処理対象のファイルを現在のディレクトリ内のものに限定するため、

#          カレントディレクトリのmp4ファイルを変数に格納します。

#          (ls | grep を使った処理は、新しく作られたフォルダ内のファイルを含めないため安全です)

MP4_FILES=$(ls -1 *.mp4 2>/dev/null)


if [ -z "$MP4_FILES" ]; then

    echo "処理対象の .mp4 ファイルが見つかりませんでした。"

    exit 0

fi


# 格納したファイルリストに対してループを実行

for input_file in $MP4_FILES; do

    # 入力ファイルが出力フォルダそのものでないことを確認(念のため)

    if [ "$input_file" == "$OUTPUT_DIR" ]; then

        continue

    fi

    

    #以下をコメントアウト部分を変更。出力されるファイル名は入力時と同じものとする。

    # 【変更点1】拡張子なしのファイル名を取得 (元のファイル名に 'Low' を付与するため)

    #filename_base=$(basename -- "$input_file" .mp4)

    

    # 【変更点2】出力ファイル名を 'mp4/元のファイル名Low.mp4' に設定

    #           (元のファイル名と同じ名前にすると上書きの可能性があるため、ファイル名を変更)

    #output_file="${OUTPUT_DIR}/${filename_base}Low.mp4"

    

    output_file="${OUTPUT_DIR}/${input_file}"


    echo "--- 変換中: $input_file -> $output_file ---"


    # FFmpegコマンドでBaseline Profile変換と44.1kHzへの音声変換を実行

    ffmpeg -i "$input_file" \

           -c:v libx264 -profile:v baseline -level:v 3.0 -pix_fmt yuv420p -crf 23 \

           -c:a aac -ar 44100 -b:a 128k \

           "$output_file"


    if [ $? -eq 0 ]; then

        echo "完了: $output_file"

    else

        echo "エラー: $input_file の変換に失敗しました。"

    fi

done


echo "--- 全てのmp4を標準レベルに変換終了 ---"