YoutubeをWebpageに変換するYoutube2Webpage

YoutubeをWebpage に変換する Youtube2Webpage を少し試してみました．

Youtube-to-Webpage | Youtube2Webpage

obra/Youtube2Webpage: I learn much better from text than from videos

これは yt-dlp でYoutube から動画と文字起こしファイルを入手し，文字起こし部分のスクリーンショットを取得してWebpage にするというもののようです．

試しにオープンソースカンファレンスの動画を変換してみました．

$ sudo apt install yt-dlp ffmpeg (1)
$ git clone https://github.com/obra/Youtube2Webpage
$ cd Youtube2Webpage
$ ./yt-to-webpage.pl "【MTG】NetBSDのご紹介 2023-7-29 C-5" 'https://www.youtube.com/watch?v=TnviEtERcVw' (2)
$ python3 -m http.server --bind 127.0.0.1 --directory ./"【MTG】NetBSDのご紹介 2023-7-29 C-5" 8080 (3)
$ xdg-open http://127.0.0.1:8080/index.html (4)

yt-dlp と ffmpeg を導入

任意のタイトルとYoutube URL を指定して実行

httpd を起動

ウェブブラウザで開く

変換されています．
眺めてみるとまず文字起こし翻訳ファイルで en のものが使われています．
そして元動画でWebPage を画面共有しているのであまりスクリーンショットから内容がよくわかりません．

まず文字起こしテキストは --sub-langs ja オプションを付けて日本語を利用するようにしました．

$ git diff ./yt-to-webpage.pl
diff --git a/yt-to-webpage.pl b/yt-to-webpage.pl
index 41b8acf..4174658 100755
--- a/yt-to-webpage.pl
+++ b/yt-to-webpage.pl
@@ -15,7 +15,7 @@ if (!$url || $url !~ m|^https://www.youtube.com|) {

mkdir($slug);
chdir($slug);
-my $video_file = `yt-dlp --console-title --write-auto-subs --write-subs "$url" --print filename --no-simulate`;
+my $video_file = `yt-dlp --console-title --write-auto-subs --write-subs --sub-langs ja "$url" --print filename --no-simulate`;
chomp($video_file);
my ($vtt) = glob('*.vtt');
open(my $fh, "<", $vtt);

Note

ISSUEとPRがありました．これを適用するとオプションで言語が選べるようになります．

add the option to choose subtitle language · Issue #9 · obra/Youtube2Webpage

Adding language option at the end of the command line by TenoTrash · Pull Request #20 · obra/Youtube2Webpage

画像サイズについては，抜き出された画像群のサイズはそこそこ大きいです．css でサイズに制限がかかってるので大きくしました．

$ git diff ./styles.css
diff --git a/styles.css b/styles.css
index 156f994..8972e87 100644
--- a/styles.css
+++ b/styles.css
@@ -56,8 +56,8 @@ li {
}

li img{
- max-width: 288px;
- max-height: 216px;
+ max-width: 1280px;
+ max-height: 720px;
transition: all 0.3s;
}

これで再度コマンドを実行するとファイルがすでにあるというエラーに．一旦ディレクトリごと消して再度実行すると日本語文字起こしテキストかつサイズの大きい画像になりました．

後は文字起こしテキストの精度が悪いですね．(“NetBSD” が “Netflix” や “ネットビジネス” になってたり……)でもこれはYoutube のせいでこのscript の問題ではないです．自分の管理下の動画ならYoutube に任せずOpenAI のWhisper(.cpp) などで文字起こしして手直し後Youtube にアップロードして差し替えるのがいいんでしょうね．