私は今日と昨日の解決策を見つけようと研究してきましたが、これまでどれも私には役に立ちませんでした。
たとえば、https://stackoverflow.com/questions/5784661/how-do-you-convert-an-entire-directory-with-ffmpeg
/Music/
フォルダ内のすべてのファイル(たとえば)を繰り返し、で終わるすべてのディレクトリまたはサブディレクトリ内のファイルを見つけて、次のように.flac
flacファイルをalacファイルに変換できるようにします。
ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"
$i 変数は for ループ内のファイルの「名前」です。${i%.*}
.flac部分ではなく名前のみを返す必要があります。
とにかく、このコマンドを実行した後、保存されたすべての.m4a alacファイルを「新しいライブラリ」に転送したいのですが…IE:/Music/
ライブラリが2つあります。
1つはすべてのflacファイルを保持します。
1 つにはすべての alac(m4a) ファイルがあります。
可能ですか?
これは今まで私が持っていたコマンドですが、まったく機能しません。for i in *.flac; do ffmpeg -i "$i" -c copy -acodec alac "${i%.*}.m4a"; done
現在のコマンドでエラーが発生します*.flac: No such file or directory
。これは、サブディレクトリを検索しないためだと思いますか? ...
答え1
#!/bin/bash
shopt -s globstar
src_dir="Music"
dest_dir="Music_new"
for orig_path in "${src_dir}"/**/*.flac; do
#Change first directory in the path
new_path=${orig_path/$src_dir/$dest_dir}
#Remove filename from new path. Only directories are left.
#They are needed for mkdir
dir_hier=${new_path%/*}
#Remove extension .flac from path, thus we have original path with first directory
#changed and file extension removed.
#Original path: "Music/one/two/song.flac"
#New path: "Music_new/one/two/song"
new_path=${new_path%.*}
echo mkdir -p "$dir_hier"
#New path with extension: "Music_new/one/two/song.m4a"
#ffmpeg should create new file by this path, necessary directories
#already created by mkdir
echo ffmpeg -i "$orig_path" -c copy -acodec alac "${new_path}.m4a"
done
echo
検査前mkdir
、ffmpeg
検査後に削除する必要があります。