複数の.mp3ファイルを1つの.mp3に連結する


46

ここで提案されているように、catコマンドを使用して複数の.mp3ファイルを1つの.mp3ファイルに連結しています。

現在のフォルダーに次の.mp3ファイルがあると想像してください。

001001.mp3 001002.mp3 001003.mp3 001004.mp3 001005.mp3

または、このように:

096001.mp3 096002.mp3 096003.mp3 096004.mp3

これらの.mp3ファイルを昇順で連結する必要があります。つまり、 001001.mp3+001002.mp3+001003.mp3+etc.

これらの.mp3ファイルを1つに結合するために、現在のフォルダーで次のコマンドを実行しています。

cat *.mp3 > final.mp3

最終的な.mp3ファイルをテストしましたが、これは予想どおりですが、上記のコマンドが昇順でファイルを選択することを確認する必要があります。

上記のコマンドが常に昇順でファイルを連結することを確認できますか?

ありがとう卿を

回答:


46

catこの仕事に適したツールではありません。MP3形式には、ファイルの先頭と末尾に潜む可能性のあるあらゆる種類のジャンクがありますが、これを取り除く必要があります。mp3wrapあなたが望むものです。ファイル内のメタデータを除外し、音声を結合します。

sudo apt-get install mp3wrap
mp3wrap output.mp3 *.mp3

それを行う前に、実行ls *.mp3してそれらが正しい順序であることを確認してください。私が最初にこの答えを書いたとき(6年以上前!)、ワイルドカードグロブは明らかにうまく動作しませんでしたが、今はそうなっていると思います。

たとえば、番号が付けられているがゼロ詰めではなく、{1-11}.mp3でソートされる場合、ファイルの名前を変更する必要があります1 10 11 2 3 4 5 6 7 8 9これは簡単に修正できます。


2
正しい-catは、単一のmp3ファイル内にmp3ファイルの「配列を作成」することで、mp3ファイル形式を破壊します。しかし、プレーヤーソフトウェアが十分にスマートであれば機能しているようです。

それは、ファイル名にスペースを持つMP3ファイルを処理しますので、これは、私にとってより良い働い:find . -maxdepth 1 -iname '*.mp3' -print0 | sort -z | xargs -0 mp3wrap output.mp3
bmaupin

@bmaupin公平な点ですが、なぜBashのワイルドカード拡張を使用しなかったのかはわかりません。*.mp3十分である必要があります(そしてスペースで動作します)。
オリ

brew package manager からMacで利用可能!$ brew install mp3wrap
ルーベンス

1
bashでは、*.mp3アルファベット順が維持されることが保証されています。あなたのファイルに名前が付いている場合は09.mp310.mp311.mp3、それはあなたが望むものはおそらくです。あなたのファイルに名前が付いている場合は9.mp310.mp311.mp3、それはあなたが望むものはおそらくありませんが、あなたは行うことができます`ls *.mp3 | sort -n`
ジョーリス

27

mp3wrapは十分な解決策のようですが、結果のファイルを再生したときにタイムスタンプが正しくありませんでした。後で分割したいことがわかっているファイルにmp3を結合する場合は、mp3wrapが最適に使用されるようです。

単にいくつかのmp3を恒久的に連結したかっただけです。最終的に、ffmpegを使用してファイルを連結しました。

  1. まず、ffmpegをインストールします

    • Ubuntu 15.04+

      sudo apt install ffmpeg
    • Ubuntuの14.10と下に
      行くためにhttp://ffmpeg.org/download.htmlは、静的のダウンロード1ビルド、untarし、それは、およびコピーを/ usr / local /ビンへ

  2. ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3

詳細:https : //trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245


ffmpeg行方不明ですが、avconvそれを置き換える:askubuntu.com/questions/432542/...
muruは、

2
ええ、私はしばらくの間avconvを使用していましたが、ffmpegが持っていたものとavconvが持っていなかったいくつかの機能が必要でした。最近では、ffmpegの機能を既に知っているときに、avconvに必要な機能があるかどうかを確認するのは時間の無駄のように感じます。
bmaupin 14

このバグレポートのディスカッションに招待されたと感じてください。
-orschiro

私はこれを試しましたが、うまくいきません。実行してみてoutput.mp3スルーmp3valして、Chrome64 +で再生の問題を作成するエラーのすべての種類が表示されます(参照bugs.chromium.org/p/chromium/issues/detail?id=794782bugs.chromium.org/p/chromium/をissues / detail?id = 806601#c10
ニノシュコパック

素晴らしいソリューション。とにかく曲も正規化するには?
ar2015

8

前に提案したように、それmp3wrapは良い解決策です。ただし、常に機能するとは限りません。私の知る限りmp3wrap、すべての入力ファイルがVBR対CBR、ビットレートなどの同じ特性を持っていると仮定しています。この仮定が満たされない場合、失敗する可能性があります。その場合、唯一の解決策は、すべてのmp3ファイルをなどの生の形式にデコードし、.wavそれらをのようなプログラムと連結して、soxすべてをmp3に再エンコードすることです。


mp3ファイルの再エンコード(「トランスコーディング」とも呼ばれる)により、品質が低下することに注意してください。私はそれをお勧めしません。
マーティントゥルノイ

5

単一の文字に基づいてアルファベット順に並べ替えます。これは、naughtの値が1よりも小さいため、「1」の前に「01」が来ることを意味します。

以下に例を示します。1、2、3、04、05、および06という名前のファイルを含むディレクトリがあります。これらは、独自のファイル名を含むテキストファイルです。

test$ cat *
04
05
06
1
2
3

そう、そうです。ただし、すべてのファイルが適切に「パディング」されていることを確認する必要があります。

この気の利いたbashスクリプトの行により、ファイル名を視覚的に比較できるため、間違いを簡単に見つけることができます。

for f in $(ls); do printf "%05s\n" "$f"; done

出力は次のようになります。

   04
   05
   06
    1
    2
    3

そうでない場合は、ファイル名をパディングする必要があります。StackOverflowでファイル名をパディングするBashスクリプトでその方法を説明しています。


編集。オリの答えに投票してください。:P
それは何かを追加するので、私は私のものを残しますが、彼のソリューションを使用する必要があります、

mp3wrap output.mp3 `ls -1 *.mp3 | sort`

覚えておいてsort、彼らは長さが等しくない場合、まだ並べ替え、私は上記のように、物事は、あなたはまだパッドのファイル名にする必要がありますされます。


4

ほとんどの人が提案mp3wrapしていますが、欠点があります:生成されたファイルは一部のプレーヤーでその完全な長さを報告しないため、そのポイントを過ぎてシークできません。

mp3cat私が知る限り、仕事は速くてうまくやる。http://mulholland.xyz/dev/mp3cat/にダウンロードして、次のように使用できます。

mp3cat file1.mp3 file2.mp3 file3.mp3

別の可能性は sox

sudo apt-get install sox libsox-fmt-mp3
sox file1.mp3 file2.mp3 target.mp3

しかし、それは非常に遅いようです(おそらくオーディオをデコードして再エンコードしますか?)


3

オンラインサービスのオーディオジョインが非常にうまく機能し、正しいタイムスタンプを保持していることがわかりました(mp3wrapとは異なります)。



0

私はbmaupinのコメントが大好きですが、以下を使用して自然な(バージョン)番号を生成できますsort -V

find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3

' " () [] {}ファイル名のように特殊文字を扱う必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.