Skip to content

Instantly share code, notes, and snippets.

@mamemomonga
Created June 19, 2025 23:52
Show Gist options
  • Select an option

  • Save mamemomonga/38539e4ad5bdea23aaa42e9da7148cc7 to your computer and use it in GitHub Desktop.

Select an option

Save mamemomonga/38539e4ad5bdea23aaa42e9da7148cc7 to your computer and use it in GitHub Desktop.

Revisions

  1. mamemomonga created this gist Jun 19, 2025.
    52 changes: 52 additions & 0 deletions flagtag.pl
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,52 @@
    #!/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;
    }
    }
    }