オープンソースカンファレンス2022 Online Springに参加しました.
ビデオミーティングソフトウェアのZoomとYouTube Liveを使っています.セッションは複数トラックあって同時に参加するのは難しいです.ほとんどのセッションは後日YouTubeで公開されますが,YouTube Liveの動画をリモートのサーバで録画しておいたのでこれをスマートフォンで移動中などに聞けるようにしてみました.
オープンソースカンファレンス2022 Online Springに参加しました.
ビデオミーティングソフトウェアのZoomとYouTube Liveを使っています.セッションは複数トラックあって同時に参加するのは難しいです.ほとんどのセッションは後日YouTubeで公開されますが,YouTube Liveの動画をリモートのサーバで録画しておいたのでこれをスマートフォンで移動中などに聞けるようにしてみました.
Tip
|
投稿時の2020-02-20時点のTVerと youtube-dl version 2021.02.10 では以下の手順は必要なく,youtube-dlで直接ダウンロードできるようになっています.$ wget https://yt-dl.org/downloads/latest/youtube-dl $ chmod u+x youtube-dl $ ./youtube-dl $URL |
先日TVerで見られる番組が見たくなりました.動画は再生途中で止まったりするのが嫌なので一旦ローカルにダウンロードしてから視聴することが多いです.
よく使うYoutube-DLではダウンロードできませんでした.
ERROR: Unsupported URL: https://tver.jp/episode/NNNNNNNN
siteのsourceを見るとbrightcoveを使っていて,brightcoveはyoutube-dlで対応しているようです.
ちなみにLinuxのChromiumで開くと推奨環境外と判定されて閲覧できません.Google ChromeやFirefoxだとそのまま,Chromimだとユーザーエージェントを変更することで閲覧できます.今回はFirefoxを利用しました.
推奨環境について
ご利用の環境はTVerの推奨環境ではございません。
推奨環境以外では、動画再生できないなど正常に動作しない場合がございます。
推奨環境でのご利用をお願い致します。
録画したいURLをFirefoxで開いて F12
か Ctrl + Shift + I
若しくは,メニューから「ウェブ開発」→「開発ツールを表示」で開発ツールを表示します.
Ctrl + f
で検索ボックスを表示して data-account
, data-video-id
の値をメモします.
メモした値を以下のURLに埋め込みます.
後はこのURLを youtube-dl
に渡してダウンロードできました.
$ youtube-dl --version 2019.01.17 $ dpkg-query -W firefox firefox 85.0.1-1 $ lsb_release -dr Description: Debian GNU/Linux bullseye/sid Release: unstable $ uname -m x86_64
Youtubeの動画には音声のみのストリームがあるのでこれをダウンロードしてpodcast的に聞いたりすることがあるのですが,YoutubeLiveには音声のみのストリームはないようです.
$ youtube-dl --ignore-config -F https://www.youtube.com/watch?v=PNWQvqUUHbQ
[youtube] PNWQvqUUHbQ: Downloading webpage
[youtube] PNWQvqUUHbQ: Downloading MPD manifest
[info] Available formats for PNWQvqUUHbQ:
format code extension resolution note
251 webm audio only DASH audio 3k , webm_dash container, opus @160k (48000Hz)
139 m4a audio only DASH audio 49k , m4a_dash container, mp4a.40.5@ 48k (22050Hz)
140 m4a audio only DASH audio 130k , m4a_dash container, mp4a.40.2@128k (44100Hz)
278 webm 256x144 DASH video 95k , webm_dash container, vp9, 30fps, video only
160 mp4 256x144 DASH video 108k , mp4_dash container, avc1.4d400b, 30fps, video only
242 webm 426x240 DASH video 220k , webm_dash container, vp9, 30fps, video only
133 mp4 426x240 DASH video 242k , mp4_dash container, avc1.4d400c, 30fps, video only
243 webm 640x360 DASH video 405k , webm_dash container, vp9, 30fps, video only
134 mp4 640x360 DASH video 463k , mp4_dash container, avc1.4d401e, 30fps, video only
244 webm 854x480 DASH video 752k , webm_dash container, vp9, 30fps, video only
135 mp4 854x480 DASH video 1155k , mp4_dash container, avc1.4d4014, 30fps, video only
247 webm 1280x720 DASH video 1505k , webm_dash container, vp9, 30fps, video only
136 mp4 1280x720 DASH video 2007k , mp4_dash container, avc1.4d401f, 30fps, video only
18 mp4 640x360 360p 494k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 1.34MiB
22 mp4 1280x720 720p 1788k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)
$ youtube-dl --ignore-config -F https://www.youtube.com/watch?v=XXXX-XXXXXX 2>/dev/null
[youtube] XXXX-XXXXXX: Downloading webpage
[youtube] XXXX-XXXXXX: Downloading m3u8 information
[youtube] XXXX-XXXXXX: Downloading MPD manifest
[info] Available formats for XXXX-XXXXXX:
format code extension resolution note
91 mp4 256x144 HLS 197k , avc1.42c00b, 30.0fps, mp4a.40.5@ 48k
92 mp4 426x240 HLS 338k , avc1.4d4015, 30.0fps, mp4a.40.5@ 48k
93 mp4 640x360 HLS 829k , avc1.4d401e, 30.0fps, mp4a.40.2@128k
94 mp4 854x480 HLS 1380k , avc1.4d401f, 30.0fps, mp4a.40.2@128k
95 mp4 1280x720 HLS 2593k , avc1.4d401f, 30.0fps, mp4a.40.2@256k (best)
これをリモートサーバでaudioのみに変換してしまうと細い回線で音声だけ聞くことが出来るのではと試してみました.
(屋外移動中などに聞くのを想定)
YoutubeLiveのダウンロードには youtube-dl
,変換には ffmpeg
を利用しました.
youtube-dl
についてはこのあたりを参考にしてください.
以下ではyoutube-dlで最低画質の動画(フォーマットコード91)の144p/48kな動画をダウンロードして標準出力に渡して,パイプでffmpegで受け取って音声だけ切り出して udp:1234 に配信しています.音質をあげたい場合は360pで128k,720pで256kのようなので対応の動画を選ぶと良いですね.
$ youtube-dl -f 91 $YOUTUBELIVEURL -o - | ffmpeg -i - -c:a copy -vn -f adts udp://127.0.0.1:1234
この状態で ffplay
で受信して再生できました :)
$ ffplay udp://127.0.0.1:1234
リモートのVPSサーバとかでこれをやると外出先でMVNOの低速モードでの受信も問題なさそうです.
自分だけで聞く分にはこれでいいのですが,自分の配信したYoutubeLiveを多人数に音声を配信して聞いてもらいたいなどの場合には使えません.(他の人のものを勝手に不特定配信は駄目)
そこで Icecast2
に流すのも試してみました.
ほほ同じようにして流せました.PCとAndroid端末でモバイル回線の低速モードでも試してみたところ同時に視聴できました :)
$ youtube-dl --ignore-config -f 91 $YOUTUBELIVEURL -o - | ffmpeg -i - -c:a copy -vn -f adts -content_type audio/aac iceca
st://source:password@icecast2.example.org:8000/youtubelivetest
$ youtube-dl --ignore-config -f 91 $YOUTUBELIVEURL -o - | pee "ffplay -" "ffmpeg -i - -c:a copy -vn -f adts -content_type audio/aac iceca
st://source:password@icecast2.example.org:8000/youtubelivetest"
$ mpv http://icecast2.example.org:8000/youtubelivetest.m3u
Playing: http://icecast2.example.org:8000/youtubelivetest
(+) Audio --aid=1 (aac 2ch 48000Hz)
AO: [pulse] 48000Hz stereo 2ch float
A: 00:00:02 / 00:00:10 (24%) Cache: 7.9s/139KB
File tags:
icy-title:
A: 00:00:22 / 00:00:30 (75%) Cache: 7.1s/126KB
YoutbeLive,Icecast2と間にサービスを挟むと遅延はどんどん大きくなるので余裕があったらYoutubeLiveに流すのと同じマシンで直接icecast2に流したほうがいいでしょうね.
懸念点としてはYoutubeのシステム的にこの視聴方法で視聴者数や視聴時間に貢献できるのかというところ.とりあえずは家に帰ったらウェブブラウザ等で視聴し直したり,リモートサーバでウェブブラウザを起動してYoutubeLiveを再生してその音声を取り込んだりするか…….そうなってくるとOBS Studio等を使ったほうがわかりやすいかもしれないですね.
しかし,値段だけ考えると特定のサービスで容量を消費しないカウントフリー,エンタメフリーオプション等でYoutubeに対応したSIMを使うという手も使えそうです.
自分は意思が弱く利用サービスがカウントフリーのものに偏ったりしそうだし,通信を見られるのが嫌なので今のところ使う予定はないです.
$ youtube-dl --version
2020.05.03
$ dpkg-query -W ffmpeg mpv
ffmpeg 7:4.2.2-1+b1
mpv 0.32.0-1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
$ youtube-dl --version
2020.05.03
$ dpkg-query -W ffmpeg icecast2
ffmpeg 7:4.1.4-1~deb10u1
icecast2 2.4.4-1
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
以下の例では動画ファイルと字幕ファイルが別々に作成されます.動画に字幕ファイルを埋め込めないかなとオプションを確認したら
--embed-subs
というオプションがありました.これを利用したら1つの動画ファイルの中に字幕も埋め込めました :)$ youtube-dl --help|grep -- --embed --embed-subs Embed subtitles in the video (only for mp4, webm and mkv videos) --embed-thumbnail Embed thumbnail in the audio as cover art
ただし,Debian sid amd64環境では別途
atomicparsley
パッケージも必要でした.atomicparsley
パッケージを入れる前のエラーERROR: AtomicParsley was not found. Please install.
atomicparsley
パッケージの導入$ sudo apt install atomicparsley
480pでダウンロードして日本語機械翻訳字幕を埋め込み$ youtube-dl --write-auto-sub --sub-lang=ja --embed-subs -c -f 133 -o './%(title)s.%(ext)s' 'https://www.youtube.com/playlist?list=PLYUtdmpYPTTKgmkaIUFDiNvYPxQUzuY8y'
日本語の動画の場合はこれで問題ないのですが, id:naruoga/@naru0gaさんがLibreOffice Asia Conference 2019 Tokyo 基調講演の動画に日本語字幕を付けてくれました.OSSが興味ある人なら気になる感じの内容のようなので視聴したいけど字幕ダウンロードしたこと無いなと試してみました.
導入していない人はインストールしましょう.バイナリを1つダウンロードして実行権を付けるだけです.以下は ~/bin
に導入する例.
$ curl -L https://yt-dl.org/downloads/latest/youtube-dl -o ~/bin/youtube-dl
$ chmod +rx ~/bin/youtube-dl
先ずはhelpを確認します.
$ youtube-dl --help|grep 'Subtitle Options:' -A7
Subtitle Options:
--write-sub Write subtitle file
--write-auto-sub Write automatically generated subtitle file (YouTube only)
--all-subs Download all the available subtitles of the video
--list-subs List all available subtitles for the video
--sub-format FORMAT Subtitle format, accepts formats preference, for example: "srt" or "ass/srt/best"
--sub-lang LANGS Languages of the subtitles to download (optional) separated by commas, use --list-subs for available
language tags
結構シンプルな感じですね.早速試してみます.
先ずは --list-subs
で字幕の一覧を取得してみます.
$ youtube-dl --ignore-config --list-subs QS-Zz-2ovo0
[youtube] QS-Zz-2ovo0: Downloading webpage
[youtube] QS-Zz-2ovo0: Looking for automatic captions
[youtube] QS-Zz-2ovo0: Downloading MPD manifest
Available automatic captions for QS-Zz-2ovo0:
Language formats
gu vtt, ttml, srv3, srv2, srv1
zh-Hans vtt, ttml, srv3, srv2, srv1
zh-Hant vtt, ttml, srv3, srv2, srv1
gd vtt, ttml, srv3, srv2, srv1
ga vtt, ttml, srv3, srv2, srv1
gl vtt, ttml, srv3, srv2, srv1
lb vtt, ttml, srv3, srv2, srv1
la vtt, ttml, srv3, srv2, srv1
lo vtt, ttml, srv3, srv2, srv1
tt vtt, ttml, srv3, srv2, srv1
tr vtt, ttml, srv3, srv2, srv1
lv vtt, ttml, srv3, srv2, srv1
lt vtt, ttml, srv3, srv2, srv1
tk vtt, ttml, srv3, srv2, srv1
th vtt, ttml, srv3, srv2, srv1
tg vtt, ttml, srv3, srv2, srv1
te vtt, ttml, srv3, srv2, srv1
fil vtt, ttml, srv3, srv2, srv1
haw vtt, ttml, srv3, srv2, srv1
yi vtt, ttml, srv3, srv2, srv1
ceb vtt, ttml, srv3, srv2, srv1
yo vtt, ttml, srv3, srv2, srv1
de vtt, ttml, srv3, srv2, srv1
da vtt, ttml, srv3, srv2, srv1
el vtt, ttml, srv3, srv2, srv1
eo vtt, ttml, srv3, srv2, srv1
en vtt, ttml, srv3, srv2, srv1
eu vtt, ttml, srv3, srv2, srv1
et vtt, ttml, srv3, srv2, srv1
es vtt, ttml, srv3, srv2, srv1
ru vtt, ttml, srv3, srv2, srv1
rw vtt, ttml, srv3, srv2, srv1
ro vtt, ttml, srv3, srv2, srv1
bn vtt, ttml, srv3, srv2, srv1
be vtt, ttml, srv3, srv2, srv1
bg vtt, ttml, srv3, srv2, srv1
uk vtt, ttml, srv3, srv2, srv1
jv vtt, ttml, srv3, srv2, srv1
bs vtt, ttml, srv3, srv2, srv1
ja vtt, ttml, srv3, srv2, srv1
or vtt, ttml, srv3, srv2, srv1
xh vtt, ttml, srv3, srv2, srv1
co vtt, ttml, srv3, srv2, srv1
ca vtt, ttml, srv3, srv2, srv1
cy vtt, ttml, srv3, srv2, srv1
cs vtt, ttml, srv3, srv2, srv1
ps vtt, ttml, srv3, srv2, srv1
pt vtt, ttml, srv3, srv2, srv1
pa vtt, ttml, srv3, srv2, srv1
vi vtt, ttml, srv3, srv2, srv1
pl vtt, ttml, srv3, srv2, srv1
hy vtt, ttml, srv3, srv2, srv1
hr vtt, ttml, srv3, srv2, srv1
ht vtt, ttml, srv3, srv2, srv1
hu vtt, ttml, srv3, srv2, srv1
hmn vtt, ttml, srv3, srv2, srv1
hi vtt, ttml, srv3, srv2, srv1
ha vtt, ttml, srv3, srv2, srv1
mg vtt, ttml, srv3, srv2, srv1
uz vtt, ttml, srv3, srv2, srv1
ml vtt, ttml, srv3, srv2, srv1
mn vtt, ttml, srv3, srv2, srv1
mi vtt, ttml, srv3, srv2, srv1
mk vtt, ttml, srv3, srv2, srv1
ur vtt, ttml, srv3, srv2, srv1
mt vtt, ttml, srv3, srv2, srv1
ms vtt, ttml, srv3, srv2, srv1
mr vtt, ttml, srv3, srv2, srv1
ug vtt, ttml, srv3, srv2, srv1
ta vtt, ttml, srv3, srv2, srv1
my vtt, ttml, srv3, srv2, srv1
af vtt, ttml, srv3, srv2, srv1
sw vtt, ttml, srv3, srv2, srv1
is vtt, ttml, srv3, srv2, srv1
am vtt, ttml, srv3, srv2, srv1
it vtt, ttml, srv3, srv2, srv1
iw vtt, ttml, srv3, srv2, srv1
sv vtt, ttml, srv3, srv2, srv1
ar vtt, ttml, srv3, srv2, srv1
su vtt, ttml, srv3, srv2, srv1
zu vtt, ttml, srv3, srv2, srv1
az vtt, ttml, srv3, srv2, srv1
id vtt, ttml, srv3, srv2, srv1
ig vtt, ttml, srv3, srv2, srv1
nl vtt, ttml, srv3, srv2, srv1
no vtt, ttml, srv3, srv2, srv1
ne vtt, ttml, srv3, srv2, srv1
ny vtt, ttml, srv3, srv2, srv1
fr vtt, ttml, srv3, srv2, srv1
ku vtt, ttml, srv3, srv2, srv1
fy vtt, ttml, srv3, srv2, srv1
fa vtt, ttml, srv3, srv2, srv1
fi vtt, ttml, srv3, srv2, srv1
ka vtt, ttml, srv3, srv2, srv1
kk vtt, ttml, srv3, srv2, srv1
sr vtt, ttml, srv3, srv2, srv1
sq vtt, ttml, srv3, srv2, srv1
ko vtt, ttml, srv3, srv2, srv1
kn vtt, ttml, srv3, srv2, srv1
km vtt, ttml, srv3, srv2, srv1
st vtt, ttml, srv3, srv2, srv1
sk vtt, ttml, srv3, srv2, srv1
si vtt, ttml, srv3, srv2, srv1
so vtt, ttml, srv3, srv2, srv1
sn vtt, ttml, srv3, srv2, srv1
sm vtt, ttml, srv3, srv2, srv1
sl vtt, ttml, srv3, srv2, srv1
ky vtt, ttml, srv3, srv2, srv1
sd vtt, ttml, srv3, srv2, srv1
Available subtitles for QS-Zz-2ovo0:
Language formats
en vtt, ttml, srv3, srv2, srv1
ja vtt, ttml, srv3, srv2, srv1
大量に出てきましたが,上の方の Available automatic captions
の物はYoutubeの自動生成&自動翻訳されたもののようです.
Available subtitles
以下のものが人の手で翻訳されたものだと思います.今回の動画では en, ja
があるようです.
--write-sub --sub-lang=ja
で日本語の字幕を書き出すよう指定してみます.
$ youtube-dl --ignore-config --write-sub --sub-lang=ja QS-Zz-2ovo0
動画名.mp4
と 動画名.ja.vtt
というファイルが入手できました.動画名.言語.vtt
というファイルが字幕ファイルのようです.この2ファイルが同じディレクトリにある状態で動画プレイヤーで .mp4 を再生すると字幕が表示されました :)
Totemでは表示されませんでしたが,メニューから字幕ファイルを指定すると表示されました.
$ ls LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.*
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.ja.vtt'
'LibreOffice Asia Conference 2019 - LibreOffice, the many different faces of a global community.mp4'
$ mpv ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4
$ cvlc ./LibreOffice\ Asia\ Conference\ 2019\ -\ LibreOffice\,\ the\ many\ different\ faces\ of\ a\ global\ community.mp4
これでとりあえず目的は果たせました.
でもYoutubeでのみですが,自動生成翻訳字幕のダウンロードが気になるのでこれも試してみます.
今度は日本語字幕の存在しないDebconf19のもので日本語の自動生成字幕 --sub-lang=ja
--write-auto-sub
オプション&解像度を240pにしておきます.
$ youtube-dl --sub-lang=ja --write-auto-sub -f 'bestvideo[height<=240]+bestaudio/best[height<=360]' U17DID4vdpc
自動生成&機械翻訳なのでおかしなところはありますがいけたようです.
後はライブ動画やライブ音声のリアルタイム翻訳ができるといいなーと思ったりも.DeepSpeechで文字起こししてみんなの翻訳とかDeeplに都賀具感じでリアルタイムで出来ないかなとか.
$ youtube-dl --version 2020.05.03 $ dpkg-query -W mpv vlc totem firejail firejail 0.9.62-3 mpv 0.32.0-1 totem 3.34.1-2+b1 vlc 3.0.10-1
9