すべてのメタデータを保持しながら、ffmpegを使用して.flacを.mp3に変換します


88

すべてのメタデータを保持したまま、ffmpegを使用して.flacを.mp3に変換するにはどうすればよいですか(つまり、.flacファイルのVorbisコメントを.mp3のID3v2メタデータに変換します)?


5
次回はffmpegスーパーユーザーでCLIの使用法に関する質問をする必要があることに注意してください。Stack Overflowは、プログラミングに関する質問専用です。また、FLACはVorbisコメントのみを公式にサポートしているので、「keep」ではなくID3v2に変換したいと思います。
llogan 2014

わかりました。質問を修正しました。StackOverflowでこのような質問(たとえば、これまたはこれ)を見たので、ここで質問し、私の知識を共有することは興味深いかもしれないと思いました。また、ffmpegタグがあるので、ここでソリューションを共有しないのはなぜですか?ffmpegは、多くの開発者によって多くのアプリケーションで使用されています。
Vito Gentile

3
ffmpegののタグは「FFmpegのコマンドラインツールの対話的な使用に関する質問は、スーパーユーザーに求めるべきである。」と言います。大したことではありませんが、私の意見では、トピックに関係のない質問が多すぎるので、指摘したいと思います。
llogan 2014

回答:


152

次のコマンドは、.mp3(320 kbps)で高品質を維持し、.flacファイルのメタデータはID3v2形式に変換され、.mp3ファイルに含めることができます。

ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3

1
「ffmpeg」を「avconv」に置き換える必要があるかもしれないことに注意する価値があります。
ショックバーナー2016

5
FWIW ffmpeg3.2は-map_metadata 0 -id3v2_version 3、ID3v1タグにコピーしませんが、指定する必要なしにFLACからID3v2にメタデータを自動的にコピーします。そのために別のツールを使用します。
ダイ

1
歌詞はまだコピーされません
user151496 2017年

1
複数の部分がある場合、flacを分割しますか?
Artyom 2017

1
@Artyomおそらく、スプリットポイントがマークされているflacと一緒にキューファイルがあるはずです。その場合は、shnsplit(コンソール)またはflacon(GUI)を使用してファイルを分割し、パーツをmp3に変換できます。flacが1つしかない場合は、そのためのcuiを作成するか、ffmpegの-ssおよび-tオプションを使用して各曲を切り取ります。

56

上記の完璧な答え。このコマンドでサブツリー内のすべてのFLACファイルをiTunesに追加するためにfindと一緒に使用します

find . -name "*.flac" -exec ffmpeg -i {} -ab 160k -map_metadata 0 -id3v2_version 3 {}.mp3 \;

結果のファイルをiTunesに自動的に追加するには、次のコマンドでiTunesインポートディレクトリを取得します。

find ~/Music/ -name "Automatically Add*"

結果例

/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized

次に、例えばを実行します

find . -name "*.mp3" -exec mv {} "/Users/sir/Music//iTunes/iTunes Media/Automatically Add to iTunes.localized/" \;

変換されたすべてのトラックをiTunesに自動的に追加します。


3
" / Users / sir "、lmao。
ハリー・スヴェンソン2018年

逸話:当社のすべてのユーザーは、3〜5文字に省略された星の名前を持っています。私のは「シリウス」です、短いサー;)
user2707001 2018年

認識されないオプション「名前」。
MonsterMMORPG 2018年

14

少しスペースを節約したい場合は、hydrogenaud.ioの推奨事項を試してください。

非常に高品質:最高のファイルサイズとハイファイ、家庭、または静かなリスニング、 -V0 (~245 kbps)-V1 (~225 kbps)-V2 (~190 kbps)または-V3 (~175 kbps)推奨されています。これらのVBR設定は通常、透過的な結果を生成します。これらのプリセット間には聞こえる違いが存在する場合がありますが、まれです。

ソース:http//wiki.hydrogenaud.io/index.php?title = LAME

ffmpegでこのオプションを使用したい場合は、-q:a 0エイリアスを使用する必要があります。

-qscale:a(またはエイリアス-q:a)で品質を制御します。値はエンコーダ固有であるため、libmp3lameの場合、範囲は0〜9であり、値が小さいほど品質が高くなります。通常、0〜3は透明な結果を生成し、4(デフォルト)は知覚的な透明度に近いはずであり、6は「許容できる」品質を生成します。このオプション-qscale:a-V、スタンドアロンのlameコマンドラインインターフェイスツールのオプションにマップされます。

