動画は人生を食い潰すタイムウエイスターである

動画というものは、一見[リッチ]で[没入感]があり、[分かりやすいコミュニケーション手段]に見える。 しかし、本質を見誤ってはいけない。 動画の本源は音声媒体なのであり、そこに[動く紙芝居]が付いているだけのものだ。

見た目の華やかさに目を奪われてはいけない。 私たちは、耳で情報を聞き取るとき、せいぜい倍速再生で4倍が限界である。 つまり、どんなに情報が単純でも、動画で受け取る限り、その速度の壁から逃れられない。 これは圧倒的に遅い。

対して、文字言語は爆速である。 活字で提示された情報は、音声言語の約20倍のスピードで処理できる。 つまり、動画の4倍速ですら、テキストのスピードに比べれば亀の歩みである。

動画は[情報をゆっくり喋っている]状態であり、人間の人生という時間を容赦なく食い潰していく。

ここで冷静に考えるべきは──あなたの残りの人生は有限だということである。

24時間を誰かの[ゆっくりしたしゃべり]に奪われ続ける。 それは本当に価値のある時間消費なのか?

私は断言する。 動画はタイム・ウェイスター〔時間浪費装置〕だと。

特に情報伝達を目的とする場合、動画コンテンツ、音声コンテンツの非効率さは致命的である。

しかも、供給サイドの視点から見ても状況は厳しい。 人間の可処分時間は限られている以上、動画市場はすぐに飽和し、競争は熾烈を極める。

YouTube、TikTok、配信プラットフォーム──どこも数えきれないコンテンツで溢れ返り、視聴者一人あたりの割り当て時間は瞬間的に奪い合いになる。

最後に問いを突きつけたい。 あなたが発信したいその情報──本当に動画でなければならないのですか?

動画というメディア特有の[必然性]がそこにあるのか。 もしそれが単なる情報の提示であり、文字で十分伝えられるなら、動画を選ぶ理由はほぼない。

動画は便利そうに見えて、実は最も高コストで非効率なメディアの一つなのである。 人生は短い。 無駄な秒針の回転に、あなたの貴重な時間を溶かしてはいけない。

動画を文字言語に[情報変換]しておけば、その文字データを読み上げソフトウェアにかけて、それをAudacityなどの録音ソフトで録音することによって、オーディオ・ブックになる。 ずんだもんでも、東北ずん子でも、そういう音源を購入して、読み上げさせればいい。 運転中・作業中に、そのオーディオ・ブック、あるいは、ラジオを活用することは、とても有益である。

しかし、机と椅子があり、集中して勉強できる状態で音声コンテンツ、動画コンテンツを消費するのは、時間・人生の無駄遣いである。

机と椅子があり、集中して勉強できる状態にある場合、目で活字を追う、あるいは、覚えたかどうかを試すために思い出す練習をするのに充てるのが賢明である。

いろいろな資格試験のDVDやCDがあるけれども、あれらは、ぜんぶタイムウエイスターである。

最終的には、活字媒体が試験合格にとっての近道である。

例えば、家庭教師のトライの動画が豊富にあるけれども、あれらをぜんぶ視聴するのはアホだ。 活字では理解できない部分だけ、部分活用するのが、時間節約のコツである。

勉強の世界では、音声コンテンツ、動画コンテンツは、効率が悪いという結論が出てしまっている。

活字で可能なことは、活字で済ませる。 さらにいえば、動画よりもブログで情報発信するのが、本質的である。

サクラエディタ・ダウンロード

  • Releases · sakura-editor/sakura
  • サクラエディタはWindows専用である。LinuxやmacOSでは使えない。
  • サクラエディタには、インストーラータイプと、実行ファイルタイプがある。
  • インストーラータイプは、インストールが必要であり、インストールディレクトリへのパスを通して使うタイプである。
    • sakura-tag-v2.4.2-build4203-a3e63915b-Win32-Release-Installer.zip
  • 実行ファイルタイプは、インストール不要であり、USBメモリなどに入れて持ち歩けるタイプである。
    • sakura-tag-v2.4.2-build4203-a3e63915b-Win32-Release-Exe.zip

以下の[YouTube動画の字幕テキストデータをSRT形式に変換するJavaScriptコード]、私は[シフトJIS/CR+LF]で保存して所定のディレクトリに置いて、サクラエディタから呼び出すと使える

  • 私のサクラエディタは、インストールせずに使う[実行ファイルタイプ〔ポータブル版〕]である。
  • サクラエディタでは古いJavaScriptしか使えない。
  • サクラエディタでは、マクロのディレクトリ/フォルダを指定することができる。
  • サクラエディタのメニューから[設定]→[共通設定]を開く。
  • [共通設定]の中に[マクロ]タブがあるので、そこをクリックする。
  • [マクロ一覧]という文字の真横に、マクロを保存したいディレクトリ/フォルダ〔置き場〕を指定する入力欄があるので、そこに[C:\Drawers\Freeware\Writing\Sakuraeditor\sakura-tag-v2.4.2-build4203-a3e63915b-Win32-Release-Exe\macro\]など、マクロを置くディレクトリをフルパスで打ち込み、[OK]を押して登録しておく。
  • サクラエディタに処理対象のテキストファイルをコピー&ペーストしておき、サクラエディタの[ツール(T)]→[名前を指定してマクロ実行(E)]から実行するマクロ〔.mac / .js〕を選んで実行すると、マクロが実行できる。
  • SRT形式のテキストファイル〔字幕ファイル〕は、[UTF8/BOMなし/CR+LF]で私は保存している。

