私はフォーラムからさまざまなオプションを試しましたが、それらのほとんどは時代遅れです(ffmpegは-sameqオプションのようにそれについて教えてくれます)。ドキュメントを理解しようとしていますが、理解できません。
私はffmpegでwmaからmp3に再帰的に変換する方法を知りたいです。たとえば、出力の最大ビットレートは192kbpsです(元が128kbpsの場合は192ではありません)
14Kのwmaファイルが多くのディレクトリに広がっている場合を除きます。それで、私はそれらを動かしたくありません。ファイル名とメタデータを保持したまま変換し、作成できるtxtファイルから変換するファイルのリストを読み取れる場合は、それらを削除します(1行に1ファイル)。これを使用して、再帰検索を実行し、貼り付けます。
助けてくれてありがとう。また、Ffmpegについての説明に感謝します。
カロキソ
PS:Soundconverterは以前は良好でしたが、低速でした。今はどちらでもありません。私のように、多くの場合、14.04では機能しません。 Soundkonverterを使用していますが、非常に遅いです。したがって、これらすべては、この推奨事項を防ぐためのものです。そして、この強力なffmpegの使い方を学びたいです!およびCLI
注:以下のスクリプトは、最初の変換で機能していました。しかし、私が説明できない何らかの理由で、mp3を残さずに、変換中のwmaを突然削除しました。そこで、私は再び「未解決」に変更しました(誰かの問題を時折防ぐため)。問題はavconv「アプリケーションがストリーム0でマルチプレクサに単調に増加しない無効なdtsを提供したようです:23606> = 21720」(このバグの開発に興味がある人がいる場合、コメントにペーストビンがあります)。したがって、将来avconvはありません。
これは、brewにavconvがないMacで、現在のディレクトリ内のすべてのファイル(名前にスペースが含まれている場合に機能する)をffmpegに使用するコマンドです。
for file in *.wma; do ffmpeg -i "${file}" -acodec libmp3lame -ab 192k "${file/.wma/.mp3}"; done
ターミナルで、最初にcd
を使用して、すべての音楽を含むフォルダーを参照します。例:
cd /home/username/music/wma-to-convert
以下は、現在のフォルダー内のすべてのファイルと「wma」で終わるすべてのサブフォルダーのリストを作成し、wma-files.txt
というテキスト文書にリストを保存します。
find . -type f | grep wma$ > wma-files.txt
または、必要に応じてテキストファイルを手動で作成することもできます。次に、テキストエディタで次のように入力し、wma-files.txt
と同じディレクトリに保存します。たとえば、conv-script
という名前を付けます。
#!/usr/bin/env bash
readarray -t files < wma-files.txt
for file in "${files[@]}"; do
out=${file%.wma}.mp3
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:.*=\(.*\)[0-9][0-9][0-9][.].*:\1:" | head -1`
ffmpeg -i "$file" -ab "$rate"k "$out"
done
おそらくスクリプトで実行可能ビットを設定する必要があります。
chmod +x conv-script
次に、それを実行するだけです:
./conv-script
ffmpeg
行の最後にこれを追加するオプションもありますが、注意してください:
&& rm "$file"
Avprobeにアクセスできない場合は、同等の処理を行うffprobeを使用できます(つまり、bit_rateを取得します)。それを行うには:
交換:
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:bit_rate=\([0-9]\+\)[0-9]\{3\}:\1:" | head -1`
で:
rate=`ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "$file"`
これが完了すると、すべてのファイルの変換が開始され、wmaオリジナルが削除されます!これはflacファイルをmp3に変換するのに非常に役立ちました。残念ながら、テストするwmaはありませんが、それらにも同様にうまくいくはずです。
注:私は問題を予見しませんが、いくつかのファイルを新しいディレクトリにコピーし、それらでテストすることをお勧めします。
Wmaをmp3に頻繁に変換する場合、以下のスクリプトは、引数として指定されたフォルダー内のすべてを自動的に変換および削除します。上記を少し改善します。さらに、ffmpegコマンドは最初に提案されたコマンドとは少し異なります。最初のコマンドが機能しない場合は、以下のコマンドを使用してください。
#!/usr/bin/env bash
cd "$1"
find . type f | grep wma$ > wma-files.txt
readarray -t files < wma-files.txt
for file in "${files[@]}"; do
out=${file%.wma}.mp3
ffmpeg -i "$file" -map_metadata 0:s:0 $out"
done
rm wma-files.txt
次に、ターミナルに次のように入力して呼び出します。
./convScript /home/username/music
したがって、すべての音楽フォルダーとそのサブフォルダーのwma音楽は自動的にmp3に変換されます。
前と同様に、ファイル削除のためにffmpeg
行の最後にこれを追加できます。
&& rm "$file"
編集(2017/06/23):rm
をデフォルトにしない
すべてのバージョン
Mplayerでこれを行うきちんとした方法を見つけました。このスクリプトは、ファイル名を変更してファイル名をすべて削除し、現在のディレクトリのすべての.wmaファイルを.mp3に再帰的に変換します。
#!/bin/bash
for f in *.wma; do
newname=`echo $f | tr ' ' '_' `
mv "$f" $newname
f=$newname
mplayer $f -novideo -ao pcm:file=tmp.wav
lame -V 0 -q 0 tmp.wav ${f/.wma/.mp3}
rm -f tmp.wav
done
ワンライナー版は次のとおりです。
for f in *.wma; do; newname=`echo $f | tr ' ' '_' `; mv "$f" $newname; f=$newname; mplayer $f -novideo -ao pcm:file=tmp.wav; lame -V 0 -q 0 tmp.wav ${f/.wma/.mp3}; rm -f tmp.wav; done
これらの変更を加えて、TheSchwaスクリプトを書き換えます(TheSchwa!に感謝します)。
rm
でファイルを削除しないでください(通常、コンバーターはファイルを削除しません。これは大きな驚きです!)。#!/bin/bash
which ffmpeg > /dev/null || { echo "Install ffmpeg, with 'Sudo apt-get install ffmpeg'" >&2; exit 1; }
which avprobe > /dev/null || { echo "Install libav-tools, with 'Sudo apt-get install libav-tools'" >&2; exit 1; }
output_format=mp3
file=`mktemp`
find . -type f | grep -i wma$ > $file
readarray -t files < $file
for file in "${files[@]}"; do
out=${file%.wma}.$output_format
probe=`avprobe -show_streams "$file" 2>/dev/null`
rate=`echo "$probe" | grep "^bit_rate" | sed "s:bit_rate=\([0-9]\+\)[0-9]\{3\}:\1:" | head -1`
ffmpeg -i "$file" -ab "$rate"k "$out"
done
これは parallel を使用したbashスクリプトです。
#!/bin/bash
parallel -i -j$(nproc) ffmpeg -i {} -acodec libmp3lame -ab 192k {}.mp3 ::: ./*.wma
rename 's/.wma//' *.wma.mp3
注:以下は15.04、15.10または16.04には適用されません
最初:
ffmpegは14.04で非推奨になり、代わりにavconv
を使用する必要があります。
Sudo apt-get install avconv
このコマンドを使用して、wmaファイルをmp3に再帰的に変換します。
for i in `find . -type f -name '*.wma'`; do avconv -i "$i" "${i/.wma/.mp3}"; done
次に、ファイルの品質を確認したら、このコマンドを実行して、元の.wmaバージョンを再帰的に削除または削除できます。
for i in `find . -type f -name '*.wma'`; do rm "$i"; done
次:
代わりにスクリプトでコマンドを使用する方法を次に示します(名前は「wma2mp3」:
Sudo nano /usr/local/bin/wma2mp3
これをコピーしてファイルに貼り付けます。
#!/bin/bash
for i in `find . -type f -name '*.wma'`; do avconv -i "$i" "${i/.wma/.mp3}"; done
押す ctrl + o を押して enter ファイルを保存して使用するには ctrl + x 出る。
次に、次のコマンドでファイルを実行可能にします。
Sudo chmod +x /usr/local/bin/wma2mp3
これで、コマンドwma2mp3
を実行して、すべてのwmaファイルをmp3に再帰的に変換できます。
スクリプトで同じことを行い、すべてのwmaファイルを消去して、好きな名前を付けます。
ところで、現在のディレクトリ内のすべてのファイルのみを変換する場合(他のすべての後続の再帰ディレクトリ全体ではなく)、代わりにこのコマンドを使用できます。
for i in *.wma; do avconv -i "$i" "${i/.wma/.mp3}"; done
そしてもちろん、現在のディレクトリのwmaファイルのみを削除するには、次のコマンドを使用します。
rm *.wma