2021年12月1日水曜日

カセットテープデジタル化

 カセットテープデジタル化の続き。

アルバム1枚(カセットテープではA面、B面)をデジタル化するとき、これまで曲毎にmp3とflacファイルを作っていたが、今後は

 曲毎:mp3 ビットレート192k サンプリングレート48k
 アルバム全体:opus ビットレート256k サンプリングレート48k

のセットで残すことにする。

アルバムのopusファイルを作るときは、全曲名をmetadataのlyricsに入れておく。


しかし、30年前に録音したカセットテープの音楽が全く劣化していないことに感動。TDKのSAやSONYのCDixテープが良いのか、再生しているONKYOのカセットデッキK-505FXが良いのか。デジタル化するときに品質を落とさないようにしないといけない。。。


■■各種コマンド

■ハードのセッティング
(カセットデッキ)→(DigiFi付録のDDC)→(USB)

■カセットテープの入力を聴く
arecord -c 2 -f S16_LE -r 48000 -D hw:1,0 | aplay

■カセットテープのA面だけをDDCで取り込み。 −d は録音時間の指定(秒)
arecord -c 2 -f S24_3LE -r 48000 -D hw:1,0 -d 1920 /home/nemo/ミュージック/aaa.wav

■wavファイルの結合
□以下のようにコーデックにpcm_s24leを指定しないと、インプットファイルのビットレートが24bitでもアウトプットファイルのビットレートが16bitになってしまう。
ffmpeg -i in1.wav -i in2.wav -filter_complex "concat=n=2:v=0:a=1" -c:a pcm_s24le out.wav

□A面とB面のwavを結合してアルバム全部をopusにまとめる←これまでのflacの代わり
ffmpeg -i A面.wav -i B面.wav -filter_complex "concat=n=2:v=0:a=1" -acodec libopus -metadata artist="aaa" -metadata album="bbb" -metadata genre="JPop" -metadata date="1988" -ab 256k -ar 48000 両面.opus

■ノーマライズのためのvolume確認・・・ノーマライズはAudacityで行う
ffmpeg -i data.wav -af "volumedetect" -f null -

■アルバムのトラックをまとめて変換するスクリプト
bash ./ffmpeg_wav_singles.sh

■1秒の無音wavファイルを作成
ffmpeg -ar 48000 -t 00:00:01 -f s24le -acodec pcm_s24le -ac 2 -i /dev/zero muon.wav

■複数ファイルに無音を挟みながら結合
ffmpeg -i 01*.wav -i muon.wav -i 02*.wav -i muon.wav -i 03*.wav -i muon.wav -i 04*.wav -i muon.wav -i 05*.wav -i muon.wav -i 06*.wav -i muon.wav -i 07*.wav -i muon.wav -i 08*.wav -i muon.wav -i 09*.wav -filter_complex "concat=n=17:v=0:a=1" -c:a pcm_s24le out.wav

□上記のインプットファイル部分の大部分を下記のスクリプトで作れる
op=""; for j in {01..08}; do op=$op" -i "$j".wav -i muon.wav"; done


■拡張子がmp3のファイルの拡張子以外部分を取り出す→これをffmpegに渡して一括変換に使う
for j in *.mp3 ; do echo ${j%.mp3}; done


■■ffmpeg_wav_singles.shファイルの中身

#!/bin/bash

#ifile01,m_ti01等の変数名を編集し、その値を取り出すところに苦労。 `eval echo '$'"ifile"$track` の部分。配列にしておけばよかった。行頭や変数の区切りに全角スペースはNG

music_path=""

m_ar="artist name"; m_al="album name"; m_da="1990"; m_ge="JPop"

tracks="10"


ss01="00:00:00"; to01="00:04:04"; m_ti01="track 01 name";

ss02="00:04:07.8"; to02="00:09:01"; m_ti02="track 01 name";

ss03="00:09:03.8"; to03="00:13:03"; m_ti03="track 01 name";

ss04="00:13:06"; to04="00:18:26"; m_ti04="track 01 name";

ss05="00:18:29.5"; to05="00:22:28"; m_ti05="track 01 name";

ss06="00:22:31"; to06="00:26:22"; m_ti06="track 01 name";

ss07="00:26:24.7"; to07="00:30:15"; m_ti07="track 01 name";

ss08="00:30:26.8"; to08="00:34:43"; m_ti08="track 01 name";

ss09="00:34:47"; to09="00:38:28"; m_ti09="track 01 name";

ss10="00:38:30"; to10="00:43:05"; m_ti10="track 01 name";


i=1

string_lyrics=""


while [ $i -le $tracks ]

do

  track=`printf "%02d" $i`

  #インプットファイル名、タイトル名取り出し

#  string_ifile=`eval echo '$'"ifile"$track`

  string_ifile="in.wav"

  string_ss=`eval echo '$'"ss"$track`

  string_to=`eval echo '$'"to"$track`

  string_title=`eval echo '$'"m_ti"$track`

  #string_lyricsはopusファイルに全曲名を入れるためのメタデータ

  string_lyrics=$string_lyrics$track" "`eval echo '$'"m_ti"$track`" "


  #曲毎mp3変換

  ffmpeg -ss "$string_ss" -to "$string_to" -i "$string_ifile" -acodec libmp3lame -ab 192k -ar 48000 -metadata "artist"="$m_ar" -metadata "album"="$m_al" -metadata "genre"="$m_ge" -metadata "date"="$m_da" -metadata "track"="$i" -metadata "title"="$string_title" "$track"_"$string_title.mp3"


  i=`expr $i + 1`

done


#アルバム全体opus変換

ffmpeg -i "$string_ifile" -acodec libopus -metadata "artist"="$m_ar" -metadata "album"="$m_al" -metadata "genre"="$m_ge" -metadata "date"="$m_da" -metadata "lyrics"="$string_lyrics" -ab 256k -ar 48000 "$m_ar"_"$m_al.opus" 

 

ffmpeg_wav_singles.shここまで