すべてのメタデータを保持したまま、ffmpegを使用して.flacを.mp3に変換するにはどうすればよいですか(つまり、.flacファイルのVorbisコメントを.mp3のID3v2メタデータに変換します)?
すべてのメタデータを保持したまま、ffmpegを使用して.flacを.mp3に変換するにはどうすればよいですか(つまり、.flacファイルのVorbisコメントを.mp3のID3v2メタデータに変換します)?
回答:
次のコマンドは、.mp3(320 kbps)で高品質を維持し、.flacファイルのメタデータはID3v2形式に変換され、.mp3ファイルに含めることができます。
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
ffmpeg
3.2は-map_metadata 0 -id3v2_version 3
、ID3v1タグにコピーしませんが、指定する必要なしにFLACからID3v2にメタデータを自動的にコピーします。そのために別のツールを使用します。
上記の完璧な答え。このコマンドでサブツリー内のすべての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に自動的に追加します。
少しスペースを節約したい場合は、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
私はinfile.flac
ファイルをに変換するために次のコマンドをテストしていましたoutfile.mp3
:
ffmpeg -i infile.flac -q:a 0 outfile.mp3
Ubuntu 16.04の時点で、上記のコマンドはメタデータ(ほとんど?すべて?)をコピーしているようです。
-q:a 0
ffmpeg
最高品質のVBRを使用するように指示します。
しかし、ffmpeg
から私のアルバムアートトランスコードされたjpeg
のpng
カバーアートのサイズを増加し、。
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))
ネストされたフォルダー内のすべての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ファイルを保存します。
$file
ような変数を引用するだけ"$file"
です。
:r
zsh
で機能しない修飾子のようbash
です。バッシュでは、置き換えることができ"${file:r}.mp3"
て"${file%.flac}.mp3"
。
${file%.*}
これが聞かれなかったことは知っていますが、これが行われる理由の1つ(少なくとも私がやりたかったこと)を考えると、FLACをサポートしていないAppleiTunesに音楽をインポートできるようにするためです。このような場合、FLACをApple独自のロスレス形式であるm4aに変換する方が理にかなっています。このコマンドを使用して、同様のファイルサイズを維持しながら、現在のフォルダー内のすべてのファイルを変換しました。
find . -name "*.flac" -exec ffmpeg -i {} -map_metadata 0 -acodec alac {}.m4a \;
ffmpeg
、スーパーユーザーでCLIの使用法に関する質問をする必要があることに注意してください。Stack Overflowは、プログラミングに関する質問専用です。また、FLACはVorbisコメントのみを公式にサポートしているので、「keep」ではなくID3v2に変換したいと思います。