提案されたように ここ 私は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ファイルをテストしましたが、予想どおりですが、上記のコマンドが昇順でファイルを選択することをsureにする必要があります。
上記のコマンドが常に昇順でファイルを連結することを確認できますか?
ありがとうSir!
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
でソートされる場合、ファイルの名前を変更する必要があります。 これは簡単に修正できます 。
mp3wrap は十分な解決策のようですが、結果のファイルを再生したときにタイムスタンプが正しくありませんでした。後で分割したいことがわかっているファイルにmp3を結合する場合は、mp3wrapが最適に使用されるようです。
単にいくつかのmp3を恒久的に連結したかっただけです。最終的に、ffmpegを使用してファイルを連結しました。
まず、ffmpegをインストールします
Ubuntu 15.04+
Sudo apt install ffmpeg
Ubuntu 14.10以前
http://ffmpeg.org/download.html に移動し、静的ビルドの1つをダウンロードして展開し、/ usr/local/binにコピーします
ffmpeg -i "concat:file1.mp3|file2.mp3" -acodec copy output.mp3
詳細: https://trac.ffmpeg.org/wiki/Concatenate#protocol
https://superuser.com/a/314245
前に提案したように、mp3wrap
は良い解決策です。ただし、常に機能するとは限りません。私の知る限り、mp3wrap
は、すべての入力ファイルがVBR対CBR、ビットレートなどの同じ特性を持っていると想定しています。この仮定が満たされない場合、失敗する可能性があります。その場合、唯一の解決策は、すべてのmp3ファイルを.wav
などの生の形式にデコードし、sox
などのプログラムと連結して、すべてをmp3に再エンコードすることです。
単一の文字に基づいてアルファベット順に並べ替えます。それは、naughtの値が1よりも小さいため、「01」が「1」の前に来ることを意味します。
以下に例を示します。 1、2、3、04、05、および06という名前のファイルを含むディレクトリがあります。これらは、独自のファイル名を含むテキストファイルです。
test$ cat *
04
05
06
1
2
3
したがって、yes;ただし、すべてのファイルが適切に「パディング」されていることを確認する必要があります。
この気の利いたbashスクリプトの行を使用すると、ファイル名を視覚的に比較して、間違いを簡単に見つけることができます。
for f in $(ls); do printf "%05s\n" "$f"; done
出力は次のようになります。
04
05
06
1
2
3
そうでない場合は、ファイル名をパディングする必要があります。ファイル名をパッシングするためのBashスクリプトStackOverflowで説明しますそれをするために。
編集。 Oliの答えに投票してください。 :P
何かを追加するので、私はそのままにしますが、彼のソリューションを使用する必要があります。
mp3wrap output.mp3 `ls -1 *.mp3 | sort`
sort
は上記で説明した方法で物事をソートしますが、ファイル名の長さが等しくない場合は、ファイル名にパディングする必要があることに注意してください。
ほとんどの人は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
しかし、それは非常に遅いようです(おそらくオーディオをデコードして再エンコードしますか?)
オンラインサービス audio-joiner が非常にうまく機能し、正しいタイムスタンプ(mp3wrapとは反対)を保持することがわかりました。
専用のオーディオ編集プログラム( Audacity など)を使用してみてください。
私は bmaupinのコメント が大好きですが、それでもsort -V
を使用して自然な(バージョン)番号を生成できます。
find . -maxdepth 1 -iname '*.mp3' -print0 | sort -Vz | xargs -0 mp3wrap ../tmp.mp3
また、ファイル名に' " () [] {}
などの特殊文字を扱う必要はありません。