Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Der Code-Schnippsel-Thread
thosch97 Offline
All things have a right to grow

Beiträge: 9.843
Registriert seit: Feb 2010
Beitrag #451
RE: Der Code-Schnippsel-Thread
(30.04.2014 16:25)mrshadowtux schrieb:  Das würde die Audiodatei neu kodieren. Ich wollte aber Wave.

youtube-dl --extract-audio --audio-format wav

PGP-Key E384 009D 3B54 DCD3 21BF 9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
„Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
“Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
„Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
„Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“
30.04.2014 16:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.219
Registriert seit: Jul 2008
Beitrag #452
RE: Der Code-Schnippsel-Thread
(30.04.2014 16:25)mrshadowtux schrieb:  Das würde die Audiodatei neu kodieren.

Nein, tut es nicht. Wenn man keinen Audiocodec angibt, versucht das Skript immer zuerst einen passenden Container zu finden und den Audiostream original zu kopieren.
Weiterhin kann man z. B. AAC als Ausgabeformat angeben und nur bei Nichtübereinstimmung wird rekodiert.

CCITTグループ4またはZIP圧縮のモノクロ300dpiで最高の再現性
30.04.2014 16:50
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
tk1908 Offline
Unixer

Beiträge: 7.354
Registriert seit: Apr 2009
Beitrag #453
RE: Der Code-Schnippsel-Thread
Code:
################################
# MP3-CDs via Konsole brennen  #
# Author: Tobias Koehler       #
# Mail: tk1908@gmail.com       #      
# Version 1.0                  #                            
################################
#!/bin/bash

# Variablen definieren
$LOCATION=$a
$DEVICE=/dev/sr1

# MP3-Files in das temporäre Verzeichnis kopieren
cp $LOCATION /tmp

# Spaces in Underlines konvertieren
for i in $LOCATION; do mv "$i" `echo $i | tr ' ' '_'`; done

