Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Hoe in BASH input namen omzetten naar output naam met een toevoeging?  (gelezen 1056 keer)

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Bij het converteren van FLAC naar MP3 wil ik bestandsnamen omzetten voor output file. Input is "/Music/map_artiest/song.flac". In bash wil ik die omzetten voor output file:  "/Music/map_artiest_mp3/song.mp3"
De rest van de code is al compleet:
for a in "`find ./ -name "*flac"`"; do
OUTF=?
flac -c -d "$a" | lame -V0 - "$OUTF"
done

Op de plaats van de ? moet het output filename komen te staan. Op de manier die hierboven staat: "/Music/map_artiest_mp3"/song.mp3.
Bijv van "/Music/AC_DC/Thunderstruck.flac" naar "/Music/AC_DC_mp3/Thunderstruck.mp3" Dat voor alle albums met liedjes in flac formaat.
« Laatst bewerkt op: 2014/04/09, 12:39:21 door bartveurink »

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #1 Gepost op: 2014/04/09, 13:43:07 »
De wiki van Archlinux heeft wel een aantal leuke scripts: https://wiki.archlinux.org/index.php/Convert_Flac_to_Mp3#Without_FFmpeg


Edit: ik zie net dat je ook de directory wil aanpassen. Hiervoor moet je een aantal tussenstappen doen.

Na de for... line kan je dit toevoegen:
dir="$(dirname "$a")_mp3"
base="$(basename "$a")"
base="${base[@]/%flac/mp3}"
OUTF="$dir/$base"

Niet getest, maar zoiets zou moeten werken. Let er wel op dat de nieuwe dir wel moet bestaan voordat je er bestanden in kan zetten. Met een mkdir -p "$dir" voordat je het flac commando uitvoert heb je dat ook weer opgelost.

De 2e en 3e regel zouden overigens ook wel in 1 regel kunnen, maar daar wordt het niet echt overzichtelijker of duidelijker van.
« Laatst bewerkt op: 2014/04/09, 14:11:57 door Johan van Dijk »

Offline Paul Matthijsse

  • Lid
  • Steunpunt: Ja
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #2 Gepost op: 2014/04/09, 13:59:54 »
Uit mijn 'handig'-lijstje, ergens ooit eens uit een forum gevist:

flac -> mp3:
$ find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 64k {}.mp3 \;
If you don't like the .flac.mp3 thing, you can rename easily:
rename 's/\.flac//' *.mp3

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #3 Gepost op: 2014/04/09, 14:55:49 »
De wiki van Archlinux heeft wel een aantal leuke scripts: https://wiki.archlinux.org/index.php/Convert_Flac_to_Mp3#Without_FFmpeg


Edit: ik zie net dat je ook de directory wil aanpassen. Hiervoor moet je een aantal tussenstappen doen.

Na de for... line kan je dit toevoegen:
dir="$(dirname "$a")_mp3"
base="$(basename "$a")"
base="${base[@]/%flac/mp3}"
OUTF="$dir/$base"

Niet getest, maar zoiets zou moeten werken. Let er wel op dat de nieuwe dir wel moet bestaan voordat je er bestanden in kan zetten. Met een mkdir -p "$dir" voordat je het flac commando uitvoert heb je dat ook weer opgelost.

De 2e en 3e regel zouden overigens ook wel in 1 regel kunnen, maar daar wordt het niet echt overzichtelijker of duidelijker van.

In regel 6 krijg ik deze foutmelding:

flac2mp3.sh: 6: flac2mp3.sh: Bad substitution

Dat is deze regel:
base="${base[@]/%flac/mp3}"

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #4 Gepost op: 2014/04/09, 15:14:57 »
Dat werkt hier wel goed, zelfs met een bestand met gekke tekens er in.

Gebruik je wel Bash en niet Dash?
Wat staat er helemaal bovenaan je script en hoe start je hem?

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #5 Gepost op: 2014/04/09, 15:26:06 »
Bovenaan staat:
#!/bin/bash

Starten met:
sh flac2mp3.sh

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #6 Gepost op: 2014/04/09, 15:42:40 »
Mij leek eerst de permissies en eigenaren onjuist. Bleek toch niet het geval te zijn. Nog steeds een error.
« Laatst bewerkt op: 2014/04/09, 16:01:36 door bartveurink »

Offline Johan van Dijk

  • Administrator
    • johanvandijk
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #7 Gepost op: 2014/04/09, 16:45:15 »
Je moet je script niet starten met sh, want dat is Dash.
johan@desktop:~$ which sh
/bin/sh
johan@desktop:~$ file /bin/sh
/bin/sh: symbolic link to `dash'

Hoe het wel moet: ./flac2mp3.sh  dus een punt, een slash en daarna de naam.
Nog makkelijker: noem het flac2mp3 en zet het in /home/bart/bin.
Hierna even je terminal afsluiten en opnieuw starten, daarna kan je hem vanuit overal uitvoeren met enkel 'flac2mp3'.

Offline MauRice2

  • Lid
  • Steunpunt: Nee
Re: Hoe in BASH input namen omzetten naar output naam met een toevoeging?
« Reactie #8 Gepost op: 2014/04/09, 20:34:08 »
Bart,

Je kan met de opdracht basename ook de bestand naam hebben zonder de extensie.
Dan wordt het:
base="$(basename "$a" .flac)"
Zie ook man basename.

En je output bestand wordt dan:
OUTF="$dir/$base.mp3"

Dan maak het volgens mij niet uit of je met bash of dash uitvoert via sh.
MvG,
MauRice
Registered Linux user: 473556