YouTube動画をダウンロードして無音部分をカットしたオーディオデータにして聞く

オープンソースカンファレンス2022 Online Springに参加しました.

ビデオミーティングソフトウェアのZoomとYouTube Liveを使っています.セッションは複数トラックあって同時に参加するのは難しいです.ほとんどのセッションは後日YouTubeで公開されますが,YouTube Liveの動画をリモートのサーバで録画しておいたのでこれをスマートフォンで移動中などに聞けるようにしてみました.

YouTubeの動画ダウンロードにはyoutube-dlやyt-dlpが便利です.セッション毎に起動しておきました.

$ youtube-dl ${URL}
$ yt-dlp ${URL}

今回ダウンロードした動画はvp9+aacのようです.

$ ffprobe -i ./YOUTUBEFILE.mkv 2>&1 | grep ^Input -A99
Input #0, matroska,webm, from './YOUTUBEFILE.mkv':
  Metadata:
    HTTP://YOUTUBE.COM/STREAMING/OTF/DURATIONS/112015: Segment-Count: 6109
                    : Segment-Durations-Ms: 5067,5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),5066,5067(r=1),506
                    :
                    :
    ENCODER         : Lavf58.20.100
  Duration: 08:35:50.04, start: 0.000000, bitrate: 551 kb/s
    Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709/unknown/unknown), 1280x720, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      DURATION        : 08:35:49.996000000
    Stream #0:1(eng): Audio: aac (LC), 44100 Hz, stereo, fltp (default)
    Metadata:
      HANDLER_NAME    : ISO Media file produced by Google Inc.
      DURATION        : 08:35:50.040000000

ffmpegで音声だけを抜き出してみます.

$ ffmpeg -i ./YOUTUBEFILE.mkv -vn -acodec copy ./YOUTUBEFILE.aac

元ファイルが2GBほどに対して500MBほどのファイルになりました.
ちょっと大きいのでコーデックをopusに変更してみます.

$ ffmpeg -i ./YOUTUBEFILE.mkv -vn -acodec libopus -b:a 64k ./YOUTUBEFILE.opus

213MB程になりました.
これをローカルにダウンロードして再生してみるとセッション間の無音部分が気になります.無音部分をカットできないかなと探すと,ffmpegのフィルタにそれらしい silenceremove というフィルタがあったので試してみました.

とりあえずexampleを真似して,先頭から最後までの間の1秒以上の無音部分をカットします.ついでにビットレートも32kに下げました.

$ ffmpeg -i ./YOUTUBEFILE.mkv -vn -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB -acodec libopus -b:a 32k ./YOUTUBEFILE.opus

動画ファイルの長さが 08:35:50.040000000 から 07:55:03.66 になりました.ファイルサイズは107MB程です.

ついでにもう少し低いビットレートも試しました.

ビットレート容量

32k

107324kB

24k

82484kB

16k

56380kB

少し聞いた感じでは16kでも問題無さそうな感じです.大本のZoomが確か24kなので24k以上はあまり意味がない気がします.

追記)高音質化機能があるようなので動画によって変わりそうです:

High Fidelity Audio mode – Windows, macOS
This option in Advanced Audio enhances “Original Audio” mode, allowing for disabling echo cancellation & post-processing, while raising audio codec quality to 48Khz, 96Kbps mono/192kbps stereo for professional audio transmis
sion in music education and performance applications. Professional audio interface, microphone, and headphones required.

Release notes for September 1
2020 – Zoom Support https://support.zoom.us/hc/en-us/articles/360048388632-New-Updates-for-September-1-2020

ということで他のセッションも同様に変換してAndroidスマートフォンに転送してVLCで1.5倍再生してみて画面スリープで再生できるのを確認しました.これで空き時間に聞けるようになりました :)

youtube2audio

応用としてYouTubeのRSSから動画をダウンロードして音声のみにしてその音声をRSSに埋め込んで公開するとPodcastアグリゲーターで購読できるので便利かもしれません.人の動画を勝手に一般公開するとまずいでしょうが.

環境
$ youtube-dl --version
2021.12.17
$ yt-dlp --version
2022.03.08.1
$ dpkg-query -W ffmpeg
ffmpeg  7:4.1.8-0+deb10u1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ arch
x86_64

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)