すべての.apeファイルを異なるサブフォルダーの.flacに変換する


9

avconvコマンドラインで.apeファイルを.flacファイルに変換しようとしていました。明らかに、avconvここでは主なポイントではありません。その構文はかなり単純ですavconv -i inputApeFile.ape outputFlacFile.flac

ポイントは、ファイルがより多くのサブフォルダーにネストされていることです。つまり、Artistフォルダーと、さまざまなCDサブフォルダーがあり、それぞれに異なる.apeファイルが含まれています。すべてのファイルを変換し、元のファイルと同じフォルダに.flac拡張子を付けて保存するにはどうすればよいですか?

可能であれば、スクリプトを使用せずに1行でシェルコマンドのみを使用したいと思います。そういうものになると思います

avconv -i 'ls -R | grep ape' '???'

しかし、私は2番目の部分で立ち往生しています(多分sed??!?を使用しています)

回答:


13

必要なコマンドは次のとおりです。

find /path/to/MainDir/ -type f -name "*.ape"  -execdir sh -c ' avconv -i "$1" "${1%.ape}.flac" ' _ {} \;

これにより、.apeサフィックスを持つ各ファイルが検索され、同じファイル名に.flacサフィックスを付けて、元のファイルと同じ場所に変換されます。

{}現在見つかったファイルのパスです。 ここ
からテストを見る


1

以下の(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

返信と時間をありがとうジェイコブ。ただし、可能であれば、スクリプトを使用せずに1行でシェルコマンドのみを使用します(申し訳ありませんが、以前にこれを指定する必要がありました)
tigerjack89

1
@ tigerjack89まあ、おそらく誰かが同じような状況でそれを使用することができます。構文<command> <inputfile> <outputfile>はかなり一般的です。
Jacob Vlijm 2014年

0

今では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 "$@"' _ "{}"

-1

探していた1行のコマンド:
find -type f -name "*.ape" -print0 | xargs -0 avconv -i
findcommandは、.apeで 終わるファイルのみを提供します。コマンドは
findコマンドへの相対パスを提供するavconvので、それらのファイルを変換し、入力ファイル(つまり、.ape)と同じフォルダーに保持できます。
findコマンドは、それらがサブディレクトリにどれだけ深く保持されているかに関係なく、そのディレクトリ内のすべてのファイルを検索します


2
これは機能しません。avconvそのようなSTDINから入力ファイルを取得することはできません。
evilsoup 2014年

1
出力フォルダはどうですか?
tigerjack89 14年

@evilsoup回答を更新しました。xargsで問題を解決できます。これを試してみてください。
エドワードトーバルズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.