見出し画像

お金ないVJが映像関係をffmpegでゴリ押す2023

りけいです

Envatつかってますか

エンバト使ってると4KとかProressとかガンガン飛んできます

そんな時にエンコードするわけですけどそれを出来るだけ楽に安価に大量にやりたいもんです

業界スタンダードは多分AdobeのエンコーダーなんですけどAdobe税を払わない時にどうするかって話です
そういう時にffmpegでゴリ押そうっていうことを物覚え的に書く感じです

☆わかってる人向け
配信のことには触れません
自分自身が記憶喪失になった時に助けになるもの って自分ルールがあるので結構簡単 / 端折って書いてます
しっかりかくとキリがなくて結局発表できなくなるので仕方ないね


できること

いろんなものをhap とかH264に書き出したり
動画関係のことを基本全部できます
環境構築はまあまあめんどくさいけど無料で結構信用度のあるエンコード等々ができるので便利です

例えば当日いきなりそれぞれ5GBもあるMVを大量に渡された時とかにffmpegをサブのPCに突っ込んでおくだけギリギリまでどうにかできたりします

今回は僕が使いまくってる特定の色をalphaにしてHap-alphaに突っ込んで透過の動画を作る方法に関しても示します
GBの動画から事前にクロマキー抜きをできる結構便利なやつです
個人的には割と確度高めじゃないかなって思います VDよりかはぜったい綺麗に抜けます
簡単にalphaにすればいいじゃんって言ってたけど想像以上にやり方知らない人が多いっぽいんで触れます


★★★★★★★★★たいせつなおしらせ★★★★★★★★★

windowsの最新のバージョンだとhapが扱えないらしいです
最近環境を構築しなおして初めて知りました

そこで、20231110早朝時点でつかることが確認、というか大昔のパソコンから引き揚げてきたやつをここにはっつけておくのでここにあることをやりたい人で、hapが動かないときはこっちに差し替えてみてください

https://drive.google.com/file/d/1uXWFaReI1LL17ufAi-CTPNz2Lj5Un5Fb/view?usp=drive_link




ffmpeg

youtubeとかのエンコードとかにも使われてるらしいやつです
なにをやるにしてもまずインストールしないとダメ

macでのインストール

macはここみてインスコしてください
とりあえずDJ用でもなんでもmacがあってVJをやってる人はインストールしておくと本当に大変な時に助かります

windowsでのインストール

昔はもっとわかりやすいのあった気がするけど今調べたらこれが一番わかりやすそうな気がする
Vjやってる人はとりあえずインストールしておこう



ffmpeg の使い方

基本的にコマンドベースで動かします

まず公式のところに乗ってるやつです

ffmpeg -i input.mp4 output.avi

基本はこれです
そんで「ffmpeg h264 変換」とか調べると

いろんなコマンドを示していただいてるので用途に合ったものを選んで使いましょう

基本的に覚えておいておけばいいのはこれぐらいです

基本的な話


基本的に

inputpath に元動画のパス
outputpath に出力先のパス

を自分で記述することが必要です
ターミナルとかでならコマンドの画面にドラックアンドドロップで記述できるのでいい感じに頑張ってください

気づくまで僕は手書きしてました


Meの使い方


僕は以下の手順で色々やってます

全ての動画をH.264 FHD1080に変換

ある程度この段階で素材分別

必要があれば Hap / Hap-alpha に変換

internet archive とかの低い解像度の動画はそのままhapに変換してます
低い解像度を1080にしたところで何にもならないし、低いやつは低いままの方が容量を小さくなるのでそうしてます

h.264で変換してるのは無垢な mac / windows でサムネイルだったり再生だったりができるからで簡単な分別ができる
あとストレージ的に軽いので再生速度とかをいじらない素材ならそのままH.264で使えるからそのまま突っ込んでます

全部Hapにしたらストレージ何本さしても足りないから仕方ないね


H.264に変換する

