私の考えでは
"ytバージョン"を検索してください。
「mqversion」に変更してください。
タイトルタグに
複数のmp3ファイル。このプロセスでは、メタデータコンテンツの他の部分を編集/削除しないことを望みます。
可能ですか?それでは、どのツールを使用する必要がありますか?
複数のmp3ファイルのメタデータから特定の文字列を検索できることを知っています。 EasyTagでは可能です。
しかし、その特定の文字列を事前定義されたメタデータフィールド(上記の例のタイトルフィールド)の他の文字列に置き換えるにはどうすればよいですか?
EasyTagを使用する必要はありません。ただ、ある時点で設置しただけです。
私の質問に対する答えは、私が間違いなく使用できる正規表現に依存していると思います。ただ、私はそれらを使用するか、実際に実装するプログラム(CLIでもGUIでも)を知らないということです。
ベストアンサー1
id3v2
オペレーティングシステムのリポジトリにある必要があるこのツールを使用してこれを行うことができます(このソリューションではGNUを想定し、grep
Linuxを実行している場合のデフォルトは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
行の一致部分のみを印刷し、-P
PCRE正規表現を有効にするように指示します。正規表現はで始まり、Title
その後にゼロ個以上の空白文字が続いて:
(^Title\s*:
)が続く行を検索するか、で始まり、TIT2
その後に):
(^TIT2\s*.*\)
)が続く行を検索します。これにより、その時点まで一致するすべての項目が削除されます\K
。次に、最も短い文字列(.*?
)の後に Artist:
.(が続くものを検索します)(?=Artist:)
。肯定的な見通し探している文字列と一致しますが、一致に含まれないため、grep
)は印刷しません。