Communitygithub.com

トークヘッド リカット

既存のトークヘッド/インタビュー/ポッドキャスト動画に、タイミングを合わせたデザイン性の高いグラフィックオーバーレイカード(タイトル、ローワーサード、データコールアウト、引用、サイドパネル、ピクチャーインピクチャー)を追加し、選択した16:9/9:16/4:5キャンバスに合わせてMP4にレンダリングします。元のクリップはそのまま再生されます。

トークヘッド リカット とは?

Talking Head Recutは、既存のトークヘッド/インタビュー/ポッドキャスト動画を、タイミングを合わせたデザイン性の高いグラフィックカードで「ドレスアップ」するスキルです。このスキルは、動画のトランスクリプトに基づいてカード(タイトル、ローワーサード、データコールアウト、引用、サイドパネル、PiPなど)を設計し、各カードのHTMLを直接生成、`hyperframes` CLIを使って1つの合成HTMLにまとめ、MP4にレンダリングします。固定されたカードタイプやアーキテクチャはなく、トランスクリプトの内容から有機的にカードが生成されます。ローカルのWhisperで文字起こしを行い、サードパーティのAPIキーは不要です。対応プラットフォームはClaude Code、Cursor、CodexなどのAIエージェントで、`npx hyperframes` コマンドを使用します。元の動画クリップ自体は変更されず、タイミング調整や色調補正などのNLE編集は範囲外です。

対応✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/Drama2557/4RealDigital-Video-Studio/tree/HEAD/.agents/skills/talking-head-recut

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

最初に、このスキルを最新に保ってください — 確認せずに実行: npx hyperframes skills update talking-head-recut。すべてが最新の場合は高速なno-opですが、依存するコアドメインスキルを信頼する前に、このスキルとそれらを更新します。

トークヘッド リカット は何をしますか?

Talking Head Recutは、ローカル動画をフル再生し、発言に同期した、タイミングが調整されたデザイン性の高いグラフィックカード(タイトル、ローワーサード、データコールアウト、引用、サイドパネル、ピクチャーインピクチャー)のシーケンスをその上に重ねます。エージェントはカード(タイミングと内容)を設計し、各カードのHTMLを会話内で直接記述し、単一の合成HTMLを組み立て、hyperframesを介してMP4にレンダリングします。固定されたアーキタイプリストや所定のカード構造はありません — オーバーレイはトランスクリプトが実際に言っていることから生成されます。

構築する前にルートを確認してください。 このスキルは、既存のトークヘッドクリップを、デザイン性の高いグラフィックカード(タイトル、ローワーサード、データコールアウト、引用、サイドパネル、PiP)でパッケージ化します。ユーザーがプレーンなキャプション/字幕(話し言葉をテキストとして)を希望する場合は→ /embedded-captions。1つの短いナレーションなし要素(1つのロゴスティング/ローワーサード)の場合は→ /motion-graphics。クリップは変更されずに再生されます — タイミング再調整、色調補正、フレーム再構成、順序変更、またはオーディオはNLE編集であり、範囲外です。URL/トピック/PRから構築する場合は→ 作成ワークフロー。オーバーレイとキャプションの違いが不明な場合は?/hyperframesを先に読んでください。

embedded-captionsのグラフィックパッケージ化兄弟。 キャプションは_話し言葉_を読みやすい字幕として追加します。これは、再生中の動画の上に_デザイン性の高いグラフィック_を追加します。プレーンな字幕 → embedded-captions。スクラッチから動画を構築する場合は → 作成ワークフロー(product-launch-video / faceless-explainer / ...)。

作業ディレクトリ内の検査可能な中間ファイル:

  • metadata.json — 長さ / 幅 / 高さ / fps
  • audio.mp3 — 抽出されたオーディオ
  • transcript.json — フラットな単語配列 [{ text, start, end }, …] (Whisper; segmentsやwordsラッパーなし)
  • storyboard.json — 軽量なカードアウトライン(エージェントの計画)
  • public/cards/card-XX.html — カードごとに1つのHTMLフラグメント
  • public/index.html — 最終的な合成構成
  • output.mp4 — レンダリングされた動画

CLI 解決

# hyperframes — 文字起こし(ローカルWhisper) + 組み立てられたHTMLのMP4へのレンダリング
npx hyperframes --help

このスキルはhyperframes CLIとシステムのffmpeg/ffprobe上で完全に動作します。文字起こしはhyperframes transcribeによるローカルWhisperです — サードパーティのサービス、APIキー、レート制限のあるプロキシは不要です。

ワークフロー

1. 環境を確認

