J'ai pris tout ce que j'ai trouvé ici (et peut-être sur certains autres sites) et créé un petit outil pour non seulement créer des mp3 de flacs de manière récursive, mais aussi conserver des chemins relatifs pour les créer ailleurs avec un support multithread.
oh, et oui, je vois, je n'ai pas utilisé ffmpeg dans ce cas, parce que mon OSMC n'a pas fourni de paquets pour ffmpeg, seulement avconv, mais puisque vous êtes déjà là, je suppose que vous savez, c'est "fondamentalement" le même - au moins pour la partie la plus importante. Remplacez simplement la commande "avconv" par "ffmpeg". Mes premiers runs ont été avec le bac ffmpeg et exactement les mêmes options.
Je ne suis en aucun cas un hacker bash, mais je l'ai réussi, comme mon premier bashscript avec les demandes données, et peut-être que quelqu'un en bénéficiera. Je suis ouvert à toute suggestion de votre part, mais jusqu'à présent, cela fonctionne pour moi.
mon script pour faire tourner les 4 instances, une pour chaque cœur, est comme ceci:
#!/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"
Et le script de travail comme celui-ci:
#!/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
qui peut être trouvé à
https://github.com/erdnuesse/flac-to-mp3
Cordialement, Kay