![すべての .ape ファイルを異なるサブフォルダ内の .flac に変換する](https://rvso.com/image/1048300/%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%20.ape%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%95%B0%E3%81%AA%E3%82%8B%E3%82%B5%E3%83%96%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%86%85%E3%81%AE%20.flac%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B.png)
avconv
私はコマンドラインを使用していくつかの .ape ファイルを .flac ファイルに変換しようとしていましたが、明らかに、avconv
それはここでの主題ではありません。その構文は非常に簡単ですavconv -i inputApeFile.ape outputFlacFile.flac
。
ポイントは、ファイルが複数のサブフォルダにネストされていることです。つまり、Artist フォルダがあり、その下にさまざまな CD サブフォルダがあり、それぞれに異なる .ape ファイルが含まれています。すべてのファイルを変換し、元のファイルと同じフォルダに .flac 拡張子を付けて保存するにはどうすればよいでしょうか。
可能であれば、スクリプトを使わずにシェルコマンドのみを1行で使用したいのですが、次のような感じになると思います
avconv -i 'ls -R | grep ape' '???'
しかし、2 番目の部分で行き詰まっています (おそらくsed
??!? を使用しています)
答え1
必要なコマンドは次のとおりです。
find /path/to/MainDir/ -type f -name "*.ape" -execdir sh -c ' avconv -i "$1" "${1%.ape}.flac" ' _ {} \;
これにより、サフィックスを持つ各ファイルが検索され.ape
、サフィックスを持つ同じファイル名で、.flac
元のファイルと同じ場所に変換されます。
{}
現在見つかったファイルのパスです。
テストはここ
答え2
以下の (python) スクリプトで十分です。これを空のファイルにコピーし、 として保存しconvert.py
、ディレクトリをスクリプトのヘッドセクション ( convert_dir =
) のファイルに設定して、次のコマンドで実行します。
python3 /path/to/convert.py
スクリプト
#!/usr/bin/env python3
convert_dir = "/path/to/folder/tobeconverted"
import os
import subprocess
for root, dirs, files in os.walk(convert_dir):
for name in files:
if name.endswith(".ape"):
# filepath+name
file = root+"/"+name
# to use in other (convert) commands: replace the "avconv -i" by your command, and;
# replace (".ape", ".flac") by the input / output extensions of your conversion
command = "avconv -i"+" "+file+" "+file.replace(".ape", ".flac")
subprocess.Popen(["/bin/bash", "-c", command])
else:
pass
答え3
今では再び ffmpeg が avconv よりも好まれ、安価な多コア コンピューター (8 コアの XU4 で 60 ドル) もあるので、次の方法が最も効果的であることがわかりました。
#!/bin/bash
#
# ape2flac.sh
#
function f2m(){
FILE=$(echo "$1" | perl -p -e 's/.ape$//g');
if [ ! -f "$FILE".flac ] ; then
ffmpeg -v quiet -i "$FILE.ape" "$FILE.flac"
fi
}
export -f f2m
find "$FOLDER" -name '*.ape' | xargs -I {} -P $(nproc) bash -c 'f2m "$@"' _ "{}"
答え4
あなたが探していた1行のコマンド:
find -type f -name "*.ape" -print0 | xargs -0 avconv -i
find
コマンドは、.ape
コマンドはコマンドfind
への相対パスを与えるavconv
ので、それらのファイルを変換して入力ファイル(.apeなど)と同じフォルダに保存することができます。
find
コマンドは、サブディレクトリの深さに関係なく、そのディレクトリ内のすべてのファイルを検索します。