Twitter Spacesをダウンロードして無音部分をカットして聞く

Twitter Scapesという音声配信サービスがありますが，基本的にライブ．聴きたいものがあったのですが，体調不良で寝ていて聞けませんでした．
でも30日アーカイブが残るとのことなのでダウンロードしてスマホで聞いてみました．

配信最後までお聴きいただきありがとうござ>いました。アーカイブは 30日間残るようなので、聴き逃した方はぜひどうぞ。今後ともポッドキャスト #セキュリティのアレ をよろしくお願いします！！ https://t.co/wUrkGp7nzy

— Masafumi Negishi (@MasafumiNegishi) March 15, 2022

Twitterスペースについて

まずはダウンロード，Youtube-dl, yt-dlpを試しましたがまだ未対応のよう．

今回Twspace-dlというものを試しました．

Ryu1845/twspace-dl: A python module to download twitter spaces.

$ virtualenv .
$ source bin/activate
$ pip install twspace-dl
$ twspace_dl
usage: twspace_dl [-h] [-v] [-s] [-k] [-l] [--input-cookie-file COOKIE_FILE] [--username USERNAME]
[--password PASSWORD] [--output-cookie-file OUTPUT_COOKIE_FILE] [-i SPACE_URL | -U USER_URL]
[-d DYN_URL] [-f URL] [-M PATH] [-o FORMAT_STR] [-m] [-p] [-u] [--write-url URL_OUTPUT]

Script designed to help download twitter spaces

optional arguments:
-h, --help show this help message and exit
-v, --verbose
-s, --skip-download
-k, --keep-files
-l, --log create logfile
--input-cookie-file COOKIE_FILE

input:
-i SPACE_URL, --input-url SPACE_URL
-U USER_URL, --user-url USER_URL
-d DYN_URL, --from-dynamic-url DYN_URL
use the dynamic url for the processes(useful for ended spaces) example: https://prod-
fastly-ap-
northeast-1.video.pscp.tv/Transcoding/v1/hls/zUUpEgiM0M18jCGxo2eSZs99p49hfyFQr1l4cdze-
Sp4T-DQOMMoZpkbdyetgfwscfvvUkAdeF-I5hPI4bGoYg/non_transcode/ap-northeast-1/periscope-
replay-direct-prod-ap-northeast-1-public/audio-space/dynamic_playlist.m3u8?type=live
-f URL, --from-master-url URL
use the master url for the processes(useful for ended spaces) example: https://prod-
fastly-ap-northeast-1.video.pscp.tv/Transcoding/v1/hls/YRSsw6_P5xUZHMualK5-ihvePR6o4Qmo
ZVOBGicKvmkL_KB9IQYtxVqm3P_vpZ2HnFkoRfar4_uJOjqC8OCo5A/non_transcode/ap-
northeast-1/periscope-replay-direct-prod-ap-northeast-1-public/audio-
space/master_playlist.m3u8
-M PATH, --input-metadata PATH
use a metadata json file instead of input url (useful for very old ended spaces)

output:
-o FORMAT_STR, --output FORMAT_STR
-m, --write-metadata write the full metadata json to a file
-p, --write-playlist write the m3u8 used to download the stream(e.g. if you want to use another downloader)
-u, --url display the master url
--write-url URL_OUTPUT
write master url to file

login:
--username USERNAME
--password PASSWORD
--output-cookie-file OUTPUT_COOKIE_FILE

早速ダウンロード

$ twspace_dl -i https://twitter.com/i/spaces/1ypKdEXLdLqGW

2022-03-16 15:42:16,496 [INFO] ./tmp6swcs0w5/(辻 伸弘 (nobuhiro tsuji))ゆくアレ、くるアレ #セキュリティのアレ-1ypKdEXLdLqGW.m3u8 written to disk
[hls @ 0x55f2ea4a9800] Changing ID3 metadata in HLS audio elementary stream is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
size= 51141kB time=01:13:21.68 bitrate= 95.2kbits/s speed=10.6x
2022-03-16 15:49:14,334 [INFO] Finished downloading
$ ffprobe -i ./\(辻\ 伸弘\ \(nobuhiro\ tsuji\)\)ゆくアレ、くるアレ\ #セキュリティのアレ-1ypKdEXLdLqGW.m4a
ffprobe version 4.4.1-3+b2 Copyright (c) 2007-2021 the FFmpeg developers
built with gcc 11 (Debian 11.2.0-18)
configuration: --prefix=/usr --extra-version=3+b2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './(辻 伸弘 (nobuhiro tsuji))ゆくアレ、くるアレ #セキュリティのアレ-1ypKdEXLdLqGW.m4a':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: M4A isomiso2
title : ゆくアレ、くるアレ #セキュリティのアレ
artist : 辻 伸弘 (nobuhiro tsuji)
encoder : Lavf58.76.100
episode_id : 1ypKdEXLdLqGW
Duration: 01:13:21.71, start: 0.000000, bitrate: 95 kb/s
Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 93 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]

ダウンロードできました．再生してみると音が出ない??先頭に無音が入ってるせいで少し進めると音が出ました．

てことで先日も使った ffmppeg の silenceremove フィルタで無音部分をカットします．

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

しきい値は前回と同じ -90dB だとほとんどカットできまぜんでした． -50dB でいい感じになったようです．

$ ffmpeg -i ./\(辻\ 伸弘\ \(nobuhiro\ tsuji\)\)ゆくアレ、くるアレ\ #セキュリティのアレ-1ypKdEXLdLqGW.m4a -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-50dB -acodec libopus ./\(辻\ 伸弘\ \(nobuhiro\ tsuji\)\)ゆくアレ、くるアレ\ #セキュリティのアレ-1ypKdEXLdLqGW.opus

01:13:21.71 → 01:09:51.71 になりました．てことでこれでスマホに転送して聞くことが出来ました．

ちなみに今回試した配信はPodcastの「セキュリティのアレ」の「サイバーセキュリティに関する総務大臣奨励賞」の受賞記念配信的なものでした．いつもは週一くらいでPodcastを配信されています．

podcast – #セキュリティのアレ – ゆるーいセキュリティのポッドキャストですよ。

総務省｜報道資料｜「サイバーセキュリティに関する総務大臣奨励賞」の受賞者の公表

＃最近はPodcastの露出が増えている感じ．過去に配信して止まっている番組も復活しないかな電カーとかちんさんとか……．

環境

$ dpkg-query -W python3 ffmpeg
ffmpeg 7:4.4.1-3+b2
python3 3.9.8-1
$ lsb_release -dr
aDescription: Debian GNU/Linux bookworm/sid
Release: unstable
$ arch
x86_64