yt-dlpで音声ファイルだけをffmpegのffprobeで判定し、別ディレクトリに移動させるシェルスクリプト

2 min read

ffprobe.png

こんにちは、無能です。

yt-dlpでお気に入りYoutube動画を完全自炊化しました。

しかし、保存の際にmusic.youtube.comの判定を入れていないので全てが同じディレクトリに入っています。
これだと音楽等も混ざってとても見づらいのでどうにかフォルダを分別する方法を思いつきました。


ということで、普通の動画ファイルか音楽ファイルかは同じ拡張子.mp4だと区別も出来ません。
ファイルサイズや長さ等で判定しても、正確性があまりにもありません。

そこで、縦横比で判定すればよいことに気がつきました。
なんとffmpegで縦横比が判定できるという事で以下のコマンドで確認します。

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "音楽ファイル.mp4"

> 1080x1080

ということで1080の正方形らしい。

つまりはこの値が出たファイルを別ディレクトリに移動させてしまえばよいだけ。
いやー、本当にffmpegって最高ですね。こんな機能もあるとは・・・。恐るべし。

ではシェルスクリプトを以下のように記載しました。

vi mvfile.sh

#!/bin/bash

# ディレクトリのパスを設定
input_dir="/media/aaa"
output_dir="/media/bbb"

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

# ファイルごとに処理
for file in "$input_dir"/*.mp4; do
# ffprobeを使用して動画の縦横比を取得
    ratio=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 "$file")

    # 縦横比が1080x1080の場合はファイルを出力ディレクトリに移動
    if [ "$ratio" == "1080x1080" ]; then
        mv "$file" "$output_dir"
        echo "Moved $file to $output_dir"
    fi
done

それで実行権限を与えます。

chmod +x mvfile.sh

で、実行

./mvfile.sh

これで移動されている出力が出れば成功です。
特に動画ファイル保存に使っているディレクトリに対して上記スクリプトをcronジョブとして与えてあげてもいいかもしれませんね。

それでは。

またよろしくお願い致します。

※どうやら、若干ずれているサムネイルも多いのでサムネイル判定を以下に変えました。

if [[ "$ratio" == @(10[78][0-9]x10[78][0-9]|7[12][0-9]x7[12][0-9]) ]]; then