Nyttige scripts for å gjøre ting med musikksamlingen

marsboer

Hi-Fi freak
Ble medlem
04.04.2010
Innlegg
4.356
Antall liker
1.701
Sted
Phobos
Okay, her er et eksempel:

Kode:
# Find the current user and configure admin_users array
$username = $env:username
$admin_users = @("hk")


# Map network shares that all users should have, and rename the drives to a prettier name
(New-Object -ComObject WScript.Network).MapNetworkDrive("Z:", "\\merkur\Common")
(New-Object -ComObject Shell.Application).NameSpace("Z:\").Self.Name = "Common"


(New-Object -ComObject WScript.Network).MapNetworkDrive("M:", "\\merkur\media")
(New-Object -ComObject Shell.Application).NameSpace("M:\").Self.Name = "Media"


# Map Admin share for users listed in admin_users array
if ($admin_users -contains $username) {
  (New-Object -ComObject WScript.Network).MapNetworkDrive("Q:", "\\merkur\Admin")
  (New-Object -ComObject Shell.Application).NameSpace("Q:\").Self.Name = "Admin"
}
Jeg har valgt å definere et array med brukere for å enklere legge til flere brukere om det skulle bli aktuelt. Alternativt kan man i stedet benytte gruppemedlemskap. Det siste er en selvfølge i et domene, men de færreste privatbrukere diller med gruppemedlemskap og rettighetstilordning, så jeg tenkte at å styre all mappingen fra scriptet var mest hensiktsmessig.

Det er selvsagt bare å definere flere if-klammer for å ha mange ulike oppsett.
 

Falcon1i

Hi-Fi freak
Ble medlem
11.09.2012
Innlegg
1.822
Antall liker
1.823
Sted
Exil i huvudstaden
Takk! Har installert Powershell, satt ExecutionPolicy til RemoteSigned (var det visst), og det ser ut som om versjonen uten Remove-Item funker. Den tar sin tid, men det ser ut som om det scriptet gjør jobben.

Har du et tips for hvor jeg kan finne enslags Dummies guide til å bruke EnableRootSSH direkte på NAS'en også?
EnableRootSSH är ganska enkel att få till.
Ladda ner image-filen, http://www.readynas.com/download/addons/x86/4.2/EnableRootSSH_1.0-x86.bin
Installera via gränssnittet, Frontview. Add-ons->Add new - Choose file/Upload and verify.
Efter reboot har den startat upp en ssh-server som du kan ansluta till (port 22)med lämpligt program, putty är ett alternativ.
Lösenordet för root blir samma som för admin-kontot i Frontview.

//Janne
 

Distinctive

Æresmedlem
Ble medlem
04.12.2006
Innlegg
11.063
Antall liker
3.589
Sted
Stavanger
Finnes der noen bra editeringsprogrammer (mac eller windoze) for å konvertere folder view til tag view, uten å miste cover art og evt. embedded metadata?
Jeg har prøvd et par shareware, som Jaikoz og Bliss, men det virker ikke som om disse er eksakt hva jeg er ute etter mhp. funksjonalitet og brukerterskel.
Kanskje et script kan være tingen, men pris betyr mindre hvis jeg oppnår det jeg ønsker med et minimum av egeninnsats (les gørrkjedelig manuell punching i mp3tag, ol. - mindre ting kan selvfølgelig korrigeres i etterkant). Mitt bibliotek består mest av Flac, Wav, Aiff, Alac, AAC (MP4) - både redbook (CDA) audio og hirez opp til 192/24. MP3 bryr jeg meg lite om, men det kan jo være greit for resten av husstanden. Jeg har backup av biblioteket som ikke er så stort hverken i bytes eller antall album.
 

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
EnableRootSSH är ganska enkel att få till.
Ladda ner image-filen, http://www.readynas.com/download/addons/x86/4.2/EnableRootSSH_1.0-x86.bin
Installera via gränssnittet, Frontview. Add-ons->Add new - Choose file/Upload and verify.
Efter reboot har den startat upp en ssh-server som du kan ansluta till (port 22)med lämpligt program, putty är ett alternativ.
Lösenordet för root blir samma som för admin-kontot i Frontview.
Takk! Det er installert og skal testes ut etterhvert. Unix og Linux er jeg brukbart kjent med fra tidligere, så det er logisk å ha en slik bakdør tilgjengelig, om ikke annet som en nødløsning hvis Frontview krasjer totalt.
 

marsboer

Hi-Fi freak
Ble medlem
04.04.2010
Innlegg
4.356
Antall liker
1.701
Sted
Phobos
Finnes der noen bra editeringsprogrammer (mac eller windoze) for å konvertere folder view til tag view, uten å miste cover art og evt. embedded metadata?
Jeg har prøvd et par shareware, som Jaikoz og Bliss, men det virker ikke som om disse er eksakt hva jeg er ute etter mhp. funksjonalitet og brukerterskel.
Kanskje et script kan være tingen, men pris betyr mindre hvis jeg oppnår det jeg ønsker med et minimum av egeninnsats (les gørrkjedelig manuell punching i mp3tag, ol. - mindre ting kan selvfølgelig korrigeres i etterkant). Mitt bibliotek består mest av Flac, Wav, Aiff, Alac, AAC (MP4) - både redbook (CDA) audio og hirez opp til 192/24. MP3 bryr jeg meg lite om, men det kan jo være greit for resten av husstanden. Jeg har backup av biblioteket som ikke er så stort hverken i bytes eller antall album.
Hva mener du med å konvertere folder view til tag view? Dette er vel opp til avspillerprogramvaren og de fleste støtter vel visning både basert på filstruktur og tag-informasjon.

Eller tenker du på et program for å tagge filene dine basert på mappe- og filnavn?
 

Distinctive

Æresmedlem
Ble medlem
04.12.2006
Innlegg
11.063
Antall liker
3.589
Sted
Stavanger
Finnes der noen bra editeringsprogrammer (mac eller windoze) for å konvertere folder view til tag view, uten å miste cover art og evt. embedded metadata?
Jeg har prøvd et par shareware, som Jaikoz og Bliss, men det virker ikke som om disse er eksakt hva jeg er ute etter mhp. funksjonalitet og brukerterskel.
Kanskje et script kan være tingen, men pris betyr mindre hvis jeg oppnår det jeg ønsker med et minimum av egeninnsats (les gørrkjedelig manuell punching i mp3tag, ol. - mindre ting kan selvfølgelig korrigeres i etterkant). Mitt bibliotek består mest av Flac, Wav, Aiff, Alac, AAC (MP4) - både redbook (CDA) audio og hirez opp til 192/24. MP3 bryr jeg meg lite om, men det kan jo være greit for resten av husstanden. Jeg har backup av biblioteket som ikke er så stort hverken i bytes eller antall album.
Hva mener du med å konvertere folder view til tag view? Dette er vel opp til avspillerprogramvaren og de fleste støtter vel visning både basert på filstruktur og tag-informasjon.

Eller tenker du på et program for å tagge filene dine basert på mappe- og filnavn?
Dessverre støtter ikke min musikkserver app folder view.
Jeg kan alltids bruke Kinsky sammen med Minimserver, men denne er langt fra så delikat som Lumin.
Det er en del media som ikke blir discovered basert på at de ligger i folders.
 

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
Etter tips fra MatsGyver i en annen tråd (http://www.hifisentralen.no/forumet/hodetelefoner/70140-objektiv-vs-subjektiv-16.html#post1733795) fant jeg ut at det er mulig å scripte QuickTime/iTunes for å gjøre konvertering til AAC-filer. Det gamle scriptet mitt pakket et kall til Nero inn i en kommandolinje for dBpoweramp coreconverter, men av en eller annen grunn forsvant en del kommandolinjeparametre på veien.

Derfor brukte jeg noen romjulstimer på å skrive om det scriptet slik at det gjør jobben i flere steg.
Scriptet traverserer hele musikkbiblioteket på serveren og kikker på hver enkelt FLAC-fil:
  • Først henter det ut tags fra FLAC-filen og finner ut hva AAC-filen bør hete, renset for sære tegn som æøåóèõï og sånt.
  • Det sammenligner deretter datoen på FLAC-filen og eventuell AAC-fil for å bestemme om den trenger oppdatering eller ikke.
  • Hvis FLAC-filen er nyere, AAC-filen ikke eksisterer, eller AAC-filen er eldre enn en viss dato (for å kunne regenerere hele greia uten å slette filer først) vil scriptet først kalle flac.exe for å konvertere FLAC-filen til en lokal WAV-fil i C:\TEMP.
  • Så kalles sox.exe for volumnormalisering ihht ReplayGain-tags lagret i FLAC-filen, dog slik at max signalnivå ikke blir høyere enn -1 dBFS, eventuelt også nedsampling til 16 bits og 44,1 kHz med noise shaping dither for hirez-filer.
  • Deretter kalles qtaaenc.exe for å konvertere WAV -> AAC. Jeg har valgt True Variable Bit Rate med ca 220-230 kb/s og høyest mulig kvalitet, kommandolinje "--tvbr 100 --highest --samplerate keep".
  • Til sist bruker jeg metaflac.exe og Neros neroAacTag.exe for å hente ut cover art fra FLAC-filen og putte det inn i AAC-filen. Øvrige tags settes enten direkte i qtaacenc.exe eller i neroAacTag.exe.
  • Når alt det er klart kopieres den ferdige AAC-filen tilbake til riktig sted på server.
OK, det tar litt tid, ca ett minutt pr lydfil, så det tar en måneds tid før det har kvernet gjennom lydbiblioteket, men til gjengjeld kan det stoppes og restartes igjen fra samme sted uten å begynne helt fra nytt. Da kan det bare ligge og kverne når PC'en er påslått, slik at det vedlikeholder et oppdatert bibliotek med AAC-kopier av alt som ligger i det egentlige musikkbiblioteket. Når jeg vil flytte noe over på iPhone eller minnepinne er det bare å kopiere de ferdige AAC-filene derfra.

Som marsboer har påpekt, gir ikke dette noen vanntett garanti mot intersample overs i den ferdige AAC-filen, men jeg vil gjerne gjøre volumnormaliseringen på ett sted med kjent kvalitet samtidig med eventuell resampling og endring i bit-dybde for å minimalisere aliasing og kvantiseringsstøy. Så vidt jeg vet vil QuickTime automatisk sjekke for klipping ved konvertering til AAC og redusere signalnivået ved behov. Forhåpentligvis trigger jeg ikke den sikkerhetsventilen spesielt ofte.

Det tar også litt mer hensyn til lagringsplass enn anbefalingen i MatsGyver's opprinnelige link (Marlene's Musings: MP3 and other HiRes formats), men det er kanskje en grunn til at innstillingen for CBR 320 kb/s har kommandolinje --preset insane i LAME. Jeg synes jo VBR 128 kb/s AAC låter helt OK, men dette bør gi mer enn nok kvalitetsmessig headroom med moderat økning i lagringsplass.

Scriptet er litt for langt til å sette inn her, men poenget er at dette lar seg gjøre. Noen linker, i den rekkefølgen de brukes i scriptet:
https://xiph.org/flac/documentation_tools_flac.html
SoX − Sound eXchange, the Swiss Army knife of audio manipulation
qtaacenc: a command-line QuickTime AAC encoder for Windows
https://xiph.org/flac/documentation_tools_metaflac.html
NeroAAC - Hydrogenaudio Knowledgebase
 
Sist redigert av en moderator:
N

nb

Gjest
Cue marsboer for en mer elegant variant....

Det kan forresten muligens funke å starte et script pr cpu-core for å få det til å gå kjappere, men det krever muligens litt logikk for å fordele biblioteket ut på de ulike instanser
 

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
Særdeles velegnet for parallellisering over et nettverk. I prinsippet kunne man farmet ut en og en konvertering til PC'er i nettet og kvernet gjennom det hele på rekordtid. Med 50000 PC'er og tilstrekkelig båndbredde til og fra server ville hele jobben vært gjort på noen få minutter.

Jeg gjorde noe sånt med en simuleringsmodell en gang. Hovedscriptet var i perl, og det satte ut enkeltreplikasjoner med forskjellige parametre på et nettverk av arbeidsstasjoner spredt rundt på campus pluss en og annen maskin off site via internett. Konfidensintervallene på grafene i rapporten var til slutt tightere enn linjetykkelsen...
 
Sist redigert:

marsboer

Hi-Fi freak
Ble medlem
04.04.2010
Innlegg
4.356
Antall liker
1.701
Sted
Phobos
Er det et CMD eller powershell script? Hvis det er et CMD-script er nok mulighetene for å parallellisere dette på en enkel måte ganske begrensede.

Man kan f.eks få "gratis" parallellisering i mer egnede scriptspråk ved å pipe output fra sox rett inn i enkoder-kommandoen siden en pipe automatisk genererer en ny prosess for neste kommando etter pipen. En effektiv metode vil derfor være å benytte sox for å gjøre selve flac-dekodingen samtidig som den også resampler >44.1kHz og downmixer surround til to-kanals stereo og feede outputen rett inn i enkoderen (lame i mitt tilfelle siden kun mp3 er av interesse hos meg). Og det hele skjer uten å ta ineffektive og ikke-parallelle omveier via temporære filer og flere ledd som skal jobbe med de samme dataene. Det eneste man må håndtere utenom er tags og replaygain (med mindre encoderen faktisk har egnede verktøy for replaygain tilgjengelig), men siden du kjører replaygain før enkoding kan du også sy dette inn i sox-kommandoen.

sox -S "$flac" -t .wav -c 2 - rate -h 44100 | lame -V $vbr_quality --noreplaygain - "$mp3"

Min variant kjører i bash på linux lokalt på mediaserveren og utnytter parallellisering maksimalt der jeg kan, både i selve downsample/downmix/encodingsprosessen og i form av å prosessere x-antall filer i parallell. Scriptet bruker likevel et par-tre dager på ca 1,4 TB FLAC, mens en full sync av et eksisterende bibliotek tar omlag ett minutt siden sjekken av timestamps og eventuelle tag-endringer også skjer i parallell.
 
Sist redigert:

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
Det er Python 2.7 i en enkel CMD wrapper. Har ikke prøvd, men tenker at en eller annen variant av rsh spredt utover et PC-nettverk ville vært litt morsomt. Måtte sannsynligvis lagd et lite script for å gjøre en instans av konverteringen, og så et master script for å fordele jobber og krysse av etterhvert som ting blir ferdige.

Og jepp, pipes er den opplagte måten å effektivisere scriptet litt på. Både flac.exe, sox.exe og qtaacenc.exe forstår pipes. Det var hendig å debugge scriptet steg for steg med litt shrapnel etterlatt på disken for å verifisere at det hele fungerte riktig, så jeg skrev det slik fra starten. Så startet jeg det og har ikke prøvd å optimalisere ennå.

Jeg var faktisk ikke klar over at sox.exe kan lese flac direkte, men jeg ser det nå. Der er det også mulig å fjerne ett steg.
 

marsboer

Hi-Fi freak
Ble medlem
04.04.2010
Innlegg
4.356
Antall liker
1.701
Sted
Phobos
Du vil jo også spare en god del disk I/O ved å gjøre all den tunge jobben med dekoding/enkoding i samme pipe. Da må fildataene kun leses en enkelt gang og skrives en eneste gang, og attpåtil helt parallellt, noe som sannsynligvis vil gjøre en full reenkoding av et bibliotek flere ganger raskere enn den trestegsprosessen som du har nå. Tagoperasjonene går vanligvis på svært kort tid i forhold til reenkodingen, både lesing og skriving, og krever kun at en liten del av filen leses tid så denne biten er det ikke så mye å tape på at håndteres i et eget steg.

På linux kan man få automatisk parallellisering med x-antall samtidige eksekveringer ved å benytte xargs for å ta outputen fra en filliste og kjøre kommandoer på disse etter et definert system med $concurrency antall samtidige eksekveringer av funksjonen som kalles i drift samtidig til enhver tid. I dette tilfellet vil det være naturlig å kombinere xargs med find og en eksportert bash funksjon (eller et helt eksternt script) som gjør selve jobben med filene:

Dvs noe ala dette:

Kode:
[COLOR=#FF0000][FONT=Consolas]flac_to_mp3 () {
   ..do stuff here
[/FONT][/COLOR][FONT=Consolas][COLOR=#ff0000]}[/COLOR][/FONT]

[COLOR=#FF0000][FONT=Consolas]export -f flac_to_mp3
find "[/FONT][/COLOR][COLOR=#007800][FONT=Consolas]$musicdir[/FONT][/COLOR][COLOR=#FF0000][FONT=Consolas]" -type f -iname '*.flac' -print0 | xargs -0 -r -n 1 -P [COLOR=#007800]$concurrency[/COLOR] bash -c 'flac_to_mp3 "[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]$[/FONT][/COLOR][COLOR=#000000][FONT=Consolas][B]@[/B][/FONT][/COLOR][COLOR=#FF0000][FONT=Consolas]"' --
[/FONT][/COLOR]


Om man benytter noen form for temporære filer i funksjonen som kalles må man sørge for at disse har filnavn som er tilfeldige slik at ikke flere samtidige kjøringer av den samme funksjonen med ulike inuptfiler faktisk overskriver hverandres data. På linux kan man benytte mktemp for dette og dette er trivielt også i python.

I python 2.7 har man imidlertid alle verktøy til rådighet, inklusive en illusjon av multithreading (python 2.7 har en del begrensninger på dette området), så her bør du kunne få til mye, litt avhengig av egen motivasjon for optimalisering.
 
Sist redigert:

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
Jeg prøvde å optimalisere litt med å la sox lese FLAC-filen direkte og med pipe i stedet for midlertidige filer. Det økte farten fra ca en fil i minuttet til 2-3 filer i minuttet. Da legger sox og qtaacenc seg på hver sin CPU og kjører så fort som I/O tillater. Nå er dette tydeligvis I/O-begrenset, ettersom ingen av CPU'ene når 100 %. Prosessoren med qtaacenc ligger høyest med 80-90 %, mens den med sox er på ca halvparten av det.
 

Asbjørn

Rubinmedlem
Ble medlem
26.03.2006
Innlegg
36.433
Antall liker
35.228
Sted
Vingulmǫrk
Torget vurderinger
2
Jeg oppdaget programmet qaac.exe som alternativ til qtaacenc. Den store forskjellen er at qaac kan ta en kommandolinjeopsjon for å justere gain direkte, uten å gå veien om en pipe med sox.exe. (qaac bruker sox internt.) Da blir ting ganske mye enklere, siden jeg kan la qaac lese flac-filen og skrive aac-filen i en operasjon. Den operasjonen bevarer også tags, slik at python-scriptet ikke behøver å håndtere dem separat. Da trenger bare Python-scriptet å lese tags fra flac-filen for å konstruere mappe og filnavn for aac-filen, sjekke om den eksisterer og om den i så fall er eldre enn flac-filen, bestemme gain-justering, og deretter la qaac ta seg av grovarbeidet.

Innså en ting til også: Det er slett ikke nødvendig å redusere bitdybde fra f eks 24 bit til 16 bit før den konverteringen. AAC-filene bruker 32-bits float internt og er sånn sett hirez. Jeg gjør bare en sjekk av samplerate og setter den til 44100 kHz for aac-filen hvis den skulle være høyere i flac-filen.

https://sites.google.com/site/qaacpage/
 
Sist redigert:
Topp Bunn