Youtubeから音楽を持ってくると前後に無音部分が付いてくる問題

前回、Youtube動画から音楽を切り離してスマホ転送して聞くあれこれの話をしたのですが、
miz999.hatenablog.com
その続き。

動画として音楽を聞いている時には気づかなかったのですが、音楽単体にして音楽として聞いてると、音楽の前後に無音部分がやたら長いことに気づきました。リンク開いて、動画読み込み始めていきなり音が出始めるよりも、少し「ため」があったほうがユーザビリティがいいのでしょう、理解できます。
でもこれ、音楽としてiPod等のプレイヤーで聞くと前後の空白に違和感を感じるというか、再生できてないんじゃと思うくらいの間が空きます。

で、今回はその「間」を削ろう、という話です。

個人的希望としてbat化してコマンド一発(厳密にはエクスプローラの右クリックの「送る」から)で片付けたいので色々調べ回ると、soxというコマンドラインプログラム(CLI)がありました。GUIプログラムは他に結構あるようです。

SoX - Sound eXchange | HomePage


Windows上で試行錯誤のうえで出た試行錯誤は

  • パイプが上手く行ってくれなくて、結局テンポラリファイル作る
  • opus、mp3のDLLが組み込まれて無くて、拾ってくればいいようなこと書いてあるけど面倒なのでwavを通した。
  • 前回の結論を踏まえて、最終的にmp3を作る
  • wav化、mp3化するのにffmpegを使う
  • エクスプローラの「送る」からファイル名を渡す
  • mp3へのコンバート時の音質オプションは何も考えず

で、こんな感じのbatになりました。windowsの「送る」に関わる補足説明を少しすると、%1が送るファイル名、%~n1が送るファイル名の拡張子無し部分、です

ffmpeg.exe" -i %1 "%~n1.wav"
sox.exe" "%~n1.wav" output1.wav vad -t 0.01 -p 0.3 reverse vad -t 0.01 -p 0.5 reverse
ffmpeg.exe" -i output1.wav "%~n1.mp3"
del output1.wav
del "%~n1.wav"
pause

soxの難解なコマンドラインオプションと参考記事はこのあたりを参考にさせていただきました。ほぼわけも分からずコピペです。

音声の無音部分削除

qiita.com

あと、soxのmanの日本語訳のページがリンクは貼られてるのに元が消えてるパターンだったので、arcive.orgから見つけてきて参考にしました。意味はほとんどわかりませんでしたが。
web.archive.org

macとかlinuxでやればもっと綺麗にパイプ使ってやれるのかな、あるいはwindowsでもちゃんとやる方法はあるのかと思いましたが、中間ファイル作ってもSSDならまぁ速いしくらいに思って深追いしないことにしました。