Tôi đã lấy tất cả mọi thứ tôi tìm thấy ở đây (và có thể trên một số trang web khác) và tạo ra một công cụ nhỏ để không chỉ tạo ra các bản mp3 của flac theo cách đệ quy, mà còn giữ các đường dẫn tương đối để tạo chúng ở nơi khác với sự hỗ trợ đa luồng.
ồ, và vâng, tôi hiểu rồi, tôi đã không sử dụng ffmpeg trong trường hợp đó, bởi vì OSMC của tôi không cung cấp các gói cho ffmpeg, chỉ avconv, nhưng vì bạn đã ở đây, tôi đoán bạn biết, về cơ bản là " giống nhau - ít nhất là cho phần quan trọng nhất. Chỉ cần thay thế lệnh "avconv" bằng "ffmpeg". Lần chạy đầu tiên của tôi là với thùng ffmpeg và các tùy chọn chính xác giống nhau.
Tôi không có nghĩa là một hacker bash, nhưng tôi đã quản lý nó, như là bản bashs đầu tiên của tôi với các yêu cầu nhất định, và có thể ai đó sẽ được hưởng lợi. Tôi mở cho bất kỳ đề nghị từ phía bạn, nhưng cho đến nay nó hoạt động cho tôi.
kịch bản của tôi để tăng 4 trường hợp, một cho mỗi lõi, giống như sau:
#!/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"
Và kịch bản worker như thế này:
#!/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
có thể tìm thấy tại
https://github.com/erdnuesse/flac-to-mp3
Trân trọng, Kay