Skip to content

Instantly share code, notes, and snippets.

@mamemomonga
Created June 19, 2025 23:52
Show Gist options
  • Save mamemomonga/38539e4ad5bdea23aaa42e9da7148cc7 to your computer and use it in GitHub Desktop.
Save mamemomonga/38539e4ad5bdea23aaa42e9da7148cc7 to your computer and use it in GitHub Desktop.
カレントディレクトリのFLACファイルにタグをつける
#!/usr/bin/env perl
# カレントディレクトリのFLACファイルにタグをつける
# ファイル名の「XYY_NNNN」からタグを作成する
use strict;
use warnings;
use feature 'say';
use File::Find;
use File::Basename;
my @filelist;
find(sub {
return unless -f $_;
return unless /.flac/i;
push @filelist, $File::Find::name;
},'.');
my %metadefault=(
TITLE => '',
TRACKNUMBER => '',
ARTIST => '谷山浩子',
ALBUMARTIST => '谷山浩子',
ALBUM => '空飛ぶ日曜日',
DATE => '1985/10/5',
COMMENT => 'PONY-CANNON ARRD-VARK C28A0438',
);
my @cmds;
foreach my $fn (sort @filelist) {
my $fn2=basename($fn);
my %meta=%metadefault;
if($fn2=~/^([A-Z]?\d{2})_(.+)\.flac$/) {
$meta{TRACKNUMBER}=$1;
$meta{TITLE}=$2;
push @cmds,['metaflac','--remove-all-tags',$fn];
push @cmds,['metaflac',(map {qq{--set-tag=$_=$meta{$_}}} keys %meta),$fn];
}
}
foreach(@cmds) {
say join(' ',@{$_});
system(@{$_});
if ($? == -1) {
die "---- failed to execute: $!\n";
} elsif ($? & 127) {
die sprintf("---- child died with signal %d, %s coredump\n",($? & 127),($? & 128) ? 'with' : 'without');
} else {
my $ce=$? >> 8;
if($ce != 0) {
die sprintf("---- child exited with value %d\n", $ce) if $ce != 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment