MP4とかWEBMの動画ファイルからMP3にサムネイル付きで変換させるシェルスクリプト

2 min read

thum.png

こんにちは、無能です。

ffmpegでそのままビデオからオーディオファイルに変換させるとサムネ失念してしまうのでシェルで書いてみました。

変換とその後サムネを出力して結合、いらんもんはその後消して名前を戻すだけ。

#!/bin/bash

# それぞれのディレクトリパス
input_dir="/media/m"
output_dir="/media/m/mp3"

# 出力ディレクトリが存在しない場合は作成する
mkdir -p "$output_dir"

# フォーマット指定※現状mp3への変換のみですがやる気が出たらその他フォーマットの分岐入れる為に一応。。。
in="mp4"
out="mp3"

# ディレクトリ内全てに適応させる
for file in "$input_dir"/*.${in}; do
   # baseを指定
   base=$(basename "$file" .${in})

# MP3のパス指定
   output="${output_dir}/${base}.${out}"

# サムネイルのパス指定
   thumbnail="${output_dir}/${base}_thumbnail.jpg"

# ビデオファイルからmp3に変換
   ffmpeg -i "$file" -vn -acodec libmp3lame -qscale:a 2 "$output"

# 映像ファイルからサムネイル抽出
   if ffmpeg -i "$file" -an -vframes 1 -q:v 2 "$thumbnail" -y; then
       echo "Thumbnail extracted for $base"

ffmpeg -i "$output" -i "$thumbnail" -map 0 -map 1 -c copy -id3v2_version 3 -metadata:s:v title="Alb
um cover" -metadata:s:v comment="Cover (front)" -y "${output_dir}/${base}_with_thumbnail.${out}"
       rm "${output_dir}/${base}.${out}"
       rm "${output_dir}/${base}_thumbnail.jpg"
       mv "${output_dir}/${base}_with_thumbnail.${out}" "${output_dir}/${base}.${out}"

else
       echo "No found for $base"
   fi
done

実行権限を与えて

chmod +x convert.sh

SSH接続していたのでセッション切ってもバックグラウンドでも動くようにする

nohup ./convert.sh &

おわり。