逃避ケア MV 制作メモ【データモッシュ編】
Movie ·前編 逃避ケア MV 制作メモ【制作環境全般編】 の続きで、どうやってデータモッシュを作ったかのメモです。
どんなところで使ったか
シーンの切り替え
ランダムでノイズが乗り、複雑な色が出るところ
環境・ツール
基本的にはコードを書いていきます。
- OS: Mac
- 試してないですが、Windowsでも同様のことができると思います。
- AviGlitch - A Ruby library to destroy your AVI files.
- avi のデータモッシュ を行うライブラリ
- Ruby の実行環境が必要
- データモッシング動画を AviGlitch で作る 備忘録 もその時調べました
- ffmpeg: 動画変換のCLIツール
-
bash: shell script を書いて一連の作業を自動化
- ruby や ffmpge のインストールは、MacならHomebrew、Windowsなら Scoop を使うと簡単にできます。
- bash は Mac なら標準で使えますし、WindowsならWSL2を入れたら使えます。
ワークフロー
Mac だと AEで avi が扱えないので、別のファイル形式を経由しています。
- 元となるシーンをAEで画像連番書き出し
- ffmpegを使って連番画像からaviを作成
ffmpeg -f image2 -i main_%05d.jpg -y -an -q:v 10 -r 30 temp.avi
- AviGlitch を使ってデータモッシュ
- ffmpegを使ってデータモッシュ後のaviからmp4に変換
- mp4をAEで読み込み、素材として使う
スクリプト
上記ワークフローの一連の流れを実行するもの
mosh.sh
#!/bin/bash
mkdir output
cd render
# q:v ... 固定量子化係数 (Constant Quantizer) でエンコード 小さいほど高画質。大きいほど低画質でデータモッシュ感がある
rename -N 00001 -X -e '$_ = "main_$N"' *.jpg
ffmpeg -f image2 -i main_%05d.jpg -y -an -q:v 10 -r 30 temp.avi
datamosh temp.avi -o ../output/output.avi
cd ../output
now=`date "+%Y%m%d-%H%M%S"`
ffmpeg -i output.avi -y -f mp4 -vcodec libx264 -b:v 4000k -an -r 30 output-${now}.mp4
AviGlitch をライブラリとして利用
AviGlitch は datamosh コマンドで実行するだけでなく、ライブラリとして利用することで特定の法則でデータを壊すことができます。AviGlitch 作者の ucnv さんが gist に上げているもの(Search · require ‘aviglitch’)をいくつか試し、映像的に面白いものを取り入れました。
repeat-random-p-frame.rb
require 'aviglitch'
require 'date'
a = AviGlitch.open 'render/temp.avi' # Rewrite this line for your file.
d = []
a.frames.each_with_index do |f, i|
d.push(i) if f.is_deltaframe? # Collecting non-keyframes indices.
end
q = a.frames[0, 5] # Keep first key frame.
100.times do |i|
printf "\r>> %4d/100", i
x = a.frames[d[rand(d.size)], 1] # Select a certain non-keyframe.
q.concat(x * rand(50)) # Repeat the frame n times and concatenate with q.
end
o = AviGlitch.open q # New AviGlitch instance using the frames.
o.output 'output/repeat-random-p-frame-' + DateTime.now.strftime('%Y%m%d-%H%M%S') + '.avi'
これを使って ランダムでノイズが乗り、複雑な色が出るところ
を作りました。
動画の尺が伸びるので、AEでタイムリマップして使うと良かったです。
avi2mp4
./avi2mp4.sh (aviファイル名)
で実行
#!/bin/bash
ffmpeg -i $1 -f mp4 -vcodec libx264 -b:v 4000k -an -r 30 ${1%.*}.mp4
おわりに
ということで映像の表現にデータモッシュを取り入れた話でした。 元の素材や変換方法によってぜんぜん違うものができるので、試行錯誤しやすい環境づくりが大事だと思いました。