コマンドラインでavconv
を使用して、いくつかの.apeファイルを.flacファイルに変換しようとしました。明らかに、avconv
はここでは主要なポイントではありません。 avconv -i inputApeFile.ape outputFlacFile.flac
という構文は非常に単純です。
ポイントは、ファイルがより多くのサブフォルダーにネストされていることです。つまり、Artistフォルダーと、さまざまなCDサブフォルダーがあり、それぞれに異なる.apeファイルが含まれています。すべてのファイルを変換し、元のファイルと同じフォルダーに保存しますが、拡張子は.flacにするにはどうすればよいですか?
可能であれば、スクリプトを使用せずに1行でシェルコマンドのみを使用したいと思います。私はそれがそのようなものであるべきだと思う
avconv -i 'ls -R | grep ape' '???'
しかし、私は2番目の部分で立ち往生しています(おそらくsed
??!??を使用)
必要なコマンドは次のとおりです。
find /path/to/MainDir/ -type f -name "*.ape" -execdir sh -c ' avconv -i "$1" "${1%.ape}.flac" ' _ {} \;
これにより、.ape
接尾辞を持つ各ファイルが検索され、.flac
接尾辞を持つ同じファイル名で元のファイルと同じ場所に変換されます。
{}
は、現在見つかっているファイルのパスです。
here のテストを参照してください
以下の(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
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 "$@"' _ "{}"