ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

  • 【ニコニコランキング】Twitter集計導入のいろはにほへと

    2017-06-25 08:23

    毎度ありがとうございます

    ニコニコランキング制作をしていて、なにか視聴者の興味を引くような
    項目を追加できたらいいなー...と考えていたのですが

    そこで思いついたのが
    「動画IDを含むツイート数を集計して表示する」
    というものです


    *-* *-* *-*


    ◆使用ツール


    EXCEL
    一応2013以降を推奨しますが、なんでも良いと思います


    cmd


    Python
    3.x.xで良いんじゃないでしょうか


    *-* *-* *-*


    ◆導入の壁

    ニコニコランキング制作を行うユーザーであれば、ニコニコAPIの取得は
    試してみたことがある方も少なくはないと思います

    ニコニコAPIの場合だと、EXCEL2013以降の表計算ソフトであれば
    WEBSERVICE関数というものを使用すると比較的容易に取得ができます


    F列にWEBSERVICE関数を置き、B/G/H列でFILTERXML関数を用いて
    タイトルなどの情報を取得しています

    しかし、TwitterのAPIは
    取得の際にOAuth認証というものを行わないといけません
    そのあたりの知識が皆無である場合は、大きなハードルとなります(自分はなりました)

    そのあたりに関しては、VBAよりもPythonのほうが情報がたくさんあって
    参考にしやすいので 今回は認証・検索はPythonで行うことにしました


    *-* *-* *-*


    ◆検索までの流れ

    NRMなどで作成したテキストをEXCELに読み込む

    それをもとにPython用プログラムファイル(.py)を作成

    .pyファイルを呼び出すためのバッチファイルを作成

    EXCELからバッチファイルを実行して結果をcsvに保存

    csvをEXCELに読み込み、ツイート数を解析

    という感じになります

    めんどくさい!こんなの手動でやってられない!
    ということで、マクロに書き起こしていきます


    *-* *-* *-*


    ◆全容


    作業台となるxlsmはだいたいこんな感じです
    「CAMP」・・・実行&結果表示画面
    「twcsv.py」・・・Pythonプログラムファイル
    「TEMP」・・・csvの内容を保管


    *-* *-* *-*


    ◆技術的な話

    ・NRMなどで作成したテキストをEXCELに読み込む

    Sub Yomikomi()

    Dim wb_A As Workbook, wb_B As Workbook
    Dim ws_A As Worksheet, ws_B As Worksheet

    Set wb_A = ThisWorkbook
    Set ws_A = wb_A.Sheets("CAMP")
    Set wb_B = Workbooks.Open(Range("B30").Value) 'B30で指定したパスのtxtを開く
    Set ws_B = wb_B.Sheets(1)

    ws_B.Range("A1:A27").Copy 'txtの動画IDをコピー
    ws_A.Activate
    ws_A.Paste Destination:=Range("C2") 'コピーしたのをC2に貼り付け
    wb_B.Close SaveChanges:=False

    End Sub

    読み込んでコピペするだけなのでこんなもんです

    ・それをもとにPython用プログラムファイル(.py)を作成

    #!/user/bin/env python
    # -*- coding: utf-8 -*-

    from requests_oauthlib import OAuth1Session
    import csv
    import json
    import sys, codecs

    C_KEY = '**********'
    C_SECRET = '**********'
    A_KEY = '*****-**********'
    A_SECRET = '**********'

    def Search_words():
     url = "https://api.twitter.com/1.1/search/tweets.json?ほにゃらら"
     tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
     req = tw.get(url)
     tweets = json.loads(req.text)

     f = open("tweetsearch.csv" , "ab")
     writer = csv.writer(f)

     for tweet in tweets["statuses"]:
      id = (tweet["user"]["screen_name"].encode("utf-8"))
      time = (tweet["id"])

      writer.writerow([id, time])

     f.close()

     return Search_words

    Search_words()

    参考:Python で Twitter API にアクセス - http://qiita.com/yubais/items/dd143fe608ccad8e9f85

    緑字で書かれている行(C_KEY/C_SECRET/A_KEY/A_SECRET)に関しては
    APIトークンと呼ばれ、自分のTwitterアカウントのものを事前に
    取得しておかないといけません

    参考:Twitter REST APIの使い方 - https://syncer.jp/Web/API/Twitter/REST_API/

    同じく緑字で書かれているurl = ~については、ここが検索URLとなるので
    生成するためにEXCELの関数を用います

    =" url = ""https://api.twitter.com/1.1/search/tweets.json?
    q="&CAMP!A2&
    IF(LEN(TEMP!B100)=0,"","&max_id="&TEMP!B100-1000)&"
    &lang=ja
    &result_type=mixed
    &count=100
    """

    見栄えの問題で改行していますが、これで1つの関数となります
    2行目が検索キーワード
    3行目がオフセット
    6行目がツイート取得数です

    Twitter側の制限により一回に取得できるツイート数は100が上限です
    100以上の検索結果がある場合、複数回に分けて取得を行う必要があります

    2回目以降の取得は、3行目に存在するmax_idを指定して行います
    ツイート取得の際にA列にユーザーID、B列にツイートIDを書き出しているので
    セルB100の値-1000を指定してやることで、最新のツイートから数えて
    101個目のツイートから取得をすることが可能となります

    ・それをもとにPython用プログラムファイル(.py)を作成
    ・.pyファイルを呼び出すためのバッチファイルを作成
    ・EXCELからバッチファイルを実行して結果をcsvに保存
    ・csvをEXCELに読み込み、ツイート数を解析
    これら一連の流れをマクロに書き起こしたものが以下になります

    Sub pyHozon()

    Dim Search As Integer

    For Search = 2 To 28 'セルC2~C28までの動画IDを検索するための引数

     Range("A2").Value = Range("C" & Search).Value '検索したいIDをA2にコピー
     ActiveWorkbook.Sheets("TEMP").Range("A1:B100").ClearContents '検索結果リセット

     '.pyの保存
     Set ws = ActiveWorkbook.Sheets("twcsv.py")
     datFile = CurrentDir & "1.py"
     FileNo = FreeFile()
     Open datFile For Output As #FileNo
      For i = 1 To 37
       Print #FileNo, ws.Cells(i, 1).Text
      Next
     Close #FileNo

     'バッチファイルの保存
     datFile = CurrentDir & "1py.bat"
     FileNo = FreeFile()
     Open datFile For Output As #FileNo
      Print #FileNo, "@echo off"
      Print #FileNo, "pushd %0\.."
      Print #FileNo, "python 1.py"
     Close #FileNo

     'バッチファイルの実行
     Dim batFileName As String
     Dim ShellObject As Object

     batFileName = CurrentDir & "1py.bat"
     Set ShellObject = CreateObject("WScript.Shell")
     ShellObject.Run batFileName, 1, True

     '出力されたcsvを読み込む
     Dim wb_A As Workbook, wb_B As Workbook
     Dim ws_A As Worksheet, ws_B As Worksheet

     Set wb_A = ActiveWorkbook
     Set ws_A = wb_A.Sheets("TEMP")
     Set wb_B = Workbooks.Open(CurrentDir & "tweetsearch.csv")
     Set ws_B = wb_B.Sheets(1)

     Dim RANK1 As Variant

     RANK1 = ws_A.Range("A1:B100")
     For i = 1 To 100
      For j = 1 To 2
       RANK1(i, j) = ws_B.Cells(i, j).Value
      Next
     Next
     ws_A.Range("A1:B100") = RANK1
     wb_B.Close SaveChanges:=False

     'ツイートIDの書式設定
     Columns("B").NumberFormatLocal = "0"

     hnd = 0 'ツイート数の合計を出すための変数

     '1回の取得数が100以下になるまで試行
     Do While Len(Sheets("TEMP").Range("B100").Value) <> 0
      Kill CurrentDir & "1.py" '初回検索分のpyファイル削除

      '.pyの保存
      Set ws = ActiveWorkbook.Sheets("twcsv.py")
      datFile = CurrentDir & "1.py"
      FileNo = FreeFile()
      Open datFile For Output As #FileNo
       For i = 1 To 37
        Print #FileNo, ws.Cells(i, 1).Text
       Next
      Close #FileNo

      Kill CurrentDir & "1py.bat"
      Kill CurrentDir & "tweetsearch.csv"

      'バッチファイルの保存
      datFile = CurrentDir & "1py.bat"
      FileNo = FreeFile()
      Open datFile For Output As #FileNo
       Print #FileNo, "@echo off"
       Print #FileNo, "pushd %0\.."
       Print #FileNo, "python 1.py"
      Close #FileNo

      'バッチファイルの実行
      batFileName = CurrentDir & "1py.bat"
      Set ShellObject = CreateObject("WScript.Shell")
      ShellObject.Run batFileName, 1, True

      wb_A.Sheets("TEMP").Range("A1:B100").ClearContents '初回検索結果削除

      '出力されたcsvを読み込む
      Set wb_A = ActiveWorkbook
      Set ws_A = wb_A.Sheets("TEMP")
      Set wb_B = Workbooks.Open(CurrentDir & "tweetsearch.csv")
      Set ws_B = wb_B.Sheets(1)

      RANK1 = ws_A.Range("A1:B100")
      For i = 1 To 100
       For j = 1 To 2
        RANK1(i, j) = ws_B.Cells(i, j).Value
       Next
      Next
      ws_A.Range("A1:B100") = RANK1
      wb_B.Close SaveChanges:=False

      'ツイートIDの書式設定
      Columns("B").NumberFormatLocal = "0"

      hnd = hnd + 100 'ツイート数の合計を出すための変数

     Loop

     '検索用ファイル削除
     Kill CurrentDir & "1.py"
     Kill CurrentDir & "1py.bat"
     Kill CurrentDir & "tweetsearch.csv"

     'ツイート数の合計出力
     Sheets(1).Range("E" & Search).Value = "=" & hnd & "+COUNTA(TEMP!A1:A100)"
     Sheets(1).Range("E" & Search).Value = Sheets(1).Range("E" & Search).Value

    Next Search

    Range("A2").ClearContents
    Sheets(1).Activate

    End Sub

    解説をするのは流石に骨が折れるので、コメントアウトの部分を見たり
    ググったりしながら理解を深めて頂くようお願いします...

    以上の処理が正常に完了すると、各動画のIDを含むツイート数が
    それぞれ取得できます

    最後に、もとのテキストファイルにツイート数情報を
    付記して保存をすれば完成となります

    *-* *-* *-*


    ◆くわえて

    NRMでフレーム画像を作成するときに今回の値を読み込むように
    レイアウトファイルを設定してやれば
    フレームにツイート数を表示させることができます



    いかがでしょうか、Twitter集計

    私の気力不足で説明がしきれていない部分もあり
    わからねえよカス等言われても仕方ないですが...
    ランキング作者の皆さんはこれを機に検討してみてはどうでしょう


  • 広告
  • 【マクロ】ニコニコランキング制作の負担を極限まで減らしたい【バッチ】

    2017-04-06 14:213

    ◆ - なぜ

    そんなことを思うのかというと、作ってみて初めて分かるのですが
    ランキングの制作過程ってホント膨大なんですよ



    ほならね、週刊音MADランキングって、どんな作業するわけ? - ar1063338

    加えて、私の受け持つランキングは「週刊」なので...
    もう想像しただけで吐きそうなくらい

    *-* *-* *-*


    ◆ - そんなことを

    つらつら書こうと思っているわけではありません

    作業量は多い、負担も大きい、でも作りたいんです
    なら、どんどん制作を自動化して負担を減らしていこう!というわけです

    データ成形の手間を省くぶん

    ピックアップ選出に時間を割く
    各動画へのひとことコメントやあいさつの文章を考える
    各回ごとの負担が減り長期運営が現実的に

    といったメリットが生まれます

    結局のところ ランキング制作は決まった事務的な作業がほとんどなので
    タイトルにあるように、そういった部分をマクロ・バッチで処理する
    メイキングというよりかは技術寄りの そんな感じのことを書いていきます


    *-* *-* *-*


    ◆ - その1 DATASET生成

    ニコニコランキングメーカー (以下NRM)で収集したデータを
    ランキング制作に必要な形式(長いのでDATASETとします)にまとめる作業に関してです
    主にEXCEL2013 の作業がメインです



    ○ マクロを組むのはハードル高い → マクロの記録を活用

    EXCELやLibreOfficeなど表計算ソフトのだいたいの操作は
    基本的にマクロの記述によって行うことができます



    そんなこと言っても、マクロとかめんどくさそうだし、書けないし、分からないし
    最初はもちろんそうだと思います (私はランキング制作に関わるまで一切触ってきませんでした)



    そんなときに、取っ掛かりを与えてくれる機能が「マクロの記録」です
    試しに、これをONにした状態でセルA1を選んでみると

    Range("A1").Select

    と記録されます
    んで、行や列を選択してみると

    Rows("1:2").Select
    Columns("A:B").Select

    となります だいたい何のことを言ってるのかわかりますよね
    そして、例えばA1に値を入力したい場合は

    Range("A1").Value = "TEST"
    → セルA1にTESTと記述

    となります

    ・・・

    先述のとおり、EXCELで行う大概の操作が逐一マクロとして記録されていくので

    一回操作を行う → どのように記録されたか見る と繰り返すことで
    次第に理解も深まり、簡単なものからでも自力でマクロが組めるようになってきます

    なんかね、例えばマクロのことについて調べていると 無駄な記述はするなとか
    やたら啓蒙思想の強いサイトにぶち当たったりすることもあるんです

    もう、そんなのはどうでもいいんです とにかく動けばいいんです代
    実際ランキング制作に必要なデータ量の処理時間なんて、たかが知れているので
    (EXCELだと10秒足らず LibreOffice(EXCELマクロ移植版)だと1~2分)



    ○ NRMで取得できない情報は? → WEBSERVICE関数の使用

    ニコニコ動画APIとは (ニコニコドウガエーピーアイとは) - ニコニコ大百科

    APIってなんだというと、この場合は簡単に解釈すると
    「欲しい情報をアドレスに書いて送信すると、その情報が返ってくるもの」
    と考えておけばいいと思います

    ニコニコにもAPIがあります 以下はその一例です
    getthumbinfo
    https://ext.nicovideo.jp/api/getthumbinfo/sm9
    末尾に動画IDを付けると、動画ステータス(タイトル・再生回数とか)が取得できます

    スナップショット検索 v2
    http://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q=愛は備長炭&targets=title&fields=contentId,title,viewCounter&_sort=-viewCounter&_context=apiguide
    いっぱいクエリを付けると、その条件にあった検索結果が取得できます

    ・・・

    話を戻しますが、NRMで取得できる情報にはある程度限りがあって
    例えば、投稿者名なんかは取得できません

    そこで作業を表計算ソフトに移し、WEBSERVICE関数を使用します
    使い方は簡単で、引数に上のようなURLを入れると、返ってきた値がセルに表示されます
    (比較的新しい関数なので、EXCEL2013以降やLibreOfficeで動作します)

    =WEBSERVICE("https://ext.nicovideo.jp/api/getthumbinfo/sm9")

    それとともに使用するのが、FILTERXML関数です
    取得した情報の中から、目的の情報を取り出すというものです
    WEBSERVICE関数をA1に置いて、投稿者名(<user_nickname>~</user_nickname>)
    を取り出したい場合

    =FILTERXML(A1,"//user_nickname")

    となり、これで投稿者名がEXCEL上で取得できます
    それに加えて、投稿者アイコンや直近のコメントなども(必要かどうかは別として)
    これらの関数で取得することができます 非常に便利

    ※ユーザーアイコン取得の一例 確かこの時からは仕様が変わっちゃってたと思いますが...



    ○ ファイルの書き出しなど... → マクロで自動化できること

    マクロでEXCELの操作が行えると言っても、なにもセルの内容をいじくるだけではありません
    ファイルの読み込み・書き出し、ひいてはバッチファイルの実行まで行うことができます


    ・外部テキストファイルの読み込み

    ExcelでCSVやタブ区切りファイルを文字列として読み込む - Qiita

    テキストファイルを読み込んで、タブが挿入されていたら分割し
    セルに書き込んでいく というコードです
    一度セルに書き込んでしまえば、あとは煮るなり焼くなり好きにできますよね

    上記ではGetOpenFilenameを用いて、ファイル名を選択する形になっていますが
    毎回の読み込み先が決まっていたり、規則的だったりする場合はそこを書き換えて
    全自動で読み込みができるようにしておくのもいいかもしれません


    ・ファイルの書き出し


    エクセルVBAでテキストファイルに書き出す最も簡単なプログラム

    ブックの内容をテキストファイルとして保存するコードです
    とにかくここからこの範囲まで書き出したいんじゃ!と決まっているときは

    Dim i As Long
     For i = 1 To 10
      Print #1, Cells(i, 1).Value & vbTab & Cells(i, 2).Value
     Next

    とか書いて、上記サイトのコードから空白判定を取っちゃうのもいいのかも

    一応、テキストファイルの書き出しということになってますが
    保存するファイル形式は、コードの一部分を書き換えれば
    txtだろうがcsvだろうがbatだろうがなんでもOKなわけです
    これに関しては、後の項も見ていただければと思います


    ・ファイルのDL - 1 - EXCELから


    【Web上のファイルや画像をダウンロード、URLDownloadToFile】【VBA】

    URL先のファイルをDLするコードです

    例えば、必要な投稿者アイコンやサムネイルのURL一覧表が作成できたとして
    それをtxtで保存して、NRMやIrvineなどで読み込みダウンロードするというのも
    すべて手動でDLする場合と比べると格段に楽...なのですが

    EXCEL上で処理することで、処理を全自動化できるのはもちろんのこと
    ファイル名の変更など、ある程度の融通を利かすことが
    できるのも大きなメリットの一つとなります


    ・ファイルのDL - 2 - バッチファイルの実行


    Excel VBAからバッチファイルを呼び出す

    外部バッチファイルを実行するコードです

    様々なことができるとは言え、マクロでできる処理にも限界はあります
    なので、そういった部分はバッチファイルを使用して取得を行ったり...
    ということが可能です

    これまでを踏まえて、どうしてもマクロ上でできないのが
    NRMでのフレーム画像の作成と必要な動画のDLです

    ・・・

    コマンドラインで動く動画ダウンロードツールyoutube-dlの紹介とそのzsh補完関数を書いたので紹介 - Qiita

    ところで、まっったく関係のない話なのですが
    Pythonというプログラミング言語にはyoutube-dlというものがあります
    コマンドラインから、各種動画サイトの動画ファイルをDLできるというものです
    ニコニコにも対応しています たぶん
    それで、これはコマンドプロンプトから呼び出すことができるので...
    バッチファイルを作って...


    ◆ - その2 動画作成

    作成したDATASETを、ランキング動画の形式にする作業に関してです
    主にEXCEL2013 ・AviUtl の作業がメインです



    ○ AviUtlにおける、aupのファイル読み込み
    aup内のファイル読み込みに関しては、少し心得ておかないといけないことがあります
    それは、ファイルのパスが絶対参照で記録されていることです
    一度aupを保存したのち、その中の1ファイルでもどこか別のフォルダへ動かすと
    その時の作業内容を完璧に再現することはできません



    逆に、同名のファイルを差し替えても何の問題も起こりません
    例えば、前週分の動画データ(01~20.mp4とします)をAviUtlで読み込み、aupとして保存します
    これらを今週分の同名動画データ(01~20.mp4)へと差し替えた場合も
    次回起動時にはそのまま読み込まれます

    つまりは、毎週のDATASETをきちっと形式を決めて作成すれば
    DATASETをまるごと差し替えるだけで、毎週の動画がほぼほぼ出来上がるという寸法になります




    ○ 動画インフォメーションをexoファイルとして保存

    AviUtlでのランキング制作においては、OPやEDに使用した動画の情報など
    テキストオブジェクトを挿入しなければならない場合があります


    これらの内容が、毎回取り決まった形式である場合には
    EXCELでの処理の段階で、テキストオブジェクトを含むexoファイルを
    出力してしまう...という手があります
    ※労力の割にはメリットが薄い場合もありますので、参考程度でどうぞ

    exoファイルの内容を見てみると、意外とわかりやすいものとなっています
    しかし、問題は

    なんやねんこれ

    これは
    テキストオブジェクトの最大文字数・1024字の
    それぞれのUnicodeの文字コード(UTF-16)を前後2桁ずつ入れ替えたもの

    となります
    UTF-16への変換に関しては、これも新しめの関数であるUNICODE関数を用います

    具体的には
    MIDで抜き出し→UNICODEで変換→DEC2HEXで16進数に変換→MIDで入れ替え
    という流れになります

    A1 : 投稿期間
    → 変換したいテキスト
    A2 : =IF(ISERROR(UNICODE(MID(A1,1,1))),"0000",DEC2HEX(UNICODE(MID(A1,1,1))))
    → ISERRORでエラー処理(エラーの場合「0000」を表示)&Unicode変換
    A3 : =MID(A2,3,2)&MID(A2,1,2)
    → 2文字ずつ入れ替え

    これで1文字分のセットです
    この処理を繰り返して、すべての文字の変換が終了したら
    4096文字分の「0」を末尾に追加し、LEFT関数で先頭から4096文字分を抜き出す
    という過程を経て、ようやくexoとして読み込める形式のテキストが完成となります


    ・・・


    セル範囲を指定して文字列を結合・連結するユーザー定義関数




    ちなみに、複数のセルの値を範囲指定で結合することのできる
    ユーザー定義関数がこちらにあります
    今回のようなケースだと、&区切りでセル指定をしていくと大変で
    この関数を用いると見た目がスッキリ・明瞭となるのでオススメです

    あとは、諸々の情報をEXCEL上でまとめたのちに先述の方法でファイルの書き出しを行うと
    AviUtlで正常に読み込むことのできるexoファイルが作成できます



    ○ 編集時に有効なAviUtlのショートカットキー

    基本的な部分といえばそうなのですが、以下のショートカットキーを活用することで
    動画編集の効率自体を上げようというものです


    「Tab」キーで、レイヤー間のオブジェクトへの移動 (縦方向)
    「,」「.」キーで、前後間のオブジェクトへの移動 (横方向)

    とくに、ランキング制作という性質上横方向への移動が多くなるので
    今までマウスホイールでスクロールしてオブジェクトを選択...としていた方は
    これを機にショートカットキーで移動してみると作業時間が変わるかも?



    ○ エンコードが新仕様になったからこそ

    これまでQSVやNVEnc等のハードウェアエンコードは、エンコードの時間が
    短縮されるというメリットがあったものの、ビットレートあたりの画質がよろしくないことから
    ニコニコへの投稿におけるメリットは薄いとされてきました

    が、新仕様になりニコニコ側で再エンコが強制的に行われるようになったため
    以前ほど画質に対して神経質になる必要がなくなってきました

    それに加えて、せっかく投稿時の容量が1.5GBに緩和されたのですから
    ハードウェアエンコードで、多少ビットレートを高め(私は2500kbpsくらい)にしておいて
    エンコード時間を節約して投稿を行う...というのはいかがでしょうか


  • 【AviUtl・小ネタ】レトロ(アナログ)風エフェクトをなんとしても再現したい

    2017-02-06 01:01


    なんとしてもというわけでもないんですけど、ふと思い立ったので
    80・90年代あたりのアナログ放送のような画質を再現できないかなーと色々試してみました


    ◆全体像◆



    こんな感じです
    フレームバッファをいっぱい使う人間なので、無駄にレイヤー数が多くて
    煩雑な印象になってますが...目をつぶって下さい

    お借りした動画はこちらです



    ◆Layer1 - 時間制御◆



    昔の映像ってあまりヌルヌルな動きのイメージがないので
    時間制御を使ってコマ落ちさせてます
    (コマ落ち:2 → 30fpsから疑似15fpsへ)


    ◆Layer2・3 - 動画ファイル◆



    元動画が16:9なので、クリッピングを使って4:3へと比率を変えています
    文字が見切れるとか今回は気にしません

    で、縦に画像ループを行い 最下部がちょろっと上に出てしまっているようにします
    ビデオテープで録画するとたまにこんな感じになった...ような記憶が
    なので、Y座標もそれに伴ってすこし正方向に移動させます
    映像がブレるように、1pxの範囲でランダム移動にしておきます


    ◆Layer5 - フレームバッファ(ブラー&色ズレ)◆



    古い映像のボケ方って、単にぼかしを掛けるだけではそれっぽくならないので
    今回はメディアンブラー@regretをつかいます

    (動画が消えちゃってるので、今から導入したい方は自力でなんとかして下さい)

    色ずれもデフォルト設定でとりあえず適当に掛けます

    合成モードが通常だと見た目がしつこいので、オーバーレイに変えます
    オーバーレイにすると全体的に明るくなるので
    色調補正で明るさを調整しています


    ◆Layer6 - テクスチャ◆



    つぶつぶしたテクスチャを用意して、動画上部にかけます
    のちのちに、いい感じにジャミってる風にならないかなーと思って
    合成モードは比較(暗)にしました これはお好みで


    ◆Layer7 - フレームバッファ(領域拡張・引き伸ばし)◆



    クリッピングで画面下部を狭め、そのピクセル分領域拡張をします
    領域拡張には塗りつぶしにチェックを入れて、引き伸ばします
    最終的にこの部分がいい感じに機能したかなと思います


    ◆Layer8 - ノイズ◆


    (この画像ではちょっと分かりにくいです...)

    レトロ風ノイズの表現としてよくあるような、しきい値高めのノイズを乗っけてます
    XかYかどちらかの周期が0のノイズも乗せようかなとも思ったんですけど
    なんかあからさますぎる気がして、今回は見送りました


    ◆Layer9 - フレームバッファ(すこしずらしてオーバーレイ)◆



    残像感(?)を加えるために、フレームバッファを数ピクセル右下に配置して
    これも合成モードをオーバーレイに設定します 明るさも適宜変更
    先述の、1pxランダム移動もX/Y両方に適用しておきます


    ◆Layer10 - フレームバッファ(本腰入れたエフェクト)◆



    本格的に色調補正などなどを駆使してアナログ画質っぽくしていきます
    ぼかしを掛けます 地味に、映像と黒ベタの部分の境目がぼけてるのも
    それっぽく見える要素の1つなんじゃないかなと

    色調補正で、とくに彩度を違和感のないところまで落とします
    明るさ・輝度は画面を見ながら適当に弄ります なんとなくいい具合になるように

    膨張・収縮@regretを使って特定の色(今回は緑)をぼやかします
    (境界モード:0 メソッド:3 カーネル幅/高:2 に設定)

    最後に単色化で、全体的に茶色っぽくします
    セピア色です いいですね


    ◆Layer11 - フレームバッファ(ディスプレイスメントマップ)◆




    古いビデオだと、画面の上端・下端が歪むことがあるのでそれを再現します



    背景に、このようにグラデーションを掛けたものをシーンとして設定します
    で、ディスプレイスメントマップの移動変形でこのシーンを選択すれば
    緩やかなS字のような変形になるかと思います


    ◆締め◆

    色調補正が下手くそなので、白飛び・黒つぶれが発生して
    どうも見づらくなってしまいました 残念
    ただ、案外エフェクトの掛かり具合としては良いところまで行ったので
    腕のある方に是非正解を編み出して頂きたいです

    音声に関しては、本動画のキャプションに簡単に解説を書いています
    気になった方はそこを参照して頂くとありがたいです