YouTube動画の字幕テキストデータをSRT形式に変換するJavaScriptコード

  • 最終発話の開始時刻から5秒後に最終発話の終了時刻になるように設定されているので、最終レコードの最終発話の終了時刻だけは手動で修正する必要がある。
  • 字幕変換が実行された後は、すべてを選択してコピーするように作られている。つまり字幕変換が実行された結果は、クリップボードにあるので、[Ctrl + V]でペーストできる。
/*
 * YouTube字幕 → SRT形式前駆体変換 + 全選択コピー
 * for サクラエディタ JavaScriptマクロ
 *
 * 元のテキスト例:
 *   0:01
 *   こんにちは今日は巫病についてお話しし
 *   0:06
 *   たいと思いますと巫病って皆さんご存知でしょう
 *
 * 出力例:
 *   1
 *   00:00:01,000 --> 00:00:06,000
 *   こんにちは今日は巫病についてお話しし
 *
 *   2
 *   00:00:06,000 --> 00:00:13,000
 *   たいと思いますと巫病って皆さんご存知でしょう
 */


/*
 * YouTube字幕 → SRT形式前駆体変換 + 全選択コピー
 * for サクラエディタ JavaScriptマクロ
 */
(function () {
    // 独自のtrim関数(空白削除)
    function trimStr(str) {
        if (typeof str !== 'string') return '';
        return str.replace(/^\s+|\s+$/g, '');
    }

    // エディタの全テキストを取得
    Editor.SelectAll(0);
    var fullText = Editor.GetSelectedString(0);

    // 改行コードでテキストを分割
    var allLines = fullText.split(/\r?\n/);
    var lines = [];
    for (var k = 0; k < allLines.length; k++) {
        if (trimStr(allLines[k]) !== '') {
            lines.push(allLines[k]);
        }
    }

    // 時刻行判定
    function isTimeLine(line) {
        if (!line) return false;
        return /^\d{1,2}:\d{2}(:\d{2})?$/.test(trimStr(line));
    }

    // ゼロ埋め関数
    function padZero(str, len) {
        str = str.toString();
        while (str.length < len) str = '0' + str;
        return str;
    }

    // 時刻をミリ秒に変換するヘルパー関数
    function timeToMs(timeStr) {
        var parts = timeStr.split(':');
        var ms = 0;
        if (parts.length === 2) {
            ms = parseInt(parts[0], 10) * 60000 + parseInt(parts[1], 10) * 1000;
        } else if (parts.length === 3) {
            ms = parseInt(parts[0], 10) * 3600000 + parseInt(parts[1], 10) * 60000 + parseInt(parts[2], 10) * 1000;
        }
        return ms;
    }

    // ミリ秒をSRT形式の時刻文字列に変換するヘルパー関数
    function formatTime(ms) {
        var totalSeconds = Math.floor(ms / 1000);
        var milliseconds = ms % 1000;
        var seconds = totalSeconds % 60;
        var minutes = Math.floor(totalSeconds / 60) % 60;
        var hours = Math.floor(totalSeconds / 3600);
        return padZero(hours, 2) + ':' + padZero(minutes, 2) + ':' + padZero(seconds, 2) + ',' + padZero(milliseconds, 3);
    }

    // 時刻とキャプションのペアを作成
    var subtitles = [];
    var i = 0;
    while (i < lines.length) {
        if (isTimeLine(lines[i])) {
            var startTime = lines[i];
            var caption = '';
            var nextLineIndex = i + 1;
            while (nextLineIndex < lines.length && !isTimeLine(lines[nextLineIndex])) {
                caption += (caption ? ' ' : '') + trimStr(lines[nextLineIndex]);
                nextLineIndex++;
            }
            if (caption !== '') {
                subtitles.push({ startTime: startTime, caption: caption });
            }
            i = nextLineIndex;
        } else {
            i++;
        }
    }

    var output = '';
    for (var i = 0; i < subtitles.length; i++) {
        var startTimeMs = timeToMs(subtitles[i].startTime);
        var endTimeMs;

        if (i + 1 < subtitles.length) {
            endTimeMs = timeToMs(subtitles[i + 1].startTime);
        } else {
            // 最後の字幕は、開始時刻に5秒加算
            endTimeMs = startTimeMs + 5000;
        }

        output += (i + 1) + '\r\n';
        output += formatTime(startTimeMs) + ' --> ' + formatTime(endTimeMs) + '\r\n';
        output += subtitles[i].caption + '\r\n\r\n';
    }

    // エディタ操作で出力反映
    Editor.SelectAll(0);
    Editor.InsText(output);
    var draw_old = Editor.SetDrawSwitch(0);
    Editor.ReplaceAll(/[\r\n]+/g, '\n', 148);
    Editor.ReplaceAll(/^(.*?) +$/gm, '$1', 44);
    Editor.ReplaceAll(/^[\r\n]+/, '', 44);
    Editor.ReplaceAll(/[\n]+/g, '\r\n', 44);
    Editor.SelectAll(0);
    Editor.Copy(0);
    Editor.SetDrawSwitch(draw_old);
    if (draw_old) Editor.Redraw(0);
})();