mp3ファイルをcat で結合する方法
ここ数年、平日 22:45 - 23:00 にNHKFMで放送しているラジオドラマをタイマー録音しています。「青春アドベンチャー」ですね。同じく「FMシアター」は50分ものなのでウォークマンで聴くのにファイルごとに選べて良いのですが、「青春アドベンチャー」は15分のファイルが10個で一つの物語なので、ファイル管理上不便です。
そこで、音声ファイルを結合してくれるWindowsのフリーウェアを使っていたのですが、ファイルの並び順をGUI で指定する必要があり面倒でした。結果、録音がたまる一方です。
最近はMac を使っているため、何か良いソフトがないかと物色していたのですが、AppStore でmp3結合できるソフトが500円くらいで売っていました。しかし、各種質問サイトによると cat で結合できるらしいと出ているではないですか。
どうやら
cat a.mp3 b.mp3 > x.mp3
などとして結合できるようです。
しかし、ファイルが10個もあるとcat の引数に渡すのが面倒です。しばらく、放置しておりました。
青春_NHK-FM_1502162245.MP3
青春_NHK-FM_1502172245.MP3
青春_NHK-FM_1502182245.MP3
青春_NHK-FM_1502192245.MP3
青春_NHK-FM_1502202245.MP3
青春_NHK-FM_1502232245.MP3
青春_NHK-FM_1502242245.MP3
青春_NHK-FM_1502252245.MP3
青春_NHK-FM_1502262245.MP3
青春_NHK-FM_1502272245.MP3
さて、ここ1ヶ月ほど私は『シェルプログラミング 実用テクニック』などシェル系の本を読んでおりました。「そんな本読んでるんだ、へぇ〜」などと周りの反応は芳しくないものでしたが、めきめきとシェルの使い方が身についてきました。

前置きが、長すぎましたがお急ぎの方は、下記のワンライナーをお試しください。
ls | sort | head -10 | xargs cat > s001.mp3
状況としては、フォルダに音声ファイルがいっぱい入っています。月-金の2週間で10話、1セットとなります。
幸いファイル名が録音時間になっていたので、ls | sort で順番に並びます。ls | sort | head -10 で上記のファイル10ファイルが抽出できました。
あとは、この10ファイルをcat の引数として、渡せば良いわけです。『シェルプログラミング 実用テクニック』を読んで身についたのが、xargs の使い方なのですが、今回が一番普通な使い方です。
xargs は、パイプで標準入力から受け取ったものを次のコマンド(今回は、cat )に引数として渡してくれます。
つまり、
ls | sort | head -10 | xargs cat
で
cat 青春_NHK-FM_1502162245.MP3 青春_NHK-FM_1502172245.MP3 青春_NHK-FM_1502182245.MP3 青春_NHK-FM_1502192245.MP3 青春_NHK-FM_1502202245.MP3 青春_NHK-FM_1502232245.MP3 青春_NHK-FM_1502242245.MP3 青春_NHK-FM_1502252245.MP3 青春_NHK-FM_1502262245.MP3 青春_NHK-FM_1502272245.MP3
となります。あとは、ファイルに書き出すべく、> s001.mp3 などとお好きなファイル名を与えれば OKです。
今回の例ですとフォルダにs001.mp3 ができるので、都度11ファイルを他のフォルダに移動し、コマンドを繰り返しました。次は s002.mp3 などとしていましたが、今思うとs150219.mp3 などと録音日を名前に反映した方が良かったと思います。
そこで、音声ファイルを結合してくれるWindowsのフリーウェアを使っていたのですが、ファイルの並び順をGUI で指定する必要があり面倒でした。結果、録音がたまる一方です。
最近はMac を使っているため、何か良いソフトがないかと物色していたのですが、AppStore でmp3結合できるソフトが500円くらいで売っていました。しかし、各種質問サイトによると cat で結合できるらしいと出ているではないですか。
どうやら
cat a.mp3 b.mp3 > x.mp3
などとして結合できるようです。
しかし、ファイルが10個もあるとcat の引数に渡すのが面倒です。しばらく、放置しておりました。
青春_NHK-FM_1502162245.MP3
青春_NHK-FM_1502172245.MP3
青春_NHK-FM_1502182245.MP3
青春_NHK-FM_1502192245.MP3
青春_NHK-FM_1502202245.MP3
青春_NHK-FM_1502232245.MP3
青春_NHK-FM_1502242245.MP3
青春_NHK-FM_1502252245.MP3
青春_NHK-FM_1502262245.MP3
青春_NHK-FM_1502272245.MP3
さて、ここ1ヶ月ほど私は『シェルプログラミング 実用テクニック』などシェル系の本を読んでおりました。「そんな本読んでるんだ、へぇ〜」などと周りの反応は芳しくないものでしたが、めきめきとシェルの使い方が身についてきました。
前置きが、長すぎましたがお急ぎの方は、下記のワンライナーをお試しください。
ls | sort | head -10 | xargs cat > s001.mp3
状況としては、フォルダに音声ファイルがいっぱい入っています。月-金の2週間で10話、1セットとなります。
幸いファイル名が録音時間になっていたので、ls | sort で順番に並びます。ls | sort | head -10 で上記のファイル10ファイルが抽出できました。
あとは、この10ファイルをcat の引数として、渡せば良いわけです。『シェルプログラミング 実用テクニック』を読んで身についたのが、xargs の使い方なのですが、今回が一番普通な使い方です。
xargs は、パイプで標準入力から受け取ったものを次のコマンド(今回は、cat )に引数として渡してくれます。
つまり、
ls | sort | head -10 | xargs cat
で
cat 青春_NHK-FM_1502162245.MP3 青春_NHK-FM_1502172245.MP3 青春_NHK-FM_1502182245.MP3 青春_NHK-FM_1502192245.MP3 青春_NHK-FM_1502202245.MP3 青春_NHK-FM_1502232245.MP3 青春_NHK-FM_1502242245.MP3 青春_NHK-FM_1502252245.MP3 青春_NHK-FM_1502262245.MP3 青春_NHK-FM_1502272245.MP3
となります。あとは、ファイルに書き出すべく、> s001.mp3 などとお好きなファイル名を与えれば OKです。
今回の例ですとフォルダにs001.mp3 ができるので、都度11ファイルを他のフォルダに移動し、コマンドを繰り返しました。次は s002.mp3 などとしていましたが、今思うとs150219.mp3 などと録音日を名前に反映した方が良かったと思います。