Lame-すべての320kbps mp3を192kbps mp3に再エンコードする方法


9

タイトル通り。192kbpsに変換する必要がある320kbps形式のMP3がたくさんあります。現在lame --mp3input -b 192、同じ名前のファイルを作成する.mp3拡張子を追加して使用しています。だから私はで終わるfoo.mp3.mp3

ディレクトリを入力し、320kbpsのサブディレクトリをスキャンして192kbpsに変換し、見つかった場合は上書きできるようにする必要があります。ラメはこれのための最高のツールですか?

ありがとう

回答:


12

lame完全にこのタスクに適していますが、私は使用するつもりだffmpegffprobe彼らはただMP3ファイル以上に一般化することができるので、私は私の手の背中のようにそれらを知っているので、この答えのためにと。まず第一に:

sudo apt-get install ffmpeg

メディアファイルを読み取ってすぐに入力を上書きできるツールはありません。中間ファイルを使用する必要があります。単一のファイルの場合、次のことができます。

ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3
mv temp.mp3 file.mp3

これらを1行に組み合わせることができます。

ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3

&&ことが意味mvのコマンドがない限り実行されませんffmpeg(成功を意味する)0のステータスで終了します。

ファイルのビットレートを確認するには、次のコマンドを使用できますffprobe

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000'

-show_streamsffprobe個々のストリームに関する情報を表示するように指示します。どちらを選択する-select_streams指示し、a:0「最初のオーディオストリームを意味します(これは、ビデオストリームとして保存されるカバーアートの場合、MP3ファイルにとって重要です)。パイプ(|)はの標準出力を受け取り、ffprobeそれをに送りますgrepgrep指定したパターンに一致する行のみを印刷しますbit_rate=320000。この場合、文字列を含む行です。これを320k kbps MP3で実行すると、次のような行が表示されます。

bit_rate=32000

別のビットレートで実行すると、出力はまったく得られません。grepは一致に失敗し、ステータス1で終了します。これは、ffmpegコマンドでそのコマンドをチェーンできることを意味します。

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' && ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3

または、もう少し読みやすくします。

ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' &&
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 &&
mv temp.mp3 file.mp3

これは320 kbps MP3でのみ機能します。いくつかのテストファイルで試してください。

次のステップは、これを複数のファイルで機能させることです。これを行うには、forループとfindコマンドという2つの標準的な方法があります。以下は、ディレクトリ内のすべてのMP3に作用します。

for f in *.mp3; do 
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done

これはサブディレクトリに入りません。そのためには、globstarシェルオプションを設定する必要があります。

shopt -s globstar
for f in **/*.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done

find

find . -name '*.mp3' -exec sh -c 'ffprobe -show_streams -select_streams a:0 "$0" | grep -F "bit_rate=320000" &&
ffmpeg -y -i "$0" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$0"' '{}' \;

これらはすべて厳密に順次実行されます。一度に変換されるファイルは1つだけです。ただし、プロセッサーはそれ以上の能力を備えています。速度を上げるには、GNUを使用できますparallel

sudo apt-get install parallel
shopt -s globstar
parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' ::: **/*.mp3

または:

find . -name '*.mp3' | parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' 

壮大な答え。私はラメを使って一緒に何かを石畳みましたが、これは前に与えるつもりです。報告します。
Moif Murphy、2014

このエラーが発生します Unrecognized option 'select_streams' Failed to set value 'a:0' for option 'select_streams'
。– Moif Murphy、2014

:はavconvで、それを置き換えるavconv -i {} -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}
レペ

2

Lame このタスクを実行するために見つけることができる最高の1つです。

次のコマンドを使用できます lame -b 192 input.mp3 output.mp3

imはパイプコマンドには適していませんexiftoolが、mp3ファイルのビットレートを取得するために使用できます。

exiftool -AudioBitrate File.mp3 

しかし、あなたはまだmp3ファイルを見つけ、ビットレートをチェックし、変換するコマンドをパイプする方法が必要です...


2回編集、コマンドを修正してビットレートを追加
AdigaJo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.