ffmpeg -i inputpath.mp4 -movflags faststart -vcodec libx264 outputpath.mov

んな動画でもh264にしてくれます
でもhapとかからだとあんまり確度高くないなって思ってます




音声を削除してH.264に変換する

-an ってやつを使います

ffmpeg -i inputpath.mp4 -movflags faststart -vcodec libx264 -an outputpath.mov


h264に変換しつつ音声を消します
VJとか映像出しのときは動画に音声が乗ってると都合が悪いことがちょいちょいあります
それに対して「ポンだししながら叩きもして欲しい」みたいな時には映像側から音を出したりします(ほんまか???)
この時、映像出しにもオーディオラインが回ってるので、絶対に音が出てほしくない時に音が出ないようにすることが重要になります
そういう時に音声を事前に消しておくことで問題切り分け / ポカ避けができます

あと容量が小さくなるので雑に使う素材でもストレージ小さくできるのでおすすめです

( VDJやるって時にbeepleの音声がスピーカーから流れた時は大笑いした )



FHD1080 にして H.264 に変換する


ffmpeg -i inputpath.mp4 -movflags faststart -vcodec libx264 -vf scale=-1:1080  outputpath.mov

4Kとかの動画をFHD1080 1920*1080 に変換します
なんかいろんな間引き方をしてますがそこまで考えてもって感じなのでここでは気にしません
VJで4K動画さした瞬間にクラッシュするのは結構よくあることなのでとりあえず手元の動画をやっておいた方が気持ちが楽になります

基本的なファンクションは

-vf scale=-1:1080

これを間に突っ込んでるだけです
「横幅を1080 にしてそれにいい感じ合わせるように縦のサイズを合わせて」
ってコマンドです

youtubeとかみてるとHD720 をこれでアップスケーリングして高解像度化とか言ってる人いますけどぼやけるので見た目の解像度は上がってないと思います
280p をやっても汚かったのでそうだと思います


こっちでも同じ機能にはできるんですけど

ffmpeg -i inputpath.mp4 -movflags faststart -vcodec libx264 -s 1920x1080   outputpath.mov

アスペクト比が違う 4:3 とかの動画を変換するときに変な横伸ばしをしたりするので上の方がいいと思います


参考にしたところ




HD720でH.264に変換


一個上のやつの数字が変わるだけ

ffmpeg -i inputpath.mp4 -movflags faststart -vcodec libx264 -vf scale=-1:720 outputpath.mov





HAPに変換する

基本的なことはここに全て書かれています
ここから引用していく感じです

ffmpeg -i imputpath.mp4 -vcodec hap outputpath.mov


コーディックをhapにしてっていうコマンド

-vcodec hap 

を仕込んでる感じです

容量的な話をすると前述の資料の通り

手元で適当な動画を変換したところ次のようになりました。概ね 30 倍くらいに膨れ上がりますね。

neareal.com/2675/

本当に30倍ぐらいになります
H264で20GBぐらいの動画セットを変換したらHDDが吹っ飛びました

なんらかの方法で圧縮だったりができて容量削減できるらしいですけどコマンドベースでどう記述する + 本当にできるかわからないので書いてません
有識者いらっしゃいましたら教えてください



HAPの注意点 (ストレージ周りの話)


そこそこ重要なので枠つくって書きます

HAPにするとめっちゃファイルサイズが大きくなります
すると動画ひとつを読み出すのにも結構重くなるのでストレージの速さが超重要になってきます
いろんなVJがそこを気にしてSSDとかUSB-3.0やSATAでなくTBやNvme使えって叫んでるのはこの辺が理由です

同時に現場ストレージにHDDを使うなってのもここで、HAPだけでなく複数動画を読み込む場合はどうしてもrandom read に依存されます
そんでHDDはシークする関係でrandom readはどうしても弱くなります

