GNU/Linux >> Linux の 問題 >  >> Ubuntu

シェルでMP3タグを読む方法は?

シェルからファイルのmp3タグを読み取る方法はありますか?次のようなもの:
mp3tags MyFile.mp3 author mp3ファイルの作成者タグを出力する必要があります。

ベストアンサー

ffprobeを使用することもできます これはffmpegの一部です 。

sudo apt-get install ffmpeg
ffprobe file.mp3

トラックの長さなどの他の情報が必要ない場合は、出力をgrepと組み合わせることができます:

ffprobe file.mp3 2>&1 | grep -A90 'Metadata:'

または、作成者のみを取得するには:

ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 file.mp3

format_tags=title,albumのように、他のタグをカンマで区切って選択できます。 。

フォルダ内のすべてのmp3ファイルでキーワードを検索したかった。このフォルダーには486個のファイルが含まれていたため、ここで説明したソリューションのどれが最速であるかを知ることが興味深いものになりました。これが私が使用したループです:

# sudo apt-get install ffmpeg lltag eyed3 mp3info id3v2 libimage-exiftool-perl libid3-tools id3tool

keyword='fill_me_in'

getTitleFF()   { ffprobe "$1" 2>&1 | sed -E -n 's/^ *title *: (.*)/1/p'; }
getTitleLL()   { lltag --show-tags title "$1" | sed -nE 's/^  TITLE=(.*)/1/p'; }
getTitleEyed() { eyeD3 2>&1 "$1" | sed -n 's|x1b[[0-9;]*mtitle[^:]*: ||p'; }
getTitleInfo() { mp3info -p %t "$1"; }
getTitleId3()  { id3v2 -l "$1" | sed -nE 's/^(TIT2 ([^)]*)|Title *): (.*)/2/p'; }
getTitleExif() { exiftool -title -b "$1"; }
getTitleId3i() { id3info "$1" | sed -nE 's/^=== TIT2 ([^)]*): //p'; }
getTitleTool() { id3tool "$1" | sed -n 's|^Song Title:t||p'; }

for prog in FF LL Eyed Info Id3 Exif Id3i Tool; do
    echo "=== getTitle${prog} ==="
    time 
    for file in *.mp3; do 
        if "getTitle${prog}" "$file" | grep -q "$keyword"; then 
            echo "$file"
        fi
    done
done

注:

  • lltag およびmp3info 私が使用していたファイルにはID3v2タグが含まれていたため、タイトルが見つかりません。@ s-prasanthによるコメントを参照してください:シェルでmp3タグを読み取る方法は?
  • eyeD3 カラーコード(太字)を使用しているため、プログラムで使用するのは問題があります。
  • eyeD3 また、id3v2 (ただし、ID3 v1タグの場合のみ)タイトルとアーティストを同じ行に返すため、さらに複雑になります。したがって、getTitleEyed 時にはgetTitleId3 タイトルとアーティストの両方を返すので、これらの機能をコピーして貼り付けないでください。
  • id3v2であるため、getTitleId3はID3v2タグに対してのみ機能します。 ID3v1-タグとID3v2-タグの形式が異なります。つまり

    Title  :                                 Artist:    
    

    対ID3v2:

    TIT2 (Title/songname/content description): 
    
  • これら5つのeyeD3の唯一のプログラムとして 2つのファイルに赤い警告を出力します:

    Invalid mode/bitrate combination for layer II
    No ID3 v1.x/v2.x tag found!
    

    lltagが存在するのはこれら2つのファイルだけであるため、これら2つのファイルにはID3v1タグがあるようです。 およびmp3info タイトルを取得できます。これはeyeD3のバグかどうか疑問に思います ここで言及されている他のプログラムはこれらのファイルに問題がないので…

関連:Cambria / Calibriフォントが使用されている場合、FFの空白の(欠落している)合字(tt、ti、fi、ffなど)?

結果(リアルタイム):

 Program  | Version    | Time / s
----------+------------+-----------
 exiftool | 10.25      | 49.5 ± 0.5
 lltag    | 0.14.5     | 41   ± 1.0
 ffprobe  | 3.1.3-1+b3 | 33   ± 0.5
 eyeD3    | 0.6.18     | 24   ± 0.5
 id3info  | 3.8.3      | 4.2  ± 0.1
 id3v2    | 0.1.12     | 2.9  ± 0.1
 id3tool  | 1.2a       | 1.7  ± 0.1
 mp3info  | 0.8.5a     | 1.4  ± 0.1

時間的には、ここでの勝者はid3toolです。 (mp3infoの方が高速ですが、ID3 v2では機能しません)。 id3v2 も非常に高速ですが、getTitleId3 ID3v1タグでも機能するには、関数を調整する必要があります。これにより、最悪の場合、2倍遅くなる可能性があります。


Ubuntu
  1. Ubuntu 20.04にZshをインストールする方法は?

  2. 「service–status-all」の結果を読み取る方法は?

  3. ファイルから変数を読み取る方法は?

  1. リプレイゲインタグを追加しますか?

  2. Linuxでシェルを変更する方法

  3. シェルスクリプトで一文字だけ読む方法

  1. Gitタグを作成する方法

  2. 実行する前にシェルスクリプト全体を読む方法は?

  3. Linux シェルで websocket の応答を読み取る方法