# MP3-Files in WAV umwandeln
for i in /tmp/*.mp3; do mpg123 -w /tmp/`basename $i .mp3`.wav $i; done

# WAV-Files brennen
cdrecord dev=$DEVICE -eject speed=48 -pad -audio *.wav

# Temp-Files löschen
rm -r /tmp/*.wav && rm -r /tmp/*.mp3

Grade aus Langeweile entstanden

[Bild: Rz3JNLI.gif]
Meine Beiträge stehen unter der MIT-Lizenz:D

(09.04.2016 13:26)tk1908 schrieb:  externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.
26.05.2014 15:47
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #454
RE: Der Code-Schnippsel-Thread
Du kannst auch Parameter mit Leerzeichen übergeben, sie müssen nur in "-Zeichen stehen. Dann sparst Du dir das Namen konvertieren.
26.05.2014 16:06
Diese Nachricht in einer Antwort zitieren
gandro Online
Quälgeist

Beiträge: 8.955
Registriert seit: Jul 2008
Beitrag #455
RE: Der Code-Schnippsel-Thread
(26.05.2014 15:47)tk1908 schrieb:  
Code:
################################
# MP3-CDs via Konsole brennen  #
# Author: Tobias Koehler       #
# Mail: tk1908@gmail.com       #      
# Version 1.0                  #                            
################################
Grade aus Langeweile entstanden
Cool. :)

Genereller Shellscript-Tipp, auch wenn es hier nicht so wichtig ist, weil ist ja "works for me" Lösung:

Temporäre Pfade (wie /tmp) sollte man nicht hardcodieren, auf manchen Systemen ist das z.B. eine RAM-Disk mit wenig Speicher. Auch, was ist wenn ein anderes Script in /tmp gerade .mp3-Dateien ablegt? Dann wird die letzte Zeile da einem Programm die MP3-Dateien eines anderen Programm einfach weglöschen.

Um dies und weitere Probleme zu verhindern, gibt es mktemp. Das erstellt dir im voreingestellten temporäreren Verzeichnis ($TMP) eine Datei oder ein Order mit Zufallsnamen. Ausserdem stellt es sicher, dass es vorher noch nicht existiert. So gibt es garantiert keine Kollisionen mit anderen Programmen:

Code:
MEINTEMP=$(mktemp --tmpdir --directory mp3cd.XXXXXXX)

Das erstellt dir automatisch ein Verzeichnis, dessen Pfad ist dann in $MEINTEMP gespeichert. Beispiel:

Code:
$ MEINTEMP=$(mktemp --tmpdir --directory mp3cd.XXXXXXX)
$ echo $MEINTEMP
/tmp/mp3cd.BJecInG

Wenn du in deinem Code alle Vorkomnisse von /tmp mit $MEINTEMP ersetzt, dann hast du alle obigen Probleme automagisch gelöst. :)

So, dann gleich noch ein Tipp im Umgang mit temporären Dateien: Was passiert, wenn der User CTRL+C drückt, weil er merkt dass er die CD beispielsweise schon gerippt hat? Dann wird dein Script die MP3s da trotzdem rumliegen lassen, das könnte auch schöner sein. Darum gibt es trap. Das führt den da angegeben Befehl immer beim Beenden des Scripts aus: Egal ob es sauber durchgelaufen ist, oder es abgebrochen wurde.

Code:
MEINTEMP=$(mktemp --tmpdir --directory mp3cd.XXXXXXX)
trap 'rm -rf "$MEINTEMP"' EXIT

Verwendest du diesen Code kannst du die letzte Zeile (# Temp-Files löschen) streichen, denn dann wird dir Bash den Befehl rm -rf /tmp/mp3cd.BJecInG immer automatisch ausführen, sobal das Script beendet wird. Egal ob es schlicht sauber durchgelaufen ist, oder weil es der Benutzer abgebrochen hat :)
(Dieser Beitrag wurde zuletzt bearbeitet: 26.05.2014 16:18 von gandro.)
26.05.2014 16:15
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
tk1908 Offline
Unixer

Beiträge: 7.354
Registriert seit: Apr 2009
Beitrag #456
RE: Der Code-Schnippsel-Thread
@gandro

Da kommt Freude auf. b1 Vielen Dank.

Allerdings noch ne generelle Frage:

Wie sollte denn die LOCATION-Variable aussehen, wenn selbige als Parameter in folgender Form übergeben wird?

mp3cd "/data/beer/Hörspiele/Die\ Drei\ Fragezeichen/Original/076\ -\ 090/087\ -\ Wolfsgesicht/*.mp3"


Danke schon mal für die Antwort.

[Bild: Rz3JNLI.gif]
Meine Beiträge stehen unter der MIT-Lizenz:D

(09.04.2016 13:26)tk1908 schrieb:  externe HDD am Router? Klar ich tausch mein Auto gegen nen Tretroller mit Bremsklotz.
26.05.2014 16:40
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
mrshadowtux
Unregistered

 
Beitrag #457
RE: Der Code-Schnippsel-Thread
Wenn Du die "-Zeichen setzt, darfst du NICHT mit \ escapen. Wenn "-Zeichen gesetzt sind, einfach den Namen mit Leerzeichen hinsetzen. Wenn die "-Zeichen fehlen, so sind die \ notwendig.

EDIT: Bin mir unsicher, ob bei "-Verwendung das * funktioniert.
26.05.2014 16:47
Diese Nachricht in einer Antwort zitieren
gandro Online
Quälgeist

Beiträge: 8.955
Registriert seit: Jul 2008
Beitrag #458
RE: Der Code-Schnippsel-Thread
Ohne es getestet zu haben: Die einzige Zeile die meiner Meinung nach mit Leerzeichen Probleme hat, ist folgende:

for i in /tmp/*.mp3; do mpg123 -w /tmp/`basename $i .mp3`.wav $i; done

Einfach die beiden $i durch "$i" ersetzen, das müsste reichen und den neuen basename-Output ebenfalls mit " Quoten:

for i in /tmp/*.mp3; do mpg123 -w "/tmp/$(basename "$i" .mp3).wav" "$i"; done

Habe `` durch $() ersetzt, finde das lesbarer (besonders wenn es "`..`" sein soll), aber das ist Geschmackssache.

Übrigens, müsste bei der cdrecord-Zeile nicht ein /tmp/*.wav sein, anstatt nur ein *.wav?
(Dieser Beitrag wurde zuletzt bearbeitet: 26.05.2014 16:56 von gandro.)
26.05.2014 16:51
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Online
Quälgeist

Beiträge: 8.955
Registriert seit: Jul 2008
Beitrag #459
RE: Der Code-Schnippsel-Thread
(26.05.2014 16:47)mrshadowtux schrieb:  EDIT: Bin mir unsicher, ob bei "-Verwendung das * funktioniert.

Tut es nicht. Aber kann man ändern:
mp3cd "leer zeichen/ hier/ im quote drin/"*.mp3

Den Pfad escapen, das Pattern nicht.
(Dieser Beitrag wurde zuletzt bearbeitet: 26.05.2014 16:59 von gandro.)
26.05.2014 16:58
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
thosch97 Offline
All things have a right to grow

Beiträge: 9.843
Registriert seit: Feb 2010
Beitrag #460
RE: Der Code-Schnippsel-Thread
Ich würde noch LOCATION=${LOCATION:-.} und DEVICE=${DEVICE:-/dev/sr1} machen. Wenn übergeben (% DEVICE=/dev/sr0 mp3burn) wird es genommen, ansonsten ein Default-Wert (bzw. allgemein falls schon gesetzt, Langform wäre sowas wie [[ -z $FOO ]] || FOO=euda).

PGP-Key E384 009D 3B54 DCD3 21BF 9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
„Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
“Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
„Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
„Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“
26.05.2014 17:08
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste