Archives: 27. Juli 2014

MP3 Files taggen

Hi,

und noch einer.
Habt ihr eventuell das eine oder andere Musik Album von euren CD’s als MP3’s gesichert?
Sind bei diesen die ID3 Tags nicht gut gefüllt?
Dann ist beets vielleicht genau das richtige.
Dies ist eine Python software, welche sich die Dateien eines Ordners ansieht und dann prozentual sagt, welches Album dies denn wohl sein kann.
Dies lässt sich auch in eine Quiet Modus laufen lassen ohne nachzufragen und kann die Musik direkt in eine gute Ordner-Struktur bringen.
Auch ist die Software kostenlos und für so fast jedes Betriebssystem verwendbar welches auch Python unterstützt. Ich lasse es direkt auf einem Synology NAS laufen.

Für einen guten Start hier einmal mein Config-File:

paths:
    default: %asciify{$albumartist}/%asciify{$album} ($year)/%if{$multidisc,$disc-}$track - %asciify{$title}
    soundtrack: Soundtracks/%asciify{$album}/%if{$multidisc,$disc-}$track - %asciify{$title}
    comp: Various Artists/%asciify{$album} ($year)/%if{$multidisc,$disc-}$track - %asciify{$artist} - %asciify{$title}

replaygain:
    mp3_format: mp3gain
    reference_loundess: 89

match:
    ignored: missing_tracks unmatched_tracks
    strong_rec_thresh: 0.10
    medium_rec_thresh: 0.30
    max_rec:
        label: strong
        country: strong
        media: strong
        year: strong
        track_id: strong
    preferred:
        countries: ['DE', 'US|GB|UK']
        media: ['CD', 'Digital Media|File']
        original_year: yes

item_fields:
    multidisc: 1 if disctotal > 1 else 0

lastgenre:
    auto: yes
    source: album

embedart:
    auto: yes

fetchart:
    auto: yes

ftintitle:
    auto: yes

scrub:
    auto: yes

import:
    copy: false
    timid: false
    resume: true
    move: true
    art: true
    quiet_fallback: skip
    none_rec_action: skip
    delete: true
    write: true
    log: /volume1/@appstore/.beets/beetslog.txt
    incremental: true
    languages: de

library: /volume1/@appstore/.beets/musiclibrary.blb
color: true
pluginpath:
- /var/packages/python/target/lib/python2.7/site-packages/beetsplug/
plugins: inline fetchart embedart ftintitle lastgenre discogs chroma scrub missing
threaded: true
art_filename: cover
per_disc_numbering: true
directory: /volume/Musik
ignore: [".*", "*~"]
replace:
    '[\\/]': _
    '^\.': _
    '[\x00-\x1f]': _
    '[<>:"\?\*\|]': _
    '\.

#039;: _
‚\s+

 

#039;: “
Gruß, Matthias

Bild-Automatisierung

Hi,

heute einmal etwas zum Thema Automatisierung.
Es gibt ja schon einige Tools zum Automatisieren, aber nicht viele mit Bild-Erkennung.

Hier kommt die Software Sikuli bzw. SikuliX ins Spiel.
Mit dieser könnt Ihr über Screenshots eure Software oder Prozesse automatisieren. Und das Beste: Es funktioniert Dank Java auf jedem Betriebssystem.

Ich habe dies z.B. mit dem Browser-Spiel Goodgame Empire zum Abholen der Steuern getestet. Diese werden sobald fertig abgeholt und dann wieder ein neuer durchlauf geordert. Um dies genauer zu zeigen hier das Sikuli-Script

patterns = (Pattern("1405884495038.png").similar(0.80),Pattern("1405884506644.png").similar(0.80),"1405884531009.png",Pattern("1406315875293.png").similar(0.78),Pattern("1406315785603.png").similar(0.80),Pattern("1406316973856.png").similar(0.82),Pattern("1406372148504.png").similar(0.80),Pattern("1406379490536.png").similar(0.82))
closetaxeswindow=Pattern("1406317936903.png").targetOffset(162,-17)
newtaxesscreen=Pattern("1406315290793.png")
gettaxes=Pattern("1405884531009.png")
startnewtaxescollection=Pattern("1406315337449.png").targetOffset(-19,0)
retrievetaxes=Pattern("1406316179768.png")
closenewtakesscreen=Pattern("1406318736692.png").targetOffset(146,-47)

def clickexists(p):
    click(exists(p, 0))

while True:
    for p in patterns:
        m = exists(gettaxes, 0)
        if m:
            click(m)
            wait(2)
            clickexists(retrievetaxes)
            wait(2)
            clickexists(closetaxeswindow)
            wait(2)
            clickexists(newtaxesscreen)
            wait(2)
            clickexists(startnewtaxescollection)
            wait(2)
            clickexists(closenewtakesscreen)
        else:
            clickexists(p)

und einmal nun das ganze als Bild:

An sich könnt ihr dies mit jeder beliebigen Software machen.
Vielleicht möchtet ihr dies ja als Grundlage nutzen 🙂

Gruß, Matthias