有馬総一郎のブログ

(彼氏の事情)

2020年12月26日 17:10:53 JST - 6 minute read - Audio Player

Audacityでラベル毎にファイル分割・変換する

SoundEngine FreeスクリプトでWAVを一括分割するで、WAVの分割のやり方について記録したが、やはり、 SoundEngine Free/Proだと、読み込めないWAVがある。

SoundEngine Free

私が分割したいWAVは、大体Blu-rayから抽出したものなのだけど、最近、読み込めないことが多くなってきた。 WaveZ1で、1:00:00を区切りに分割すると、 SoundEngine Free でも読み込み可能になったので、初めはサイズの問題かと思った。

BDInfo

しかし、今回、読み込めないWAVファイルのサイズは、1.12GBしかなかった。読み込めない理由はサイズではなく、やはり何かしたらの情報が欠けているか、何かなのだろう。それを読み込み可能なツールで再エンコードされることで、正規化されたのだろう(というのが正しいか分からないが)。

foobar2000

そこで、WAVを分割できる別のツールがないか探してみた。

有名なのは Audacityだろう。マルチプラットフォーム対応でLinuxでも使えるし、スクリーンショットをパッと見るに SoundEngine Free と似たようなものだろう。

Audacity
Audacity

インストールして、ググってみると、ラベル付けすることで、ラベル毎の分割が可能になるようだ。 【Audacity】トラックを分割して書き出す方法【ラベルトラック】。当然、そのラベル編集というのは取り込み(import)、書き込み(export)できる。

しかし、厄介なのが、その開始位置、終了位置が秒単位だということ。

BDInfo2ではトラック情報(開始位置、長さ)は

Time In         Length
-------         ------
0:00:00.000     0:02:03.081
0:02:03.081     0:04:45.451
0:06:48.533     0:04:15.588
0:11:04.121     0:05:50.975
0:16:55.097     0:06:37.438

という形で出力されるので、秒に変換する必要がある3。まあ、やり方はいくらかあるが、Excelであればセルの書式設定 -> ユーザー定義[s].0004とすることで、秒単位に変換される。

Excel
Excel

開始秒<tab>終了秒<tab>ラベル名
開始秒<tab>終了秒<tab>ラベル名
開始秒<tab>終了秒<tab>ラベル名
開始秒<tab>終了秒<tab>ラベル名
開始秒<tab>終了秒<tab>ラベル名

開始秒、終了秒5、ラベル名を記述したテキストファイルを作成・編集することで、取り込む可能なラベル編集ファイルとなる。上の例であれば以下のようになる。

0.000000	123.081000	ラベル01
123.081000	408.533000	ラベル02
408.533000	664.121000	ラベル03
664.121000	1015.097000	ラベル04
1015.097000	1412.536000	ラベル05

SoundEngine Free の時は、分割する位置を指定するだけで、幅までは指定しなかったので気付かなかったが、 BDInfo で出力される曲時間は、ミリ秒単位でマイクロ秒が省略されているために、単純に曲の長さを足していくと、ズレが生じる。

本来はTime InにLengthを足せば、次のTime Inになるはずが、ならない。下のラベル編集ファイルは、Time InにLengthをそれぞれ秒に変換して足したものだが、ラベル04の終了時間が 0.001 秒ズレてる6

000.000000	123.081000	ラベル01
123.081000	408.532000	ラベル02
408.533000	664.121000	ラベル03
664.121000	1015.096000	ラベル04
1015.097000	1412.535000	ラベル05

とりあえず、ラベル編集ファイルが出来たら、編集-> ラベル-> ラベルの編集 -> 取り込みでラベル編集ファイルを選択する。するとトラック2(ここでは曲単位のトラックでなく、ラベル編集単位のトラック)として、ラベルが取り込まれるので、トラック1のラベル編集を削除する7

Audacity
Audacity
Audacity
Audacity
Audacity
Audacity
Audacity

そして、ファイル-> 書き出し-> 複数ファイルの書き出しをクリック。ファイル分離基準が ラベル になっているはずなので、このまま。フォーマットとしてWAVとして出力する場合、エンコーディングを選択して出力。正直、エンコーディングによる違いは分からない。

Audacity
Audacity
Audacity

Audacityで、無劣化保存する方法はありませんか?それと、ソー… - Yahoo!知恵袋を見ると、編集-> 編集環境-> 品質-> リアルタイム変換/高品質変換 ->ディザリング無し にすると再変換(劣化となるの?)が起きないそうだ。

Audacity

しかし、上の知恵袋でも紹介されている Wave ファイル専用比較ユーティリティ WaveCompareを使って、元々のWAVを確認するとやはり特殊なのかUnknown Wave format8と表示される。両方、ディザリング無し にしたが、変換は行われた(読み取れるWAVファイルとなった)9

WaveCompare

上記のように再変換が行われるし、どうせflacに変換するのだから、この段階でflacで分割・変換することにした。この時にタグ編集をすることも可能だ。タグ編集が鬱陶しいならDon't show this when exporting audioにチェックすれば次から確認されない。再びタグ編集を表示させる場合は編集-> 編集環境-> 取り込み/書き出し書き出しの前にメタデータエディタを表示 にチェックする。

Audacity
Audacity
Audacity

一度、WAVに出力してからfoobar2000でflacで変換した場合と何故か、toolは同じなのに、違いが出た。まあ、Duration、Sample rate、Channels、Bits per sampleは同じなので誤差と思って気にしない。

Audacity
WAV出力後、foobar2000でflac変換
Audacity
Audacityでflac分割・変換


  1. 作者のページ削除済。もう取得できないかも… ↩︎

  2. もともとは http://www.cinemasquid.com/blu-ray/tools/bdinfo だったが、こちらは閉鎖されている。ソース自体は GitHub - UniqProject/BDInfo: BDInfo from http://www.cinemasquid.com/blu-ray/tools/bdinfoで公開されている。 ↩︎

  3. 試しに時間分秒(h:mm:ss.fff)で、読み込ませたが駄目だった。 ↩︎

  4. 000までが限界で、それ以上は入力した表示形式は使用できません。と警告される。 ↩︎

  5. 開始秒と終了秒を同じにすることで、分割秒だけを指定できるが、その場合、全てのラベルが0:00:00.000000からその分割秒までの長さとなるので、意味がない。 ↩︎

  6. ズレたとして、1ミリ秒なので気付かないだろうが、気持ちとしてはスッキリしない。 ↩︎

  7. どうにか、トラック1としてラベル編集を取り込めないか、調べたが、どうも無理っぽい。また、トラック1以外に既にトラック2としてのラベル編集があると、次のトラック、トラック3として取り込まれる。 ↩︎

  8. だから SoundEngine Free で読み取れなかったのだろう。 Audacity で変換後のWAVは SoundEngine Free で読み込み可能となった。 ↩︎

  9. ちなみに一度 Audacity でWAVで書き出したものを、再度WAVで書き出して比較した時、リアルタイム変換/高品質変換 ->ディザリングを ノイズシェービング としても、 一致しました となった。 ↩︎