ステレオ MP3 がたくさんあるので、モノラルに変換したいです。これを行うには、どのような方法が一番いいでしょうか? バッチ処理できるものがいいと思います。品質はできる限り元の品質に近づけたいです。ファイルのビットレートもそれぞれ異なるので、一部のファイルが 128kpbs しかないのに、すべてのファイルを 320kpbs にするのは避けたいです。
また、ライブラリ全体のうちどのファイルがステレオであるかを素早く確認する方法はありますか?
答え1
ステレオからモノラルに変換すると再エンコードが必要になるため、同じビット レートを維持することは意味がありません。実際、128 kbit/s MP3 を新しい 128 kbit/s MP3 に変換すると、たとえ 2 番目がモノラルであっても (したがって、同じ主観的品質を得るにはより低いビット レートが必要です)、品質はひどく低下します。
通常、MP3 には可変ビット レート (VBR) 設定を使用します。これは特定の品質をターゲットにし、エンコーダーが必要なビット レートを設定できるようにします (完全に無音のオーディオには、ダブステップよりも低いビット レートが必要なホエールソングよりも低いビット レートが必要です)。コマンドラインから、ffmpeg はオプションを使用してオーディオをモノラルに変換できます-ac 1
。
ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3
見るこのページの使用ガイドについては、 を-q:a
参照してください。このページの表はステレオ オーディオを対象としていることに注意してください。実際に表示されるビット レートはいくらか低くなります。通常は 3 ~ 4 を推奨しますが、オリジナルの CD ではなく MP3 からエンコードするので、もう少し高い値を目指す必要があります。
もちろん、これは非常に簡単に自動化できます。Linux/OSX/その他のUNIX系では、MP3のディレクトリを変換するには、次のようにします。
for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done
再帰的に実行するには:
find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;
GNU Parallel とマルチコアマシンをお持ちの場合は、これが役に立つかもしれません:
find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}
答え2
答え3
Lame は -m スイッチを使用してファイルをモノラルに変換できます。利点はメタ タグが保持されることです (ffmpeg でもそれができるかどうかはわかりません)。
ここでは、可変ビットレート品質オプションの 1 つを使用してトランスコードする前に、mp3 のビットレートを決定するやや複雑な例を示します。
猫s2mono.sh #!/bin/bash mp3ファイル=$@ mp3サイズ(){ du -sk "$1" | awk '{$1 * 8 を印刷}' } mp3長さ(){ id3info "$1" | \ awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {print len}' } mp3rate() { echo $(( `mp3size "$1"` / `mp3length "$1"` )) } ビットレート=`mp3rate "$mp3file"` [ $bitrate -gt 155 ]の場合、VBR='-V4'; [ $bitrate -gt 190 ]の場合、VBR='-V2'; [ $bitrate -gt 249 ]の場合、VBR='-V0'; $mp3file のエコー ダウンサンプリング lame --silent $VBR -mm --mp3input "$mp3file" \ "$(ベース名 "$mp3file" .mp3 )-mono.mp3"
私は、ステレオ形式のすべての mp3 の合計サイズが 80 MB のフォルダーでこれを実行しました。結果として得られたモノラル mp3 は、わずか 32 MB しか消費しませんでした。
find . -iname \*mp3 -print0 |xargs -0 -L1 sh s2mono.sh
(...)
du -skc *-mono.mp3| tail -n1
32376 total
find . -iname \*mp3 |grep -ve '-mono' |\
while read f; do du -sk "$f" ;done |\
awk '{ tot+=$1} END{print tot}'
80112
質問の最後の部分については、次file
のようにします。
find /R/audio/muzica/_ripped/wav -exec file {} \+ |grep Monaural
答え4
これは私が見つけた最も簡単な方法です
私は.mp3; ffmpeg -i "$i" -ac 1 "${i% を実行します。} - mono.mp3"; 完了
同じ方法で、他のオーディオ形式からmp3への変換やモノラルへの変換も可能
私は.m4b; ffmpeg -i "$i" -ac 1 "${i%. を実行します。} - mono.mp3"; 完了