だからPC自体のスペックとか関係なく動画の読み込み先がHDDだと処理が重くなる / もたつく ことが多いです
あと低音でピックアップヘッドが揺れて音楽ジャンルによってはHDDそのものが死ぬのでSSDを使おう


それでもHDD使うって言うならまあそれはそれでいいんじゃないです
僕も初めてたてのお金なかった頃はそうだったんで



FHD1080 にしてからHapにする

ffmpeg -i imputpath.mp4 -vcodec hap -vf scale=-1:1080 outputpath.mov


合わせ技です


基本的なやつはこの辺です



ffmpeg の応用


特定の色ををalphaにしてHap-alpahにする


2019年に調べてて思いついたやつだと思うのでインターネットをdigしても出てこないと思います
あわせ技みたいなもんだから自慢できるもんでもないけど
これはH264とかからalphaチャンネル持つ動画を作れたりするのでしれっと超便利です

一例として黒色をalphaにしてるのを示します

ffmpeg.exe -i inputpath.mp4  -vf colorkey=0x000000:0.01:0.15 -vcodec hap -an -format hap_alpha  outputpath.mov


やってることは

・クロマキーの処理 (これは黒色)
・hap のコーディックにしてフォーマットを Hap-alphaに

そんで書き出し

すると、黒い部分が全てalphaになった動画を作ることができます

これが映えるのが最近新商品発表があったこの素材

これの黒いとこをHapにしておくだけで映像に乗せた時の挙動が大きく変わります

たとえば普通にOverで乗せると黒い部分が残るので塗りつぶされます
でも黒いところをalphaにしておくことでしっかり乗っけることができます

同様にGB素材とかを事前に透過するときとかに使えます

-vf colorkey=0x000000:0.01:0.15
-vf colorkey=color:similarity:blend

ここのcolorkeyの指定をすることで透過する色や深さを指定することができます
パラメータの意味は

フィルタが当たった部分のアルファチャンネルの値が小さくなり透過する。一方でフィルタが当たらなかった部分はマスクされ透過しない。

color[color]
指定した色を完全に透過(アルファが0)させる。16進数形式か、色名を指定
既定値:black
similarity[float]
一致の範囲指定。0.01 は完全一致、1 は全画面。大きい値ほど透過範囲が広くなる
既定値:0.01
範囲:0.01 から 1 まで
blend[float]
similarityの範囲外の色の透過の影響具合の指定。0 は指定した色だけ(similarityの範囲外は透過しない)で大きくするほど似た色も少しずつ透過する。つまり透過のグラデーションがきれいになる
既定値:0
範囲:0 から 1 まで

https://nico-lab.net/ffmpeg_with_chroma_key_by_colorkey/

ここを参考にして数値を決定してます
個人的にいろいろ試して後に紹介するコードを示しています
相当変な素材じゃない限りいい感じに抜けるのでいいんじゃないかなって思ってます


僕が使っている色の指定は

黒 0x000000:0.01:0.15
白 0xffffff:0.01:0.15
赤 0xff0000:0.01:0.1
青 0x0000ff:0.01:0.1
緑 0x00ff00:0.01:0.1

みたいな感じです
黒色はモーション系の素材のalpha化で境界の色差がめっちゃでかいので完全一致とか使っても結構いい感じになります
白系素材は彩度高くてでまぶしすぎる素材で適応するといい感じになるからたまーに使います

基本的に白黒以外で抜きたいときは 0.01 / 0.1 が打率高いイメージありますけど出来栄えによってちょいちょい変えてます

狙った色で抜きたい場合はカラーコードをいじって実装しよう

保存はalphaチャンネルを持ってるコーデックでないといけないのでH264とかはダメです
VJならとりあえずHap-alphaにしておけばいいんじゃねって思います


色を反転させる


ffmpeg inputpath.mp4 -vf colorlevels=rimax=0:gimax=0:bimax=0:rimin=1:gimin=1:bimin=1 outputpath.mov