出典:https//trac.ffmpeg.org/wiki/Encode/MP3

ID3v1メタタグも必要な場合は、-write_id3v1 1パラメーターを追加する必要があります。

したがって、私の最後のコマンドは次のとおりです。

ffmpeg.exe -y -i input.flac -codec:a libmp3lame -q:a 0 -map_metadata 0 -id3v2_version 3 -write_id3v1 1 output.mp3

8

私はinfile.flacファイルをに変換するために次のコマンドをテストしていましたoutfile.mp3

ffmpeg  -i infile.flac  -q:a 0  outfile.mp3

Ubuntu 16.04の時点で、上記のコマンドはメタデータ(ほとんど?すべて?)をコピーしているようです。

-q:a 0ffmpeg最高品質のVBRを使用するように指示します。

しかし、ffmpegから私のアルバムアートトランスコードされたjpegpngカバーアートのサイズを増加し、。

Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> png (native))
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

(上記の変換は、どのようにffmpeg機能するかを考えると理にかなっていると思います。)

少し掘り下げた後-c:v copy、ビデオストリームをトランスコードするのではなくコピーするように指定するオプションを見つけました。完全なコマンドは次のとおりです。

ffmpeg  -i infile.flac  -c:v copy  -q:a 0  outfile.mp3

上記のコマンドの結果は次のとおりです。

Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:0 -> #0:1 (flac (native) -> mp3 (libmp3lame))

3

ネストされたフォルダー内のすべてのflacファイルをmp3で再帰的に変換するには、次のコマンドを使用しました。

find '~/Music/' -iname '*.flac' -exec bash -c 'D=$(dirname "{}"); B=$(basename "{}"); mkdir "$D/mp3/"; ffmpeg -i "{}" -ab 320k -map_metadata 0 -id3v2_version 3 -acodec libmp3lame "$D/mp3/${B%.*}.mp3"' \;

それはflacファイルのあるものの中に「mp3」という名前のフォルダを作成し、mp3フォルダの中に、名前に古いファイル拡張子を保持せずに、320kbpsのビットレートで相対的なmp3ファイルを保存します。


3

ほとんどのメタデータを保持しながら、すべての.flacファイルを.mp31つのディレクトリに変換するワンライナー:

for file in *.flac; do ffmpeg -i $file -q:a 0 ${file:r}.mp3; done

(注:${file:r}指定されたファイルパスの拡張子を削除します)

ffmpeg:flacからmp3


$fileような変数を引用するだけ"$file"です。
ChazyChaz19年

:rzshで機能しない修飾子のようbashです。バッシュでは、置き換えることができ"${file:r}.mp3""${file%.flac}.mp3"
mivk

bashを使用してファイルからファイル名のみを表示するには${file%.*}
Evhz

2

これが聞かれなかったことは知っていますが、これが行われる理由の1つ(少なくとも私がやりたかったこと)を考えると、FLACをサポートしていないAppleiTunesに音楽をインポートできるようにするためです。このような場合、FLACをApple独自のロスレス形式であるm4aに変換する方が理にかなっています。このコマンドを使用して、同様のファイルサイズを維持しながら、現在のフォルダー内のすべてのファイルを変換しました。

find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;


認識されないオプション「名前」。引数リストの分割エラー:オプションが見つかりません
MonsterMMORPG 2018年

@MonsterMMORPGあなたはおそらく入力を逃しました。findコマンドの後。。findに現在のフォルダーを検索するように指示し、-nameは一致するファイル名を検索するように指示します。
Dhiraj Gupta 2018

2

このflac2mp3.shスクリプトはffmpeg、FLACファイルのフォルダーツリーをMP3ファイルの別のフォルダーツリーに変換するために使用します。存在する場合、カバーアートが含まれます。CORES変数を設定して、一度に複数のファイルを変換するバックグラウンドジョブを作成できます。


エラーsedを
返し

まさに私が探していたもの、ありがとう!私は少しここにアップロードされ、VBRや他の回答を組み込むためのスクリプトを調整する:要旨を
aksh1618
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.