REAPERだけでBoxVisualを作る

当記事はYTPMVアドベントカレンダー2025に参加しています。

0. はじめに

初めまして!マグナレイ (a.k.a. azucatt)と申します!
YouTubeで主に活動をしていて、
YTPMVを作るのはもちろん、
見るのも大好きなYTPMVerです…ん

…さて!
YTPMVアドベントカレンダーにおいて、おそらく他のYTPMVerの方々は
以下のようなトピックについて解説してくださるだろうと思います。

・「どうやったらかっこいい映像・音声が作れるのか?」
・「普段どういうことを意識してYTPMVを作っているのか?」

そこで私は、それらとは少し異なる方向性である、

・「どうやったら単純作業を簡略化できるか?

について解説していきたいな~と思います!

0.5 本記事のざっくりとした内容


私はYTPMVを作成していると申し上げましたが、私はかなりの頻度で
「BoxVisual(後に紹介します)」のYTPMV
を作っています(以下例)

…BoxVisual系の動画を作ったことがある方なら、共感していただけるかもしれませんが、シンプルな構成なので頭を悩ませる必要がない一方、単純作業が多く、制作時間がかさむため、作業自体はあまり楽しいものではありません…

「もっと簡単にBoxVisualを作れないかなー…」

と日々考えていたところに本記事を書く機会を頂いたので、これは効率化に関する勉強やツール開発を行う良いチャンスだと思い、本テーマを

「REAPERだけでBoxVisualを作る」

と定めてみました。

今回は、
「BoxVisualをいかに楽に作るか、その方法を考える」
ということを目的として、主に
「REAPERのVideo ProcessorやReaScript(拡張機能)」
について勉強して参りました。

その結果として、

  • 「REAPER上でBoxVisualを作るのは時短に繋がるのか?の調査」

  • 「YTPMV制作の効率化ができる新しいReaScript等の作成」

を行いましたので、その報告と発表をさせていただきます!

では早速、皆さまが疑問に思っているであろう「BoxVisual」の説明から参りましょう!


1. BoxVisualとは?

画像
(ytpmv /scrap) death by bocchi (by gamerx2410compte5)

早速ですが!
本記事のトピックでありまする、

(((「BoxVisual」とはなんだ…?)))

と思われた方が多いと思うので、
まずは、軽く説明したいと思います!


BoxVisualは、一言で表すと
非常に洗練された古典的なYTPMVの映像構成」です…

…百聞は一見に如かずということで、
BoxVisualが使われているYTPMVをいくつか見ていきましょう!