これを突っ込むことで色の反転が可能です
色を反転させることを一番重要視してるのでコーデックとかはスルーにしてます
拡張子さえ合わせれば動画だけでなく画像とかにも出せるのでロゴの事前準備とかの時に使ったりします

Black_logo.png の時とかに使う感じ


動画のコーデックとかを見る


ffmpeg inputpath.mp4

何したいかわからん!
ってエラー吐きますけどその上に動画の情報が書いてあるのでたまーに使います






ffmpegをhapでぶん殴る (windowsのみ)



windowsとmacで話が違います
僕はとりあえずwindowsでエンコードすることが多かったのでbatですべてを解決できるようにしてあります
macは応用的なことを自動化するのをやり方がよくわかってなくてやってないです

もうちょっと理解があれば特定のパスの動画を突っ込むと出力フォルダにエンコードされたものを自動でエンコードして出力する
みたいなのをするbatだったり駐在処理をNASとかに走らせたいんですけどどうしてもコマンドスプリクトがよくわかってなくて作れてないです

これを先人の知恵をかじりがらいい感じに動くようにしていきます


batを書いてフルオートで複数のドラッグアンドドロップで動くようにする


以下に示した感じで、デスクトップ上にそれぞれの機能を持たせたbatを置いてほしくなったらすぐにエンコードできるようになってます
いろいろやると画像の自動透過とかをすべて自動でやってくれるようになってます


そんで中身はこんな感じです


cd F:\ffmpeg_non_touch\bin

:loop
if "%~1" == "" goto end
set filename2=%~p1%~n1_hap.mov
ffmpeg.exe -i "%~1" -vcodec hap -an "%filename2%"

shift
goto loop
:end

pause
exit




20230925 ついき

夏ぐらいに頭のffmpegのとこに行くコマンドいらないことに気がつきました
なので、より簡素に書くのであれば



:loop
if "%~1" == "" goto end
set filename2=%~p1%~n1_hap.mov
ffmpeg.exe -i "%~1" -vcodec hap -an "%filename2%"

shift
goto loop
:end

pause
exit

これで動きます
というか僕はこれにしてます



大本はググって出てきたやつをいろいろ作って形にして親父に助言もらったやつなんですけどもう一番参考にしたサイトがわからないので世界に開きます

ffmpeg bat 自動化

とか調べるといっぱい出てくるのでもっとしっかり調べるともっといろいろわかるかもです
僕は割と満足してるのでもういいかなって

ここは参考にした記憶がある


得られる挙動

movie1.mp4 をドラッグアンドドロップ

ffmpegが頑張ってくれる

movie1.mp4 と同じとこに movie_hap.mov

っていうのを同時にドラッグアンドドロップした数だけやってくれます

エンコードのリネームまで自動化してるので超絶便利です


注意点


前提として初めの行の cd にffmpegがインスコされてるパスを指定する必要があります

20230925 ついき
正常にffmpegがインストールされていて、コマンドライン上で ffmpeg と入力して、処理を走らせれるならわざわざcd使ってパス拾いに行くことをしなくていいみたいです
大雑把で簡単に言えば環境変数の定義がしっかりできてれば省略できます

現状わかってることで、違うドライブから動画を読み込みに行くとhapだけコーデック見つからんぞって怒られる現象が見られてます
原因はわからんけど1709は問題なくて21H1ぐらいからダメってのがわかってるのでwindows周りかなぁって思ってます
ffmpegがあるドライブに動画を動かしてからエンコするかそれぞれのドライブにとりあえず置いておくとかはアリかもです

・一度に処理 / ドラックアンドドロップできる上限はだいたい700ぐらいで無限じゃない
これはパスを一時保存する領域の問題ぽくて解決方法調べたけどめっちゃめんどくさそうでやめました
ドラッグアンドドロップをやめればそれなりにできそうだけど現状困ってないのでいいかなって思ってます


自分用にいじる

a. エンコードしたやつの追加記名をいじる

set filename2=%~p1%~n1_hap.mov

