Saya mengambil semua yang saya temukan di sini (dan mungkin di beberapa situs lain) dan membuat alat kecil untuk tidak hanya membuat mp3 flac secara rekursif, tetapi juga melestarikan jalur relatif untuk membuatnya di tempat lain dengan dukungan multithread.
oh, dan ya, saya tahu, saya tidak menggunakan ffmpeg dalam kasus itu, karena OSMC saya tidak menyediakan paket untuk ffmpeg, hanya avconv, tetapi karena Anda sudah di sini, saya kira Anda tahu, itu "pada dasarnya" sama - setidaknya untuk bagian terpenting. Cukup ganti perintah "avconv" dengan "ffmpeg". Berjalan pertama saya adalah dengan bin ffmpeg dan opsi yang sama persis.
Saya tidak berarti seorang bash hacker, tetapi saya berhasil, sebagai bashscript pertama saya dengan tuntutan yang diberikan, dan mungkin seseorang akan mendapat manfaat. Saya terbuka untuk saran dari pihak Anda, tetapi sejauh ini itu berhasil untuk saya.
skrip saya untuk memutar 4 instance, satu untuk setiap inti, seperti ini:
#!/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"
Dan skrip pekerja seperti ini:
#!/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
yang dapat ditemukan di
https://github.com/erdnuesse/flac-to-mp3
Salam, Kay