いずれも素晴らしい作品ですね…(^^


YTPMVを見たことがあるよーって方であれば、一度は目にしたことがあるかと思います。『Sparta Remix』や『Special Stage』などでなどで馴染み深いのではないでしょうか?…

…BoxVisualの特徴を挙げると、以下のようになります。

  1. 画面分割:
    画面を複数のBox(4×4等)に分割し、素材が隙間なく配置

  2. 音との対応:
    各Boxは特定のサンプル(Kick, Bass, Leadなど)に割り当てられる

  3. 動きの同期:
    音が鳴る瞬間、対応するBox内の映像が動く(左右反転など)

  4. ミニマリズム:
    エフェクトを削ぎ落とし、素材の動きと構図の美しさだけで魅せる

「シンプルイズザベスト」という言葉がぴったりな映像構成ですね♪

…なんとなくイメージしていただけましたでしょうか?

(実をいうと、BoxVisualと呼ばれる動画構成はこれ以外にも広い範囲で存在するのですが、説明はまた別の機会に…)

それでは次から、本題の
「REAPERだけでBoxVisualを作る」
に移ろうと思います。


2. REAPERでBoxVisualを作ってみる

本当はAviutlで作る場合についても書こうと思ったのですが、時間が足りなかったので今回はREAPER縛りなのです。

REAPERの正式名称、

  • Rapid

  • Environment for

  • Audio

  • Production,

  • Engineering, and

  • Recording

という名前からわかる通り、
あくまでREAPERは「音声を作ること」に特化しています。

しかし!
REAPERでは「Video processor」というプラグインを使うことで
動画編集もできてしまうんですよね。あら便利…

…さて、
今回紹介する方法で、実際にREAPERのみで作った動画が以下の通りです。

こんな感じでなんとかREAPERのみで
左右反転とn×n matrixを実現することができて、
BoxVisualの動画を作ることができました💦💦(没にならなくてよかった)!





2-0. コードの導入方法

この記事では、BoxVisualを効率よく作るために、「Video Processorのコード(映像処理)」「ReaScript(自動化スクリプト)」という2つのREAPER専用のコードを扱います。 これらは非常に強力な機能ですが、導入方法を知らないと躓いてしまうので、ここで最初に分かりやすく解説しておきます!

【A】 Video Processor(映像エフェクト)にコードを追加する方法

REAPERで映像をプログラム制御するVideo processorにコードを追加します。以下の手順に従って、導入を行ってください。

  1. 映像を扱いたいトラックのFXボタンをクリックし、検索欄に「Video」と入力して Video processor を追加します。

  2. Video processorの画面右側にある、コードが表示されているエリア(黒背景の文字部分)をクリックします。

  3. Ctrl + A で既存のコードを全選択し、Delete キーまたは BackSpace キーで真っ白にします。

  4. 記事で紹介されているコードをコピーし、そこに Ctrl + V で貼り付けます。

  5. 重要: そのままでは反映されません。必ず Ctrl + S を押して保存してください。

    • 成功すると、スライダー(パラメータ)が表示され、機能が有効になります。

  6. 次回から楽にするために(プリセット保存):

    • コードが反映されたら、FXウィンドウ右上の + ボタン(または Preset メニュー)をクリックし、Save preset... を選択します。

    • わかりやすい名前をつけて保存しておくと、次回からはプリセット一覧から選ぶだけで呼び出せるようになります!



【B】 ReaScript(自動化スクリプト)を追加する方法

作業をボタン一つで自動化するスクリプトを登録する手順です。以下の手順に従って、導入を行ってください。

  1. REAPER上部のメニューから Actions -> Show action list... をクリック

  2. Action List右下の New action... ボタンをクリックし、New ReaScript... を選択

  3. ファイルの保存画面が出るので、分かりやすい名前(例: AutoFlip.lua など)を入力して保存します。

  4. スクリプトエディタ(黒い画面)が開くので、記事のコードをコピーして貼り付けます。

  5. Ctrl + S で保存して、エディタ画面を閉じます。

  6. Action Listに戻り、今作ったスクリプト名で検索して選択し、Run を押すと実行されます。

    • 頻繁に使う場合は、ショートカットキーを割り当てると便利です!

この2つの手順さえ覚えておけば、無問題です。 それでは、先へ進みましょう。


2-1. 下準備① (REAPERで動画編集をできるようにする)

「REAPERで動画編集ができるなんて初めて聞いた!」

という方は、まいまい氏作の、REAPERで動画編集をする方法について説明した記事に、先に目を通しておくことをお勧めいたします。その記事では以下の項目について解説されています。

  • REAPERで動画編集をするための下準備(!!)

  • 動画の表示方法

  • 動画の書き出し方法

  • Video processorの追加方法

  • 簡単なエフェクトの追加方法

この記事を参考に、まずはREAPERで動画編集ができる環境を整えておきましょう!


2-2. 下準備② (rppファイルを整える)

REAPERで動画編集できるようになったし、
音声も完成したぞ!というあなた。
次に待ち受けているのは

「動画編集しやすいようにrppファイルを整理する」

という作業です。
必須ではありませんが、rppを整理することで間違いなく動画が作りやすくなります。これはREAPERで動画編集する際には必須ですし、AviUtlで編集する際にもかなり有効です。

では「整理された」とはどういう状態を指すのでしょうか
個人的には、以下の3つができていれば整理されているといえるでしょう。

  1. 素材ごとにトラックを分類し、動画編集時に認識できるようトラックに名前を付けられている

  2. REAPER上の全アイテムを、対応する動画ファイルに置換されている

  3. 各アイテムの「Start in source(開始時間)」を、その素材の使いたい瞬間と同期させられている

画像
整理されたrpp

さて、
音声完成直後のrppから、実際に整理してみましょう。

画像
音声完成直後のrpp
画像
整理フロー

Vitalで音作りをしていたりするので、
MIDIをitemに変更したり、(midi2itemを使うと楽)
音声ファイルを動画ファイルに置き換えたりする必要があります。

具体的なrpp整理の手順は以下の通りです。

  1. 不要なトラックの削除・非表示

  2. MIDIをitemに変換

  3. トラック名の変更

  4. 全てのitemを動画ファイルに置換

  5. 再生位置の同期

この手順で進めていきます。使う素材数によって所要時間は変わりますが、整理作業自体は30分以内で終わるかと思います。


2-3. とりあえずなんか出力してみる

Video processorの追加してみましょう!

  1. 整理したトラックの一番上に新しいトラックを追加

  2. FX ⇒ Video processorを追加

  3. プリセットから Combine: Grid of videos を選択

これで出力してみると…

画像
Video processorのCombine:Grid of videosを選択

…非常に目に悪い動画が出力されましたね♪
でも、動画を複数表示させることができることはわかりました!…

…しかし、BoxVisualを作るとなった場合、
以下の課題が見えてきました。

  • 課題1: 4×4や6×6のように画面を分割しなければならない

  • 課題2: 左右反転させないといけない

  • 課題3: 素材が出る場所を固定化させないといけない

…ん、
…まあ、一つずつ解決していきましょう!


2-4.  1つ目の課題:画面の分割

BoxVisualでは、例えば4×4や6×6のように、画面全体をn×n(n∈)で分割していく必要があります。

ここでVideo processorのプリセットの一つである、
「Combine: 2×2 input matrix」に着目しました。
これを選択して出力してみると、

おお!2×2matrix表示になりましたね!
この「Combine: 2×2 input matrix」のコードを見てみると…

// 2x2 matrix - draws up to 4 videos from previous tracks
x=0;
loop(4,
  gfx_blit(input_track(x), 1 /* preserve aspect */,
           (x&1)?project_w*0.5:0, (x&2)?project_h*0.5:0, // position
           project_w*0.5,project_h*0.5 // output width and height
          );
  x += 1;
);

これは改造できそう…!
これを拡張して、任意の自然数nで画面全体をn×nに分割できる、
「n×n input matrix」を作ればいいんじゃないかあ!?
ってことで

// N x N Matrix
//@param1:n  "Grid Size" 2 1 12 1 1
//@param2:l "Pixel" 2 1 8 1 1

x=0;
loop(n*n,
col = x % n;
row = floor(x / n);

gfx_blit(input_track(x), 1,
col * project_w / n, row * project_h / n,
project_w / n + l, project_h / n + l
);
x += 1;
);

改造後の「n×n matrix」のコードが👆です。
2-0.で説明したとおりに、Video processorに導入してみてください。

「n×n matrix」を使っている様子をとりあえず貼っておきます。

「n×n matrix」のパラメタは

  • Grid Size: n×nのnを指定します

  • Pixel: n=7の場合など、計算処理の関係で画面に隙間ができてちらつくことがあるため、それを埋めるための調整値です

の2つしかありません。とても簡単ですね。
実際にn=6で出力してみると、

おお。
何とか画面の分割ができましたね。

ただ、この場合、Video processor内で、input_track(x)というAPIを使っているので、
課題3: 素材が出る場所を固定化させないといけない」
という課題の解決が遠のいてしまいます…

どうしたものでしょうか。


2-5. 2つ目の課題:左右反転

一旦それはシカトして、
左右反転に移っちゃいましょう

左右反転なんてAviutlならボタンぽちーで済みますが、
REAPERではそうはいかないようです。

とりあえず、見つけた左右反転の方法を2つ紹介します。

◆ 左右反転の方法1:Video processorを使う

またまた登場しましたVideo processor!
原理の説明は長くなるので省略し、コードと大雑把なやり方だけ説明します。

(が、このやり方は非常に不具合が発生しやすいので、全くお勧めできません、こういうのもあるんだ、程度の認識で眺めていただけたら嬉しいです。)

//@param 1:flip "Mirror Flip" 0 0 1 0.5 1

input_info(0, w, h);
w > 0 ? (
  
  flip > 0.5 ? (
    gfx_blit(0, 1, 0, 0, project_w, project_h, w, 0, -w, h);
  ) : (
    gfx_blit(0, 1, 0, 0, project_w, project_h);
  );
);

上が左右反転させるためのVideo processorのコード、
「Mirror Flip」です。
使いたい方は、2-0.と同様のやり方でVideo processorのコードを導入してください。

-- Auto-Flip

local function GetTargetParam(track)
  local cnt = reaper.TrackFX_GetCount(track)
  for i = 0, cnt - 1 do
    local p_cnt = reaper.TrackFX_GetNumParams(track, i)
    for p = 0, p_cnt - 1 do
      local _, name = reaper.TrackFX_GetParamName(track, i, p, "")
      if name:find("Mirror") or name:find("Flip") then return i, p end
    end
  end
end

local function main()
  local sel_cnt = reaper.CountSelectedTracks(0)
  if sel_cnt == 0 then
    reaper.ShowMessageBox("反転させたいトラックを選択してください。", "エラー", 0)
    return
  end

  reaper.Undo_BeginBlock()
  local success = 0

  for i = 0, sel_cnt - 1 do
    local track = reaper.GetSelectedTrack(0, i)
    local fx, param = GetTargetParam(track)

    if fx then
      local env = reaper.GetFXEnvelope(track, fx, param, true)
      if env then
        reaper.DeleteEnvelopePointRange(env, 0, reaper.GetProjectLength() + 100)
        
        local state = 0
        local item_cnt = reaper.CountTrackMediaItems(track)
        
        for j = 0, item_cnt - 1 do
          local item = reaper.GetTrackMediaItem(track, j)
          local pos = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
          state = 1 - state
          reaper.InsertEnvelopePoint(env, pos, state, 1, 0, false, true)
        end
        
        reaper.Envelope_SortPoints(env)
        success = success + 1
      end
    end
  end

  if success == 0 then
    reaper.ShowMessageBox("パラメータが見つかりませんでした。\nトラックの設定を確認してください。", "エラー", 0)
  end

  reaper.Undo_EndBlock("Auto-Flip Tracks", -1)
  reaper.UpdateArrange()
end

main()

こちらは、自動で左右反転を切り替えるためのReaScriptです。
こちらのReaScriptの導入手順も2-0.で解説した通りです。

一応、ReaScriptの導入から、
自動左右反転化までを動画で表示しておきます。

自動左右反転の手順ですが、

  1. 左右反転させたいトラックにVideo processorを入れる。

  2. 「Mirror Flip」のコードを入力し、Ctrl + S。

  3. 左右反転させたいトラックを選択した状態で「AutoFlip.lua」を実行。

意外と簡単に左右反転できそうに見えますが、
実はかなり深い落とし穴があるんですね。
解説は少し大変なので、省略いたします。
n×n matrixと組み合わせてみると理由がわかるかもしれません。


◆左右反転の方法2:Item propertiesをいじる
これは特に何も導入しなくても、誰でもできる方法です。

  1. 何かしらのitemを選択した状態で、Ctrl + F2 を押す。

  2. 「Item properties」が開く。

  3. 画面下部にある「Video: normal」を、「Horizontal Flip」に変更する。

すると、動画が左右反転しているではありませんか!
これを自動化できれば、楽に左右反転ができそうですねー。

ということで、実際にやってみました。

-- AutoFlip

function SetItemFlip(item, enable)
    if not item then return end
    local retval, chunk = reaper.GetItemStateChunk(item, "", false)
    if not retval then return end

    local new_chunk = chunk
    local changed = false
    local has_flip_2 = chunk:find("FLIP 2") ~= nil
    local has_flip_0 = chunk:find("FLIP 0") ~= nil

    if enable then
        if not has_flip_2 then
            if has_flip_0 then
                new_chunk = chunk:gsub("FLIP 0", "FLIP 2")
                changed = true
            elseif chunk:find("<SOURCE") then
                new_chunk = chunk:gsub("(<SOURCE%s+[%w_]+)", "%1\nFLIP 2")
                changed = true
            end
        end
    else
        if has_flip_2 then
            new_chunk = chunk:gsub("FLIP 2", "FLIP 0")
            changed = true
        end
    end

    if changed then
        reaper.SetItemStateChunk(item, new_chunk, false)
    end
end

function ProcessTracks(isAlternatingMode)
    local trackCount = reaper.CountSelectedTracks(0)
    for t = 0, trackCount - 1 do
        local track = reaper.GetSelectedTrack(0, t)
        local itemCount = reaper.CountTrackMediaItems(track)
        
        for i = 0, itemCount - 1 do
            local item = reaper.GetTrackMediaItem(track, i)
            local shouldFlip = false
            
            if isAlternatingMode then
                if i % 2 == 1 then
                    shouldFlip = true
                end
            else
                shouldFlip = false
            end
            
            SetItemFlip(item, shouldFlip)
        end
    end
end

function Main()
    local trackCount = reaper.CountSelectedTracks(0)
    if trackCount == 0 then 
        reaper.ShowMessageBox("トラックを選択してください。", "エラー", 0)
        return 
    end
    
    local hasFlippedItem = false
    
    for t = 0, trackCount - 1 do
        local track = reaper.GetSelectedTrack(0, t)
        local itemCount = reaper.CountTrackMediaItems(track)
        for i = 0, itemCount - 1 do
            local item = reaper.GetTrackMediaItem(track, i)
            local _, chunk = reaper.GetItemStateChunk(item, "", false)
            if chunk:find("FLIP 2") then
                hasFlippedItem = true
                break
            end
        end
        if hasFlippedItem then break end
    end

    local executeMode = 0 -- 0:None, 1:Alternating, 2:Reset

    if hasFlippedItem then
        local result = reaper.MB("左右反転をなくしますか?", "確認", 4)
        if result == 6 then 
            executeMode = 2 
        end
    else
        local result = reaper.MB("左右反転させますか?(交互)", "確認", 4)
        if result == 6 then 
            executeMode = 1 
        end
    end

    if executeMode > 0 then
        reaper.PreventUIRefresh(1)
        reaper.Undo_BeginBlock()
        
        if executeMode == 1 then
            ProcessTracks(true)
        else
            ProcessTracks(false)
        end
        
        reaper.Undo_EndBlock("Alternating Video Flip", -1)
        reaper.PreventUIRefresh(-1)
        reaper.UpdateArrange()
        
        reaper.MB("完了しました。", "完了", 0)
    end
end

Main()

例によって、こちらのReaScriptを追加してください。
名前は何でもいいですが、わかりやすく「AutoFlip」とでもしておきましょう。

使いかたは簡単で、トラックを選んでAutoFlip.luaを実行するだけ!
すると、、、

左右反転したー!

(内部処理としては、 reaper.GetItemStateChunk というAPIでアイテムのデータを取得し、データを書き換えて「normal」から「Horizontal Flip」に変更しているだけです)

これで
「課題2:左右反転の実現」
は解決ですね!やった!


2-6. 3つ目の課題:素材が出る場所を固定する

2-4.で紹介した「n×n matrix」を使った方法では、素材が出る場所の固定は困難と述べました。そこで、別のアプローチを使って素材の配置を行っていくことにします…

今回はVideo processorのプリセット
Basic helpers:Track opacity/zoom/pan
に着目しました

その名の通り、動画の拡大率・xy座標・透明度・回転・その他諸々。
をいじることができてしまいます。

これを改造したのが「BoxVizualizer」です。

// Title: BoxVizualizer

//@param1:zoom 'Zoom' 0 -10 10 0 0.1
//@param2:col 'Column' 1 1 10 1 1
//@param3:row 'Row' 1 1 10 1 1
//@param4:b 'Box Size' 1 1 10 1 1
//@param5:opacity 'opacity' 1
//@param6:clear 'clear bg' 1 0 1 0.5 1
//@param7:force_w 'force width' 0 0 2600 1024 2
//@param8:force_h 'force height' 0 0 2600 1024 2
//@param9:xshift 'X Shift' 0 -1 1 0
//@param10:yshift 'Y Shift' 0 -1 1 0


(bg_img=input_ismaster() ? -2 : input_track(0)) ? (
  force_w &= -2; force_h &= -2;
  force_w && !force_h ? force_h = (force_w * project_h / project_w)&-2;
  force_h && !force_w ? force_w = (force_h * project_w / project_h)&-2;
  force_w>0 && force_h>0 ? ( project_w=force_w; project_h=force_h );

  w = opacity < 0.01 ? 0 : opacity > 0.99 ? 1 : opacity;
  gfx_a2=0;

  gfx_blit((w < 1 || clear < 0.5) ? bg_img : -2,1);

  w > 0 ? (
    gfx_a=w;
    
    n = max(1, floor(b + 0.5));
    c = min(max(1, floor(col + 0.5)), n);
    r = min(max(1, floor(row + 0.5)), n);

    cell_w = project_w / n;
    cell_h = project_h / n;

    center_x = (c - 1) * cell_w + cell_w * 0.5;
    center_y = (r - 1) * cell_h + cell_h * 0.5;

    z = 10^(zoom/10);
    dw = cell_w * z;
    dh = cell_h * z;

    shift_x = xshift * cell_w;
    shift_y = yshift * cell_h;

    x = center_x - dw * 0.5 + shift_x;
    y = center_y - dh * 0.5 + shift_y;

    gfx_blit(0, 0, x, y, dw, dh);
  );
);

それぞれのパラメタは

  • Zoom: 映像の拡大・縮小率(0で等倍)

  • Column: 配置するグリッドの列の位置番号

  • Row: 配置するグリッドの行の位置番号です。

  • Box Size: 画面を縦横何分割にするか(n×n matrix)のnの値

  • opacity: 映像の不透明度(1で完全表示、0で透明)

  • clear bg: 背景を塗りつぶすか(1=黒で塗りつぶす、0=下のトラック映像を透かす)

  • force width: プロジェクトの出力横幅を強制的に変更します(0で無効)

  • force height: プロジェクトの出力縦幅を強制的に変更します(0で無効)

  • X Shift: 配置位置からの横方向の微調整(オフセット)

  • Y Shift: 配置位置からの縦方向の微調整(オフセット)

を示しています。

「Basic helpers:Track opacity/zoom/pan」では、映像を拡大したり移動させたりする際に、ピクセル単位や全体比率でしか指定できませんでしたが、「BoxVisualizer」は映像を特定のグリッド(格子)に自動的に配置する機能を持ちます。

これにより、以下の2つの課題を一気に解決できちゃいます。

  1. 画面の分割(課題1): Box Size (n) で指定したグリッドサイズに基づき、画面全体をn×nに分割。

  2. 素材の位置固定(課題3): Column (col) と Row (row) の値を使って、各素材がそのグリッド内の特定の位置に正確に配置されるように計算。

以上から、「BoxVizualizer」によって課題1(画面の分割)と、課題3(素材の位置固定)を同時にクリア、「AutoFlip.lua」によって課題2(左右反転)をクリアすることができました。

これでBoxVisual制作に必要なすべての要素が揃いました!
早速BoxVisualを作っていきましょう!


2-7. 実際にBoxVisualをREAPERだけで作ってみる

これまでに説明した

  • 「BoxVisualizer」(位置固定&サイズ調整)

  • 「AutoFlip」(自動左右反転)

だけを使って、実際にBoxVisualを組み立てていきましょう。

手順はいたってシンプルです。

ステップ1: トラックに「BoxVisualizer」を適用する

まず、整理されたトラックにVideo processorを追加し、保存しておいたプリセット「BoxVisualizer」を読み込みます。

パラメータを以下のように設定してみましょう。

  • Box Size: 4 (画面を4×4の16分割にする)

  • Column: 1

  • Row: 1

  • clear bg: 0 (重要! これを0にしないと背景が黒で塗りつぶされて、他のトラックが見えなくなります)

すると…素材が画面の左上にちょこんと配置されましたね!

ステップ2: 他のトラックも配置していく

他のトラックにも同様にVideo processorを追加し、「BoxVisualizer」を適用します。 変更するのは Column と Row の値だけです。

  • トラック2: Col 2, Row 1

  • トラック3: Col 3, Row 1

  • ...

これを繰り返して、画面を好きなように埋めていきます。

ステップ3: 動きをつける(AutoFlip)

配置が終わりましたが、このままだと映像がただそこで再生されているだけです。音に合わせて動きをつけたいですよね。 そこで、先ほど導入したReaScript「AutoFlip.lua」の出番です!

  1. 編集画面で、動きをつけたいトラック(またはアイテム全選択)を選択します。

  2. Action Listから AutoFlip.lua を実行(Run)します。

これだけです。
再生してみると…音が鳴るたびに映像が左右反転しているはずです!

完成!





いやさすがにこのままでは終われません。
「BoxVisualizer」を各トラックに挿入していく時間があまりにも長すぎて、何の時短にもなってないですよね。

あと出力が重すぎる。
スペックに自信のないパソコンでやったら
壊れちゃうかもしれませんので気を付けてください


3. 現在作成中のReaScript

2-7.の最後でも言いましたが、「BoxVisualizer」を各トラックに手動で挿入し、パラメータを一つずつ設定していく時間はあまりにも無駄で単純作業です。これでは本末転倒ですね…。

そこで、これをもっと簡単にかつ直感的に行えるように、「BoxVisual.lua」という専用スクリプトを現在制作中です!

ほぼ完成しているのですが、まだデバッグや機能が足りていない部分があり、リリースはもう少し先になりそうです🥲

内部でやっていることは、今回紹介した「BoxVisualizer」と「AutoFlip」を裏側で自動的に挿入・設定しているだけなのですが、GUIを用意したことでかなり直感的に操作できるようになります。

「BoxVisualizer」をちまちま挿入していく時間を大幅に短縮できるので、これが完成すれば「REAPER上でBoxVisualを作るのは時短に繋がる」といえるでしょう!

配布できる段階になったらどこかで告知しようと思いますので、気長にお待ちいただければ幸いです。

(この開発中のLuaスクリプトに興味をお持ちいただけましたら、デバッグや機能改善にご協力いただける方を募集しております。DMでご連絡いただければ、先行してスクリプトをお渡しし、一緒に完成を目指したいと考えています。何卒よろしくお願いいたします)

4. まとめ

本記事では、YTPMVアドベントカレンダーの企画として、「どうやったら単純作業を簡略化できるか?」というテーマのもと、REAPERだけでBoxVisualを作る方法を模索してきました。

今回の検証結果

  • REAPERでもBoxVisualは作れる!

    • Video Processor等を活用することで、AviUtl等の動画編集ソフトを使わずに画面分割や配置が可能であることが実証できました。

  • Video Processor × ReaScript の可能性

    • 「n×n matrix」や「BoxVisualizer」のような映像処理コードと、「AutoFlip」のような操作自動化スクリプトを組み合わせることで、YTPMV特有の表現を効率化できる可能性が見えてきました。

  • 完全な楽にはまだ遠い…?

    • 現段階では、トラックごとのパラメータ設定など手作業が残っており、劇的な時短」までは言えないのが正直なところです。しかし、第3章で紹介したような専用ツールの開発によって、その壁も越えられるかも…?

最後に

YTPMV制作において、映像や音声のクオリティを追求するのはもちろん大切ですが、「面倒な作業をいかに減らすか」という視点もまた、長く楽しく活動を続けるためには重要ではないでしょうか。

今回はREAPER単体に焦点を当てましたが、
AviutlでのBoxVisual作成に焦点を当てたnoteも書いてみたいですね。
現在Aviutlで楽にBoxVisualを作るツールを作成中なので
完成したら、書いてみようかなと思います。

REAPERは本来DAWですが、工夫次第でここまで動画編集もできるというなすばらしい拡張性を持っています。この記事が、皆さんのREAPERライフやYTPMV制作の効率化のヒントになれば幸いです。

ここまでお読みいただき、ありがとうございました!
それでは、良きYTPMVライフを!👋

(続くアドベントカレンダーの記事も楽しみにしていてください!)

いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
買うたび 抽選 ※条件・上限あり \note クリエイター感謝祭ポイントバックキャンペーン/最大全額もどってくる! 12.1 月〜1.14 水 まで
YTPMVを作っています
REAPERだけでBoxVisualを作る|magnalay
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1