Ich habe alles genommen, was ich hier (und vielleicht auch auf anderen Websites) gefunden habe, und ein kleines Tool erstellt, um nicht nur MP3s von Flacs rekursiv zu erstellen, sondern auch relative Pfade beizubehalten, um sie mit Multithread-Unterstützung an anderer Stelle zu erstellen.
oh, und ja, ich verstehe, ich habe ffmpeg in diesem Fall nicht verwendet, weil mein OSMC keine Pakete für ffmpeg, nur für avconv, zur Verfügung stellte, aber da Sie bereits hier sind, schätze ich, wissen Sie, dass es "im Grunde" das ist das Gleiche - zumindest für den wichtigsten Teil. Ersetzen Sie einfach den Befehl "avconv" durch "ffmpeg". Meine ersten Läufe waren mit dem ffmpeg bin und genau den gleichen Optionen.
Ich bin auf keinen Fall ein Bash-Hacker, aber ich habe es geschafft, als mein erstes Bash-Skript mit den gegebenen Anforderungen, und vielleicht wird jemand davon profitieren. Ich bin offen für alle Vorschläge von Ihrer Seite, aber bisher funktioniert es für mich.
Mein Skript zum Hochfahren der 4 Instanzen, eine für jeden Kern, sieht folgendermaßen aus:
#!/bin/bash
# this should be quite self-explanatory
for i in {1..4}
do
echo "started instance no: $i"
/home/osmc/transform.sh . &
# sleeping time can be shorter, this is just so, that
# not all 4 processes will want to start with the same
# file, during runtime collisions should not become an issue
sleep 5
done
echo "all instances started"
Und das Arbeitsskript sieht so aus:
#!/bin/bash
# take care of spaces
IFS=$'\n'
# my music folders, remote is the source, local the target dir
remote=/mnt/music/FLAC
local=/mnt/1tb/mp3
# for all flac files start loop
for i in $(find $remote -type f -iname '*.flac' );
do
## SET VARIABLES for PATHS and FILENAMES
## this might be able to be super short with sed and complex one-liner,
## but I s*ck at regex
fullfile=$i
# strip extension
filename="${i##*/}"
# add new extension
filename="${filename%.*}.mp3"
# get full dirname from inputfile
fulldir=$(dirname "${i}")
# strip leading dirs from full input dir
# count the dirs, add two, then you're good.
reldir="$(echo $fulldir | cut -d'/' -f5-)"
# some subdirs in my collection even have a flac subdir, you might
# ignore this, it strips only if it exists
reldir=${reldir//flac}
# combine target dir and relative dir
outdir="$local/$reldir"
# generate the full output filename for conversion
outfile="$outdir/$filename"
# create whole target directory - yes, I need it only once, but hey,
# it works, didn't want to start a if not exist statement... should I?
mkdir -p "$outdir"
# run conversion - finally... you may want or need to replace
# "avconv" with "ffmpeg"
avconv -n -nostats -loglevel info -i "$fullfile" -codec:a libmp3lame -qscale:a 0 "$outfile"
done
Die finden Sie unter
https://github.com/erdnuesse/flac-to-mp3
Grüße, Kay