すべてのディレクトリとサブディレクトリを繰り返し、特定の拡張子を持つファイルを見つけて、FFMPEGを実行して新しいライブラリにコピーする方法

すべてのディレクトリとサブディレクトリを繰り返し、特定の拡張子を持つファイルを見つけて、FFMPEGを実行して新しいライブラリにコピーする方法

私は今日と昨日の解決策を見つけようと研究してきましたが、これまでどれも私には役に立ちませんでした。

たとえば、https://stackoverflow.com/questions/5784661/how-do-you-convert-an-entire-directory-with-ffmpeg

/Music/フォルダ内のすべてのファイル(たとえば)を繰り返し、で終わるすべてのディレクトリまたはサブディレクトリ内のファイルを見つけて、次のように.flacflacファイルを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検査前mkdirffmpeg検査後に削除する必要があります。

関連情報