Resultater 1 til 8 av 8
Abonnér på denne tråden
  1. #1
    Hifi Freak marsboer's Avatar
    Ble medlem
    Apr 2010
    Sted
    Akershus
    Innlegg
    3,673
    Tagget i
    0 Innlegg

    marsboers FLAC-scripts (Linux)

    Etter forespørsel legger jeg her ut to bash-scripts jeg har skrevet fra scratch for å utføre tre vanlige oppgaver for å alltid ha et 100% optimalt FLAC-bibliotek.
    Disse scriptene kjører man i kommandolinjen i Linux og krever at man har FLAC installert. FLAC kan vanligvis installeres direkte via pakkebrønner i de fleste OS. Det er viktig at man også får med metaflac verktøyet. Dette er i hvertfall med som standard i Debian som jeg selv kjører.

    I Debian installerer man FLAC med "aptitude install flac"

    Jeg regner med at dette er noe som bare er interessant for de aller færreste, men det er nå så.
    Av en eller annen grunn kommenterer jeg alltid på engelsk når jeg scripter men det får dere leve med.

    SCRIPT 1: flac_test
    Poenget med dette scriptet er bare å gå gjennom alle FLAC-filer som finnes innenfor den angitte mappelokasjonen med undermapper og kjøre en FLAC-test på dem. Denne testen går ut på å kjøre en ordinær dekoding av fila, men uten å faktisk skrive noe data. Hensikten med dette er å finne alle FLAC-filer som har en eller annen feil. Disse feilene kan gi seg utslag i at applikasjoner/squeezeboxer med flere får problemer eller henger. Jeg kan f.eks tenke meg at det kan oppstå problemer i forbindelse med spoling og tidsangivelse i en sang om filen ikke er helt i orden. Dette kan også tyde på at et eller annet har blitt gjort feil i rippeprosessen. Dette er et svært enkelt script som genererer en fil som inneholder alle filene med feil. Denne listen printes ut til skjerm som en oppsummering når scriptet har testet alle FLAC-filene i den angitte mappestrukturen.

    Bruk:
    ./flac_test <sti til mappestruktur med FLAC-filer som skal testes>

    Husk chmod +x for å gjøre scriptet kjørbart

    Kode:
    #!/bin/bash
    #
    # Author: Hans-Kristian Bakke
    # Date: 05.08.2010
    #
    ####
    
    ERRORS="$HOME/flac_test.log"
    
    rm -f "$ERRORS"
    
    find "$1" -iname *.flac -print0 | while read -d $'\0' FILE
    do
    	flac -t "$FILE"
    	if ! [ $? -eq 0 ]
    	then
    		echo "-> $FILE" >> "$ERRORS"
    	fi
    done
    
    if [ -e "$ERRORS" ]
    then
    	echo -e "\n---\n\nThe following files failed the FLAC decode test:"
    	cat "$ERRORS"
    	echo -e "\n"
    fi
    Scriptet ligger også vedlagt (i UNIX-format, så filen må åpnes i f.eks notepad++ eller wordpad for å vises korrekt)
    Vedlagte filer Vedlagte filer
    Bryston BDA-2 | Bryston BP-17³ | Bryston 4B SST² | PMC Twenty5.24

  2. #2
    Hifi Freak marsboer's Avatar
    Ble medlem
    Apr 2010
    Sted
    Akershus
    Innlegg
    3,673
    Tagget i
    0 Innlegg

    marsboer FLAC-scripts (Linux)

    SCRIPT 2: flac_reencode

    ADVARSEL:
    Dette scriptet tar vare på alle tags gjennom reenkodingsprosessen, men IKKE cover art om dette er lagt i tagen i stedet for en .jpg-fil eller tilsvarende. Jeg benytter kun folder.jpg og tilsvarende selv og ønsker derfor å være sikker på at ingen av filene mine har cover art i tags. Dette er med andre ord en bevisst "rensende" feature basert på min egen ønskede bruk.
    Den som ønsker det motsatt står fritt til å modifisere scriptet.

    BRUK:
    -> ./flac_reencode <sti til mappestruktur med FLAC-filer>
    Dette kan ta laaang tid avhengig av antallet filer, så jeg anbefaler å kjøre scriptet med f.eks screen, som lar deg åpne et nytt konsoll som du kan koble deg fra og senere koble deg til igjen uten at det som kjører der avbrytes.

    -> screen
    -> ./flac_reencode <sti til mappestruktur med FLAC-filer>
    -> Gå ut av det nye konsollet ved å trykke CTRL-A og deretter CTRL-D (A gjør at screen vet at man skal sende en kommando til screen selv, mens D detacher konsollet og går tilbake til opprinnelig shell

    For å reattache senere
    -> screen -r

    --------------------

    Dette scriptet kan kjøres i 2 modus, avhengig av hva ALL er satt til i scriptet.

    Den første, ALL="0", sjekker flac-versjonen på den installerte FLAC-codecen og går deretter gjennom alle FLAC-filer i valgt mappestruktur og sjekker versjonen på hver fil. Om det detekteres at en fil har enn annen versjon enn den installerte versjonen reenkodes fila.

    --------------------

    ALL="1" reenkoder alle filer uavhengig av versjon.
    Formålet med å gjøre denne tilsynelatende meningsløse operasjonen er flere:

    - Kun FLAC-tagene (også kjent som Vorbis comments) blir tatt vare på gjennom reenkodingen. Det vil si at de FLAC-filene som feilaktig har blitt tagget med id3-tags i tillegg til FLAC-tagene nå får kun det ene og korrekte tag-formatet. Filer som har begge disse tag-typene satt vil ofte ha problemer med at kun den ene typen vises i avspiller- eller tagprogrammet slik at du selv om du er sikker på å ha fjernet eller korrigert en eller annet tag likevel ikke blir kvitt den feilaktige tagen når du spiller av FLAC-filen. Dette avfeies ofte som en bug, men skyldes nesten alltid at man har skjulte id3-tager som har blitt lagt inn av feilkonfigurerte rippeprogrammer (mest vanlig før)

    - Man får alle FLAC-filene lagret med samme kompresjonsgrad. FLAC-utviklerne selv anbefaler verdien 5 (som er default) og det er ingen grunn til å øke komprimeringsgraden. Jeg har selv gjort forsøk med verdi 9 (høyeste kompresjon) noe som kun ga besparelser på noen kilobyte, og langt i fra på megabyte skalaen. Enkodingstiden økte imidlertid drastisk. Om man er uenig med valget av 5 så kan man endre dette i flac-enkoding kommandoen i scriptet. Det ryktes at de høyeste kompresjonsverdiene kan gi noen problemer på avspillere som Squeezebox, men dette er ikke bekreftet av meg selv.

    - Scriptet drar ikke med seg cover art fra tags. Med andre ord er man sikker på at ingen av filene har dette i tagen etter reenkoding, noe som gjør at man unngår konflikter der det er (potensielt ulik) cover art både i tag og i folderen i form av en folder.jpg-fil eller tilsvarende

    - Man finner eventuelle feil (samme som flac_test). Disse blir rapportert i en sluttlogg slik som flac_test og må sjekkes ut manuelt i etterkant.

    - Scriptet fjerner alle variasjoner av skrivemåter på FLAC-endelsene og sørger for at alle filer ender opp med .flac (og ikke .FLAC .flAC osv)

    --------------------


    Dette scriptet er vesentlig lengre og mer avansert enn flac_test. Ikke fordi selve operasjonen som gjøres er så mye mer avansert, men rett og slett fordi jeg må håndtere at scriptet kan bli avbrutt av ymse årsaker under eksekvering. Om dette hadde skjedd uten mekanismer for å håndtere uventet avbrudd ville man ha sittet igjen med halvferdige og ødelagte FLAC-filer, kanskje uten tags, uten noen god indikasjon på dette.
    Scriptet er laget slik at man trygt kan avbryte scriptet med en restart, shutdown, kill eller CTRL-C mens det kjører. Scriptet vil da rydde opp i eventuelle temporære filer før det avslutter, slik at det ikke blir liggende igjen uønskede rester i strukturen. Man må da begynne helt på nytt igjen neste gang man kjører scriptet.

    Worst case scenario er at man overstyrer kill-kommandoens standard SIGTERM-signal med KILL (9) signalet, eller en hard reset/shutdown, type umiddelbart strømbrudd. Da vil ikke scriptet kunne kjøre cleanup funksjonen for de temporære filene og man vil kunne sitte igjen med en <filnavn>.flac.bak fil, en <filnavn>.wav fil eller en uferdig <filnavn>.flac fil i mappen scriptet sto i da det ble terminert.
    Om dette skulle skje er det slik at .bak-filen alltid er den originale filen i uendret form, så det er denne du ønsker å rename til .flac igjen og ta vare på.

    TEST (for deres egen del):
    Jeg anbefaler at dere tar en kopi av et album og tester scriptet på denne kopien før dere slipper det løs på hele samlingen. Det utviser ingen bugs som jeg vet om hos meg, men man vet aldri. Test også å avbryte scriptet med CTRL-C og sjekk at det ikke ligger igjen noen halvenkodede eller temporære filer. Om dere ønsker å teste feilhåndteringen kan dere åpne en av FLAC-filene i testalbumet i nano og slette noen tilfeldig valgte linjer i filen. Bare én linje holder for å trigge feil i dekodingen. Sjekk også at alle tags er beholdt.


    Kode:
    #!/bin/bash
    #
    # Author: Hans-Kristian Bakke
    # Date: 06.08.2010
    #
    ####
    #
    # WARNING:
    # This script does not preserve cover art embedded in tags through the reencode. All other tags are preserved
    #
    # DEPENDENCIES:
    # This script requires that you have FLAC (including metaflac) installed ("aptitude install flac" in Debian)
    #
    ####
    
    # Set ALL to 1 if you want to reencode all FLAC-files regardless of version.
    # Set to 0 if you only want to reencode FLAC files encoded with previous versions of the FLAC encoder
    
    ALL="0"
    
    ####
    
    CUR_VERS=`flac -v | awk '/ / {print $2}'`
    ERRORS="/tmp/flac_errors"
    rm -f "$ERRORS"
    
    function fail_decode() {
    	echo "-> Decoding of "$FILE" failed" >> "$ERRORS"
    	echo -e "-> Cleaning up temporary files..."
    	rm -f "$WAV"
    	rm -f /tmp/tmp_tag
    	echo "-> OK"
    }
    
    function fail_encode() {
    	echo "-> Encoding of "$WAV" failed" >> "$ERRORS"
    	echo -e "-> Cleaning up temporary files..."
    	rm -f "$NEWFILE"
    	rm -f "$WAV"
    	mv "$FILE.bak" "$FILE"
    	rm -f /tmp/tmp_tag
    	echo "-> OK"
    }
    
    function sig_decode() {
    	echo -e "\n\nScript terminated by user!"
    	fail_decode
    	exit 1
    }
    
    function sig_encode() {
    	echo -e "\n\nScript terminated by user!"
    	fail_encode
    	exit 1
    }
    
    find "$1" -iname *.flac -print0 | while read -d $'\0' FILE
    do
    	if [ $ALL == "0" ]
    	then
    		FLAC_VER=`metaflac --show-vendor-tag "$FILE" | awk '/ / {print $3}'`
    		echo "(FLAC v$FLAC_VER) $FILE"
    	fi
    
    	if [ $ALL == "1" -o "$FLAC_VER" != "$CUR_VERS" ]
    	then
    
    		NAME="`echo $FILE | sed 's/..\{4\}$//'`"
    		NEWFILE="$NAME.flac"
    		WAV="$NAME.wav"
    
    		# DECODE
    		trap sig_decode SIGINT SIGTERM
    
    		metaflac --export-tags-to=/tmp/tmp_tag "$FILE"
    
    		flac -d "$FILE"
    		ERR=$?
    
    		if [ $ERR -eq 0 ]
    	    then
    			mv "$FILE" "$FILE.bak"
    	    else
    			fail_decode
    			continue
    		fi
    
    		# ENCODE
    		trap sig_encode SIGINT SIGTERM
    
    		flac "$WAV"
    		ERR=$?
    
    		if [ $ERR -eq 0 ]
    	    then
    			rm -f "$WAV"
    			rm -f "$FILE.bak"
    		else
    			fail_encode
    			continue
    		fi
    
    		metaflac --import-tags-from=/tmp/tmp_tag "$NEWFILE"
    
    		rm -f /tmp/tmp_tag
    
    		trap - SIGINT SIGTERM
    	fi
    done
    
    if [ -e "$ERRORS" ]
    then
    	echo -e "\n---\n\nThe following errors were detected:"
    	cat "$ERRORS"
    	echo -e "\n"
    fi
    Vedlagte filer Vedlagte filer
    Bryston BDA-2 | Bryston BP-17³ | Bryston 4B SST² | PMC Twenty5.24

  3. #3
    Hifi Freak H.R's Avatar
    Ble medlem
    Dec 2008
    Sted
    Jessheim | Ullensaker
    Innlegg
    6,328
    Tagget i
    0 Innlegg

    marsboer FLAC-scripts (Linux)

    Glitrende!
    Morro at du gidder å legge dette ut. Gleder meg til å teste ut dette!
    ALE OEM Member 001 | Medlem av hornalliansen | Anlegget
    "Arguing with idiots is like playing chess with a pigeon. No matter how good you are,
    the bird is going to shit on the board and strut around like it's won anyway."

  4. #4
    Hifi Freak Ludo's Avatar
    Ble medlem
    Aug 2008
    Sted
    Sandefjord
    Innlegg
    2,648
    Tagget i
    0 Innlegg

    marsboer FLAC-scripts (Linux)

    Dette er bra, tusen takk! En flott ressurs er du

    Har lagt inn på serveren nå, kjører flac_test.sh as we speak!
    -----

    EC Living Tana SL-1 & Tana L-1 / Sira L-1 Sub

  5. #5
    Hifi Freak
    Ble medlem
    Feb 2003
    Innlegg
    2,436
    Tagget i
    0 Innlegg

    marsboer FLAC-scripts (Linux)

    Strålende. Tester ut det første scriptet nå og det funker som faen, ser det ut som. Takk!
    ____________________________________
    Server / Audiolense / HTPC - DIY DAC-TVC - Heretical - Hegel H2A - Magnepan MG12 (moddet delefilter) - GIK Acoustics

  6. #6
    Hifi Freak coolbiz's Avatar
    Ble medlem
    Mar 2006
    Sted
    Sydvestlandet
    Innlegg
    7,537
    Tagget i
    0 Innlegg

    marsboers FLAC-scripts (Linux)

    Veldig bra, marsboer. 1000takk!
    "What is important to the eye, is not necessarily important to the ear." -Siegfried Linkwitz (1935-2018 )

  7. #7
    Hifi Freak marsboer's Avatar
    Ble medlem
    Apr 2010
    Sted
    Akershus
    Innlegg
    3,673
    Tagget i
    0 Innlegg

    marsboers FLAC-scripts (Linux)

    Jeg gjorde en ørliten endring i script 1. Jeg byttet ut -name *.flac med -iname *.flac. Dette er ikke et must, men gjør at de som eventuelt har FLAC-endelser med store bokstaver, eller en blanding av store og små, også blir tatt med. (i-en står for case insensitive)
    Bryston BDA-2 | Bryston BP-17³ | Bryston 4B SST² | PMC Twenty5.24

  8. #8
    Hifi Freak marsboer's Avatar
    Ble medlem
    Apr 2010
    Sted
    Akershus
    Innlegg
    3,673
    Tagget i
    0 Innlegg

    marsboers FLAC-scripts (Linux)

    Da er script 2 lagt ut i post 2.
    Bryston BDA-2 | Bryston BP-17³ | Bryston 4B SST² | PMC Twenty5.24

Skrive Tillatelser

  • Du kan ikke starte nye tråder
  • Du kan ikke svare på innlegg
  • Du kan ikke laste opp vedlegg
  • Du kan ikke redigere dine innlegg
  •  


 

Om Hifisentralen

    Hifisentralen er Norges største webside innen high-end hi-fi og musikk, og vi har vært på nett siden år 2001. Velkommen til en god hi-fi diskusjon eller kjøp og salg av utstyr.
   

Følg oss på sosiale medier:

Facebook Twitter RSS Feed