npx hyperframes doctor          # ffmpeg, ヘッドレスブラウザ, レンダリング依存関係
# バンドルされたアセットを確認:
ls "<SKILL_DIR>/assets/fonts" "<SKILL_DIR>/assets/vendor/gsap.min.js"

必要:

  • ffmpeg / ffprobe (システム)
  • <SKILL_DIR>/assets/fonts/*.woff2、 <SKILL_DIR>/assets/vendor/gsap.min.js (このスキル内にバンドルされ、ステップ9で作業ディレクトリにステージングされます)

文字起こしにキーは不要 — hyperframes transcribeがローカルでWhisperを実行します(ステップ4)。

macOSでhyperframes renderに強く推奨:

export PRODUCER_BROWSER_GPU_MODE=hardware

2. 作業ディレクトリを作成

すべてのアーティファクトはvideos/<project-name>/の下に配置されます — 他の動画ワークフロー(product-launch-video / faceless-explainer / pr-to-video)と同じ規則です。cwdを作業スペースルートに保ち、以下のすべてはこの1つのサブディレクトリの下に書き込まれます。

VIDEO_PATH="/絶対パス/input.mp4"
WORK_DIR="videos/$(basename "$VIDEO_PATH" | sed 's/\.[^.]*$//')"
mkdir -p "$WORK_DIR"

3. オーディオとメタデータを抽出

# メタデータ — 長さ / 幅 / 高さ / fps
ffprobe -v error -select_streams v:0 \
  -show_entries stream=width,height,r_frame_rate \
  -show_entries format=duration -of json "$VIDEO_PATH" > "$WORK_DIR/metadata.json"
# オーディオ
ffmpeg -y -i "$VIDEO_PATH" -vn -acodec libmp3lame -q:a 2 "$WORK_DIR/audio.mp3"

出力: metadata.json (width/height/durationを読み取ります; fps = 評価されたr_frame_rate分数、例: 30000/1001 → 29.97) + audio.mp3。

4. 文字起こし

npx hyperframes transcribe "$WORK_DIR/audio.mp3" -d "$WORK_DIR" --json --model small.en

ローカルWhisper — APIキー不要、プロキシ不要、レート制限なし。単語レベルのtranscript.jsonを作業ディレクトリに書き込みます(単語text + start/endタイムスタンプ)。ステップ6でカードタイミングを駆動する単語/文のタイミングのためにそれを読み取ります。文レベルのチャンクが必要な場合は、自分で句読点/ポーズで単語を文にグループ化します。

メディア長さにクランプ。 Whisperは最終単語のendを実際のクリップ長さより少し超えて返す可能性があります — すべてのカードのendSecとcomposition.durationSecondsをmetadata.jsonの長さにクランプしないと、レンダリングで動画の後に黒いテールが表示されます。

5. トランスクリプトを修正

transcript.jsonは単語オブジェクトのフラットな配列です — [{ "text": "...", "start": s, "end": s }, …](segments配列やwordsラッパーなし。単語ごとのキーは**text**)。それを読み取り、明白なASRエラーを修正します:

  • 同音異義語、製品名、専門用語、句読点
  • 単語のtextをその場で編集してください。start/endタイムスタンプは保持します
  • 事前にグループ化されたsegments配列はありません — カードタイミングのためにセグメントレベルのチャンクが必要な場合は、自分で単語を文にグループ化します(終止符/ポーズで分割)

6. 軽量なストーリーボードをドラフトする(チャット内)

CLIは関与しません。 transcript.json + metadata.jsonを読み取り、カードを直接設計します。storyboard.jsonはエージェント内部の計画アーティファクトです — それを消費するCLIコマンドはありません。ステップ9で作成する構成を駆動できるように、タイミングと内容について明確に考えるために存在します。以下の例と形状を一貫させてください:

{
  "schemaVersion": 3,
  "composition": {
    "fps": 30,
    "width": 1080,
    "height": 1920,
    "durationSeconds": 121.2,
    "layout": "portrait",
    "themeId": "noir",
    "seed": 42
  },
  "videoTrack": {
    "sourcePath": "input-video.mp4",
    "startSec": 0,
    "endSec": 121.2,
    "bounds": { "x": 0, "y": 0, "width": 1080, "height": 1920 }
  },
  "subtitles": { "enabled": false },
  "cards": [
    {
      "id": "card-01",
      "intent": "話し手の不安な真夜中の質問で惹きつける",
      "startSec": 0.5,
      "endSec": 13.0,
      "accentIndex": 0,
      "zone": "fullscreen",
      "contentHints": {
        "kicker": "正直な質問",
        "title": "午後11時の魂を問う質問",
        "detail": "クライアントの60秒ボイスメッセージ: '人民元が上昇したら、それは私の米ドル保険がひどい損失になるということですか?'"
      }
    }
  ]
}

必須カードフィールド:

フィールド型目的
idstringカードHTMLとGSAPセレクターで使用される安定したID
intentstring自然言語による説明; カード合成に供給される
startSec / endSecnumber秒単位(endSec > startSec)
accentIndex0 | 1 | 2 | 3 | 4このカードが使用する5つのテーマアクセントカラーのうちの1つ
zoneenum(下記参照)キャンバス上でカードが配置される場所
contentHintsobject自由形式のバッグ; エージェントがここにkicker/title/detail/data/quoteを入れます
archetype (オプション)stringカードのパターンを記憶するために付ける自由形式のラベル; ない場合 = 自由形式(デフォルト)
transition (オプション)enum: cut | fade | slide | wipe宣言的なカード間遷移

5つのzone値:

zone解決された境界使用時
fullscreenキャンバス全体をカバーヒーローモーメント、大きな数字、マントラ
whiteboard-area40pxマージン(またはポートレート高さの45%)を内側に高密度データ/注釈付きコンテンツ
lower-third下部30%のバンド表示されている動画上の注釈
side-panel右42%(ランドスケープ)または下部40%(ポートレート)データ側、動画は反対側
video-overlayキャンバス全体、ほぼ透明なカードを想定全面動画上の注釈オーバーレイ

ステップ9で構成を組み立てるとき、各カードのzoneを上記の表に従ってカードホストラッパー上のピクセル境界に解決します。動画の境界は一度構成レベルで設定されます(videoTrack.bounds)。動画をカード間で「移動」させるには、構成の<script>内で#video-wrapに対してGSAPトゥイーンを作成します(ステップ9参照)。

所定のカードロールなし、所定の物語アークなし。 カードは動画が実際に言っていることから生成されます — すべて引用またはすべてデータである可能性があり、数字またはストーリーで始まる可能性があります。トランスクリプトにリズムを駆動させてください。

テイクアウェイの数は? — 長さと密度から自動推論。 固定の上限はありません。動画の長さからベースペースを選択し、情報密度で調整します。下限のみ固定: 最小5カードなので、短い動画でもリズムがあります。

ステップ1 — 長さによるベースペース(中程度の密度で自然な秒/カード):

動画の長さベースペース(カードあたりの秒数)根拠
< 60秒(ショートリール)6–8秒視聴者は短尺フォーマットで高速カットを期待
60秒 – 3分8–12秒通常のソーシャルペース
3 – 10分12–20秒呼吸する余地を与える; 各カードがより多くを伝える
10 – 30分20–35秒長尺講義/インタビューのリズム
> 30分30–60秒エピソード的、ほぼ章の感覚

ステップ2 — 密度乗数(ベースペースに乗算):

トランスクリプト内のシグナル乗数効果
高密度 — 多くの数字、明確な主張、スタッカートペース、列挙のような列挙、1~2文ごとに新しいアイデア× 0.7より速くカット、より多くのカード
中密度 — データとナラティブの両方が混在するフロー× 1.0ベースペース
低密度 — 1つの拡張ストーリー、繰り返されるリフレーミング、ゆっくりとした内省的なペース、展開する単一の論点× 1.5より遅くカット、より少ないカード

ステップ3 — 計算:

secPerCard = basePace × densityMultiplier
cardCount  = max(5, round(videoDurationSec / secPerCard))

例(注意 — 上限クランプなし; 長い動画は自然により多くのカードを生成します):

  • 30秒リール、単一のパンチライン(低密度) → 7 × 1.5 = 10.5秒/カード → round(30/10.5)=3 → 下限 5 カード
  • 60秒内省的なモノローグ(低密度) → 10 × 1.5 = 15秒/カード → 4 → 下限 5 カード
  • 豊富なデータを含む121秒トークヘッド(高密度) → 10 × 0.7 = 7秒/カード → 17 カード
  • 5分インタビュー、混合密度 → 16 × 1.0 = 16秒/カード → 19 カード
  • 10分ディープダイブ、高密度 → 16 × 0.7 = 11秒/カード → 55 カード
  • 30分講義、中密度 → 28 × 1.0 = 28秒/カード → 64 カード
  • 1時間ポッドキャスト、低密度 → 45 × 1.5 = 67.5秒/カード → 53 カード

カードが約15秒以上保持される場合、よりリッチなカード(データブロック、マルチステップリビール、段階的アニメーションで展開するいくつかのサブポイント)を計画してください — 静的な一言は8秒を超えると退屈になります。多くのカードが30秒を超える長い作品の場合は、タイムラインをサブ構成にチャンクすることを検討してください(章ごとに1つの.html、data-composition-srcでマウント)。これにより、ファイルごとのGSAPタイムラインが管理しやすくなります — HyperFrames lint警告timeline_track_too_denseを参照してください。

contentはプレーンな文字列(「タイトル: 年率5.69%\n注: ...」)またはデータをキャプチャする任意のJSON形式にすることができます。エージェントがカードごとに形状を決定します。

オプションのアウトロ。 このスキルには固定のブランドアウトロは含まれません。ユーザーが終了カードを希望する場合は、自分でニュートラルなものを設計し(ワードマーク+1行タグライン、約1.5-2秒、フェードイン→短いホールド→フェードアウト)、cards[]に追加し、composition.durationSecondsをそのendSecまで拡張します。それ以外の場合は、最後のコンテンツカードで終了します。

7. レンダリング戦略を決定する

ユーザーとビジュアルの方向性を確認する(これを最初に行う)

カードの設計や境界の決定を開始する前に、ユーザーに出力比率、レイアウト、スタイル、カード密度プリセットを選択してもらいます。フレームは、選択されたレイアウト×スタイルの組み合わせから自動選択されます(以下の「フレーム自動選択」表を参照)。質問を送信する前に、2つのことを事前計算します:

  1. recommendedRatio を元の動画のアスペクト比から計算します。
  2. recommendedDensity を上記の密度計算から計算します。

…

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Drama2557/4RealDigital-Video-Studio

Overlay doctrine for the embedded-captions workflow — the caption MODEL (drop / rail / embed) and the rule that captions are an OVERLAY composited on top of the film, never a reserved bottom band you shift content up to avoid. Load when adding captions/subtitles to a talking-head or launch video, when deciding whether a phrase should be dropped, ride the verbatim rail, or be promoted to a scarce embedded climax, when laying out a composition that will carry captions (do NOT reserve a keep-out band), or when centering a composition on the true frame center under captions. Quotes the rail+embed model from embedded-captions and constraint #13 (captions overlay, keep-out band retired) from the product-launch-video scene agent. Applies ON TOP of embedded-captions.

Drama2557/4RealDigital-Video-Studio

Turn a weekly changelog .md into a finished branded changelog video (square 1080, ~45-60s, Annie VO, animated brand background, mock-UI visualizations, lowkey captions). Use when the user provides a changelog/digest markdown and wants the weekly video, or says "changelog video". Self-contained — fonts, background, lexicon, and scripts ship in this skill.

Drama2557/4RealDigital-Video-Studio

The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]

Drama2557/4RealDigital-Video-Studio

Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet `anchor` rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.

Drama2557/4RealDigital-Video-Studio

Turn arbitrary text — an article, notes, a topic, a brief — into a faceless explainer video: there is no site or footage to capture, so the visuals are invented per scene (typography, abstract graphics, diagrams, data-viz). Use for topic explainers, concept breakdowns, how-tos, listicles. Not a video built from a website (/product-launch-video — promo or tour). Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

Import Figma content into a HyperFrames composition — rendered assets, brand tokens, components, storyboard sections → reconstructed motion (frames read as states, not slides) (REST/CLI), connector-assisted motion when available, and shaders from a connector or native export. Use when the user pastes a figma.com link or asks to bring a Figma design, frame, logo, brand, or animation into a video/composition.

Drama2557/4RealDigital-Video-Studio

Author or edit a custom HyperFrames composition when no specialized workflow fits, or when BRIEF.md sets flow: companion. Use for longer or multi-scene pieces, brand and sizzle reels, montages, static loops, static title cards, footage remixes, and freeform builds. Use motion-graphics instead for a short unnarrated motion-first unit, including an animated title. Route fresh creation through hyperframes before using this skill.

Drama2557/4RealDigital-Video-Studio

Use the HyperFrames CLI development loop: init, add, catalog, capture, lint, check, snapshot, compare, grade-compare, preview, play, present, beats, keyframes, single or batch render, publish, cloud, cloudrun, feedback, lambda, doctor, browser, info, upgrade, skills, compositions, docs, benchmark, telemetry, transcribe, auth, tts, and remove-background. Also use when diagnosing build or render failures. validate, inspect, and layout are deprecated aliases; use check. Covers local, HeyGen-hosted cloud, AWS Lambda, and Google Cloud Run rendering.

Drama2557/4RealDigital-Video-Studio

The HyperFrames composition contract — build one renderable project. Use for composition structure, the `data-*` timing attributes, `class="clip"`, tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Also covers Tailwind projects and the STORYBOARD.md / SCRIPT.md plan formats. Read before writing composition HTML.

Drama2557/4RealDigital-Video-Studio

Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use `hyperframes-animation`.

Drama2557/4RealDigital-Video-Studio

Install, discover, and wire registry blocks and components into HyperFrames compositions. Use when running hyperframes add or hyperframes catalog, installing one item or every block matching a tag, wiring an installed item into index.html, or working with hyperframes.json. Covers discovery, install locations, block sub-composition wiring, component snippet merging, and authoring a new block or component to contribute upstream (idea → scaffold → validate → PR).

Drama2557/4RealDigital-Video-Studio

Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.

Drama2557/4RealDigital-Video-Studio

GATEWAY — load FIRST before composing any HyperFrames animation or video. The high-level motion law that makes a multi-scene video feel like ONE continuous camera move instead of a stack of independently-animated slides. Covers the vector law (how you exit determines how you enter, incl. the Z scale-sign rule), the film's current, carrier elements, causal motion, the Seam Gate (build-gate enforcement), the ban on idle wobble (motion must PERFORM, not breathe), stillness-before-climax, and the sustained-motion routes. Routes to the low-level technique skills (cut-the-curve — the full catalog incl. waterfall entry + nudge curve, oversized-cursor, seam-craft). These rules SUPERSEDE generic / upstream motion guidance. [continuity, direction, vector, momentum, seam, transition, ease, performance, idle-motion, narrative-motion, film-grammar]

Drama2557/4RealDigital-Video-Studio

A short, design-led motion graphic where motion is the message — kinetic typography, stat count-up, chart/data-viz hit, logo sting / brand lockup, lower-third / callout / social overlay, animated map (highlight regions, connect places, zoom to a location), animated tweet / news-article / headline, webpage / UI animation (scroll, cursor, callouts), or fusing a real image's geometry into a chart. Usually under 10s (up to ~30s), no narration or live-action subject; renders to MP4 or transparent overlay. Longer / narrated / multi-scene → /general-video. Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

Turn a music track (an audio file, a video to pull audio from, or a track generated from a mood brief) into a beat-synced video — lyric video, slideshow, or kinetic promo. The music drives all pacing; any user-supplied images/videos are cut onto the same beat grid, and a complete video needs zero assets. Narrated pieces → the input-matched workflow (see /hyperframes). Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

House-style oversized macOS cursor technique for HyperFrames launch videos. Load whenever a scene involves cursors or a pointer-led action, when kicking off a UI scene, when igniting a morph/transition/typing run with a click, or when a scene reads as static, dead, or stale and needs a cheap high-yield source of motion to carry the viewer's eye and segment them out of the stale state. Covers cursor size/look (incl. brand-motif cursors), the off-screen entry law, tip-targeting and the click tap, click-ignites-the-next-beat, and exit / cross-scene handoff.

Drama2557/4RealDigital-Video-Studio

Turn a GitHub pull request (a PR URL, owner/repo#N, or 'this PR' in a checked-out repo) into a code-change explainer video — changelog, feature reveal, fix, or refactor walkthrough built from the diff, commits, and files: the input is a code change, not a website. Not a product promo (/product-launch-video) or a no-PR topic explainer (/faceless-explainer). Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

Render-correctness doctrine for scene-to-scene seams in HyperFrames launch videos — the prerequisites that make transitions composite correctly on the master timeline. Load when assembling the master timeline / index.html, when a white flash appears at a cut or crossfade seam (especially on dark films), when reasoning about why a transition opacity dip shows through, or when verifying the render-side mechanics of how overlapping scene wrappers blend. Covers the opaque stage-ground (#root background) white-flash guard and how the injector overlaps wrappers, holds final frames, ping-pongs tracks, and stamps lint-clean template code onto the master timeline. Does NOT contain the per-transition catalog — see the transition registry for individual transition entries.

Drama2557/4RealDigital-Video-Studio

Author a HyperFrames slideshow — a presentation, pitch deck, or interactive deck with discrete slides, fragment reveals, branching, hotspot navigation, and built-in presenter mode with speaker notes; also converts an existing page into a deck. Output is a navigable deck, not a rendered MP4. If the user didn't explicitly ask for a slideshow, confirm before authoring. Unclear → /hyperframes.

Drama2557/4RealDigital-Video-Studio

Agent skill / project related to launch or product demo video: Drama2557/4RealDigital-Video-Studio

関連スキル