複数のmp3ファイルのタイトルタグから文字列を検索して別の文字列に置き換えることはできますか?

複数のmp3ファイルのタイトルタグから文字列を検索して別の文字列に置き換えることはできますか?

私の考えでは

  1. "ytバージョン"を検索してください。

  2. 「mqversion」に変更してください。

  3. タイトルタグに

複数のmp3ファイル。このプロセスでは、メタデータコンテンツの他の部分を編集/削除しないことを望みます。

可能ですか?それでは、どのツールを使用する必要がありますか?

  1. 複数のmp3ファイルのメタデータから特定の文字列を検索できることを知っています。 EasyTagでは可能です。

  2. しかし、その特定の文字列を事前定義されたメタデータフィールド(上記の例のタイトルフィールド)の他の文字列に置き換えるにはどうすればよいですか?

EasyTagを使用する必要はありません。ただ、ある時点で設置しただけです。

私の質問に対する答えは、私が間違いなく使用できる正規表現に依存していると思います。ただ、私はそれらを使用するか、実際に実装するプログラム(CLIでもGUIでも)を知らないということです。

ベストアンサー1

id3v2オペレーティングシステムのリポジトリにある必要があるこのツールを使用してこれを行うことができます(このソリューションではGNUを想定し、grepLinuxを実行している場合のデフォルトはGNUです)。

## Iterate over all file/dir names ending in mp3
for file in /path/to/dir/with/mp3/files/*mp3; do 
    ## read the title and save in the variable $title
    title=$(id3v2 -l "$file" | grep -oP '^(Title\s*|TIT2\s*.*\)):\K(.*?)(?=Artist:)'); 
    ## check if this title matches ytversion
    if [[ "$title" =~ "ytversion" ]]; then 
        ## If it does, replace ytversion with mqversion and 
        ## save in the new variable $newTitle
        newTitle=$(sed 's/ytversion/mqversion/g' <<<"$title") 
        ## Set the tite tag for this file to the value in $newTitle
        id3v2 -t "$newTitle" "$file" 
    fi
done

id3v2このツールはタイトルとアーティストを同じ行に印刷するため、少し複雑です。

$ id3v2 -l foo.mp3 
id3v1 tag info for foo.mp3:
Title  : : title with mqversion string   Artist:                               
Album  :                                 Year:     , Genre: Unknown (255)
Comment:                                 Track: 0
id3v2 tag info for foo.mp3:
TENC (Encoded by): iTunes v7.0
TIT2 (Title/songname/content description): : title with mqversion string     

この-oフラグは、grep行の一致部分のみを印刷し、-PPCRE正規表現を有効にするように指示します。正規表現はで始まり、Titleその後にゼロ個以上の空白文字が続いて:^Title\s*:)が続く行を検索するか、で始まり、TIT2その後に):^TIT2\s*.*\))が続く行を検索します。これにより、その時点まで一致するすべての項目が削除されます\K。次に、最も短い文字列(.*?)の後に Artist:.(が続くものを検索します)(?=Artist:)肯定的な見通し探している文字列と一致しますが、一致に含まれないため、grep)は印刷しません。

おすすめ記事