特定の曲の長さの曲のmp3コレクションを検索する

特定の曲の長さの曲のmp3コレクションを検索する

特定の長さの曲のmp3ファイルディレクトリを検索するにはどうすればよいですか?前任者:

findmp3 -min=03:00 -max=03:15 /music/mp3/ebm/

emb/曲の長さが3分から3分15分の間のディレクトリ内のすべてのmp3ファイルを返します。

私はLinux Mint、Ubuntu、CentOSを使用しています。

ベストアンサー1

まずインストールしてくださいmp3info。ディストリビューションリポジトリに存在する必要があります(私は知らなかったので、ある種のLinuxを使用しているとします)。 Debian ベースのディストリビューションがある場合は、次のものを使用できます。

sudo apt-get install mp3info

mp3infomusicインストールが完了したら、次のコマンドを使用して特定の長さの曲のディレクトリを検索できます。

find music/ -name "*mp3" | 
  while IFS= read -r f; do 
   length=$(mp3info -p "%S" "$f"); 
   if [[ "$length" -ge "180" && "$length" -le "195" ]]; then 
     echo "$f"; 
   fi;  
done

上記のコマンドはmusic/mp3ファイルを検索し、長さが180秒(3:00)以上195秒(3:15)以下の場合は名前と長さを出力します。man mp3info出力形式の詳細については、参考資料を参照してください。

MM:SS形式で時間を入力すると、状況はより複雑になります。

#!/usr/bin/env bash

## Convert MM:SS to seconds.
## The date is random, you can use your birthday if you want.
## The important part is not specifying a time so that 00:00:00
## is returned.
d=$(date -d "1/1/2013" +%s);

## Now add the number of minutes and seconds
## you give as the first argument
min=$(date -d "1/1/2013 00:$1" +%s);
## The same for the second arument
max=$(date -d "1/1/2013 00:$2" +%s);

## Search the target directory for files
## of the correct length.
find "$3" -name "*mp3" | 
  while IFS= read -r file; do 
   length=$(mp3info -p "%m:%s" "$file"); 
   ## Convert the actual length of the song (mm:ss format)
   ## to seconds so it can be compared.
   lengthsec=$(date -d "1/1/2013 00:$length" +%s);

   ## Compare the length to the $min and $max
   if [[ ($lengthsec -ge $min ) && ($lengthsec -le $max ) ]]; then 
       echo "$file"; 
   fi; 
done

上記のスクリプトを別の名前で保存し、次のfindmp3ように実行します。

findmp3 3:00 3:15 music/

おすすめ記事