ここの _hap の部分をいじることで追加する名前をいじることができます
なので

set filename2=%~p1%~n1_hogehoge.mov

ってやったやつに movie.mp4 を突っ込むと movie_hogehoge.mov ってなって出力されます

拡張子もいじることできるけど何刺してもたいてい動くmovが一番硬いと思います


b. ffmpeg の挙動を変えたい

ffmpeg.exe -i "%~1" -vcodec hap -an "%filename2%"

ここをいい感じにいじってください

ffmpeg.exe になってるのはこっちのほうがいいってどこかで見たからだったと思いますけど結構まちまちです
基本的に一つのコマンドプロンプトで一個づつ処理してくれます

ちなみ裏コードみたいな感じで

start ffmpeg.exe -i "%~1" -vcodec hap -an "%filename2%"

start ffmpeg.exe
と記述すると入力されたすべての動画を同時並行に処理し始めます

ほんとに並行処理始めるので生半可なストレージやCPU, ramだとブルスク一直線します
よくあるメモリとかじゃなくてCPU周りを絡んで落ちるので電源系とかにとんでもないぐらい影響を与える死に方です
正直ゲーミングノートとかでこの処理を書かないで一個づつ処理するようにした方がいいと思います
死ぬほど急いでる時に少量で致し方なく使うぐらいのイメージがいいと思います

200ぐらいをいやらせるとXeon 入ってる 42GB ram PCにNvmeでぶん殴っても処理が間に合いませんでした
まあそういうもんか


c. エンコードが終わったらパソコンの電源を落とすようにする

endのあとに

shutdown /s /t 0

って書くとエンコード終わりに電源を落としてくれます
でも保存確認とかあるとシャットダウンしないのでこのエンコードしか回ってない状況じゃないと正しく動きません

いれるとこんな感じ

@echo off

cd E:\ffmpeg_non_touch\bin

:loop
if "%~1" == "" goto end
set filename2=%~p1%~n1_FHD_Rescale.mp4


ffmpeg.exe -i "%~1" -vcodec libx264 -vf scale=-1:1080:flags=gauss -an "output\%filename2%"


shift
goto loop
:end
shutdown /s /t 10

exit

これはHD1080に変換してから全部終わった10秒後に電源消すやつ


寝る前とか外に出る前にエンコード回して終わったら電源消すみたいなことをしたい時に便利です
強いパソコンは長い時間動かすと電気代すごいですからね




macでスプリクト書く


僕はかけない人ない / 割とわからないから投げ出した人なのでいい感じの資料だけ置いていきます
macしかない人はがんばってみてください




追記 20240303

コメントいただいてました

らしいです!!!!!!
僕はシェルスクリプトに対しての知見がないのである人はいい感じの記事を書いてください!!!!!


FFWorks ( macのみ )


電脳空間でお寿司でメイドでドラゴンの黄色い虎のVJお嬢様にmacだったら何使えばいいかって聞いた時に教えてもらったやつです

内部でffmpegが走ってます

22€とおおよそ3000円ぐらい

でもこれはどんな数突っ込んでもしっかり処理してくれるのでめっちゃ楽です
実際にコマンドを書くわけではなくある程度GUIとして設定をすることができるので初めての人でも簡単に使えると思います

高度な記述もできると思うけどやり方見つけたら書きます

使い方とかはスクリーンショットをとれるmacでこれを書いてる時に改めて書こうかなって思います





おしり

長くなったので終わりです
3年前にかくかく言って結局3年かかりました

使ってる動画にも気にしてみると処理を軽くできたり、お高い映像編集ソフトなくてもそれなりのことができたりするのでいろいろ調べて試行錯誤してみるのをお勧めします

がんばっていきのころう!!!



来場者得点
ほぼ3年前に公開してたbatのかき集めです
ffmpegをインストールして、cdの場所書き換えてやれば使えると思います



この記事が気に入ったらサポートをしてみませんか?