現在はWEBで当たり前に動画が見れるし個人でも動画を
アップできる時代なので、【 動画は特殊ではない物 】
になっていますが、基本的に、生活の中で使っていても
何をしてそれになっているのかは全く市なら鋳物が多い
です。例えば、図書館の書籍検索のそれがどういう仕組
みか知らなくても使えていますが、いざ開発するとなる
と全くわからないのと同じです。これと同じように、動
画についても、なぜ音が鳴って、なぜ、映像が出ている
のか?というのはあまり理解されていません。その為、
解らないけど使っている状態のモノに包含されているわ
けです。
そこで、少し、動くものを作るプログラミングと言う
のも含めて、考えてみる事にしましょう。
まず、現状のゲームエンジンですが、動画がそのまま
再生できると言うモノも存在していますが(Cocos2DX
でVideoPlayerのClassがあるので、それで再生可能に
なっていますし、WEB GLでも動画を使う事が可能な
ようです。)とりあえず、そもそも動画ファイルとは
どういう構造物なののでしょうか?
動画ファイル
これについては、かなり誤認があるので、最初に正
しておくと
【 ファイルの拡張子で中身が解ると言うのは
間違い 】
なので、この間違いは鵜呑みにしないでください。
こうした内容は、オーディオでもエンコードの設定が
異なるだけでお音質があ変わってしまうからです。つま
り、拡張子は同じでも内容が異なると言うことは、そう
いう判断基準自体が存在しないことを意味しています。
まず、映像ですが、ざっくりした見方で考えても
■ コンテナファイル
■ ビデオコーディック
■ オーディオコーディック
の三つで構成されています。そして、コンテナファイルの
中に、ビデオとオーディオのコーディックでエンコードさ
れたものが巻かれています。
その為、
【 包み紙や化粧箱でしかないコンテナで内容成分
は解らない 】
と言えます。この内容は、MOVコンテナにしても
【 MOV 】
ProRes(12bit/4:4:4~10bit4:2:2)
DnxHD(10bit/4:2:2)
圧縮なし(8bit/4:4:4)
アニメーション(8bitRGBのロスレス)
H.264
MPEG-4 ASP
など複数のモノを包含できます。これは、WMVにしても
【 WMV 】
VC-1
AVI
WMVロスレス
WMV9
などの記録が出来ます。当然AVIも
【 AVI 】
MotionJPEG
H.264
H.263
MPEG-4 ASP
WMV
HuffYUV
Canopus HQX
Lagrith
非圧縮AVI
などが記録できます。当然これはMP4コンテナやM2TSの
コンテナでも同様です。
つまり、コンテナでは法が出来るものが異なる訳です。
ちなみに、x.265をMP4やAVIのコンテナで巻く事が出来る
わけですが、現在は、4KのH.265書き出し対応と言うソフト
もあるのですが:、そうしたエンコードもH.264だけではな
くなっています。
基本的に、動画お弄ったことがある人だと、こうした内容
は知っているのですが、H.264及びH.265に関してはAV U
tilの外部プラグインで拡張するとH.264はGPUアクセラレー
ションやCPUのSIMDでエンコードできる状態でしたから、
当たり前にコーディックの違いとそうした新しいコーディッ
クを使う某と言うのは知っている訳ですが、こうした内容か
ら【 AVIコンテナで巻いても内容成分が異なれば違う 】
と言う常識は持っているわけです。
つまり、こうした内容がビデオコーディックだけでなく
オーでぃぽコーディックでも存在しています。
と言っても、こうした内容は、今のようにスマホがあると
非常にわかりやすいのですが、多くのカメラアプリでは、
【 オプションでコーディック選択が可能になっている 】
ので、それを選択すると、多くの場合、映像だと
■ H.264とMPEG-4 ASPの選択が可能
になっています。オーディオも選択可能でモノラルかステ
レオの変更が出来るはずです。当然、コーディックの選択
もありますが
【 コーディックが音声と映像で2種類づつ存在する
為配列が複数存在しますから、この条件で、コン
テナが同じだと内容成分が同じになる訳がない。 】
わけです。つまり、そういう仕様が、エンコードの場合だと
選択肢が多く存在するのでコンテナが同じでも何か解らない
わけです。
現在は
■ 動画のファイルのプロパティーを見る
■ コーディックチェッカーを使う
■ 再生時にプロパティーを表示させる
のいずれかで、確認が出来るのですが(これはYoTubeとかも
どういう動画なのかがわかります。と言ってもあれは、サーバ
側でエンコードしていますから、元のソースが何かはわかりま
せんが...。大抵の動画コミュの動画の取り扱いはエンコードが
入るのでそんな感じです。なんで、解像度が低いとエンコード
が入らないと言うのは”そこまで解像度が低いとエンコードして
もしなくても劣化してるから同じと言う内容を、モノが解らな
い生命体的にそれだとエンコードされないと言う風にはき違えて
吹聴してる状態か何か”だと思います。つまり、品質が悪い状態
のモノを使うと言う選択肢がないのであれは鵜呑みにしないほう
がいいです。)とりあえず、AC3やAACとH.264やMPGE-4 A
SPなどの場合があるので、MP4コンテナと言うだけでもまたく
違います。
とりあえず、動画出力と言うのは、そうした
■ 特定のコーディックへのトランスコード処理
(元のファイル形式からコサイン変換で符号化し
容量を圧縮する)
■ それをエンコードしてコンテナでまとめて再
生できる状態にする処理
が完結しないと動画として成立しません。とりあえず、符号化
処理の段階でも必要な工程及び行うべき処理があるので、そう
した処理を経ておsの形式に変換するので、元のそれと異なる
ファイルとして存在するわけですが、H.264やH.265が使われ
る理由と言うのは【 マスターよりも容量が小さく、画質が担
保されているから 】と言う内容になります。
つまり、そうした条件で、絞られると、コーディックがあ
る程度方向が決まってくるので、汎用コーディックとして使わ
れるコンテナ及びコーディックは特定されてそれの邦画多くな
ると言う訳です。ただし、古いファイルだと、その時代のコー
ディックで巻いているので、コンテナが同じでもH.262とかH.
261とか(MPEG-2_PSやMPEG-1)だったりしますから、画質
が相当荒いわけです。つまり、その状態でもAVIコンテナですか
ら、これがDNxHDとかと同じであるわけがありません。w
その為、そうした間違いは存在しないわけです。
では、この符号化についてですが、こういう技術関連の文献は
ネットですぐに得られるのですが、
■ H.264 の動画圧縮規格について - 澤見ゼミ - 岡山理科大学
http://cafe.mis.ous.ac.jp/2005/sawasemi/nomura
/%E5%8D%92%E8%AB%96/H.264%E3%81%AE
のような技術書に書かれているような内部処理がされいます。
世に出回っているエンコーダと言うのはこうした処理をする
物になっているので、そういう処理をする高度なプログラミン
グがされています。これを各メーカーが独自開発しているので
速度の差異や画質の差異などが存在します。
個人でも、PC環境だとエンコードソフトと言うのは無償で
導入できるわけですが、Linuixでは御用達な
■ ffmpeg
https://ffmpeg.org/
や、GUIでのエンコードだと
■ GomEncoder
http://www.gomplayer.jp/encoder/
■ DVDFav
http://ja.dvdfab.cn/h265.htm
などがあります。Kぃ本的に、ffmpegの記述と言うのは、
【 動画において設定してしかるべき仕様を記述して
あるだけ 】
なので、H.264のLvel4のハイプロとかの記述がある場
合、動画コーディック音仕様において利用可能な解像度や
そのビットレートやフレームレートの上限などが規格とし
て策定されている(のでそこから外れるとエンコードでき
なかったり出来たとしても再生出来ない。)のでそれに準
拠した記述で動画を指定する事になります。
このときに、最初のビットレートと最大ビットレートと
ピークレートと言うのが出てきますが、最小と言うのは、
動いていない状態だとどの辺りまで抑えるかで、その状態
で画質が担保されるレベルで小さな数値にしておくと、動
きのないシーンでは容量が強烈に圧縮されます。これは、
後に書くGOPの内容で紹介しますが、実質的に、その使用
によって、【 画像1枚の容量xフレームレートの数 】と
言うAll-Intraのような状態にならないわけです。そして、
動きが多い場合にはピークまで上がるのですが、その上限
の指定をする感じになります。あと、ピークと言うのは継
続的なので上限を高くしておくと言うのは、そうした動く
が多い場合にどの辺りにしておくかで変わってくるので、
そうした状態にすると言う訳で鵜s。つまり、動きがなく
て画像が切り替わるだけの紙芝居のようなスライドショー
の場合だと、静止画の表示時間お邦画長いので、これは
容量をほとんど消費しません。その為ビットレートと言
うのはその画像に対してどれだけ割り当てられた状態な
のかのような感じになります。と言っても、やはり映像の
品質の上限と言うのはありますから、そういう仕様のもの
がエンコード後に極度にビットレートを高くするような事
はないですし、H.264でも賢い符号化をするので容量は相
当削減されます。
オーディオはこうした仕様と異なるのですが、基本的に
動画はそうした圧縮がかかっています。
そして、フレームレートと言うのは動画撮影時にスマホ
でも選択できるので、撮影時に何で撮るかを機縁る時に解
像度などとセットでっ変更しているはずですが、そういう
仕様もエンコーダーで処理できるわけです。
では、圧縮した動画ですが、これの再生はどうするか?
と言うと複合化処理を行う事によって、再生を行います。
この処理をするのがデコーダーで、それがない場合、映
像は再生できません。PCで非対応動画と言う状態になって
しまう物の場合、コーディックが入っていないだけなので
破損していないファイルだと昔のPCだとDirect Show Fil
terが入っていないだけなので、コーディックがないので再
生できなかっただけと言う話になります。
こうした内容は、非対応コーディックやノンサポートな
コンテナの動画は読めないと言うのと同じなので、家電で
家電メーカーのカメラなどが動画のコンテナに自社製品で
再生できるMP4やM2TSなどを利用しているのもそれです
が、非対応と言うと、MOVが読めないのも非対応のコーデ
ィックだからになります。その為、iOSのユーザーとかス
マホのユーザーだと当たり前に読めてるものが読めない場
合がありますが、あれは仕様です。PCの場合だと、コンテ
ナもそうですが、それ以前に破損していない動画で再生で
きない場合、コーディックのリリース時期よりもOSのほ
うが古い場合にはサポートしていないので対応していない
事の邦画多いわけです。これは、x.265などは独自でイン
ストールしないと利用不能なのと全く同じです。
つまり、そうした内容から、エンコーダーで符号化し、
圧縮して軽くした動画をデコーダー複合化し再生すると言
うのが現在の動画の仕様です。と言っても、8Kのパブリッ
クビューイングのテストで非圧縮の8Kに16chの音声つけ
て流したとかいうのがありますが、あれに関しては、コー
ディックが存在しているので圧縮はされていますが、少し
様子が異なる内容だと言え真鵜s。
一般的になエンコードと言うのは
【 個人がマスターとなる映像と保存を視聴しやすい
状態に圧縮して利用する時の何か 】
なので、【 エンコード=劣化 】なんですが、業務用ソー
スとかで中間ファイルとなる、ロスレスやProRes圧縮など
をかける場合だと、内容が異なります。これは劣化しないよ
うに中間ファイルを作る作業なんド絵、画質を落として圧縮
する仕様の処理と異なる為基本的に化け物じみたビットレー
トのそれで変変換していますから、個人が動画の保存用に
使うエンコード処理とは一線を画すものになります。
とりあえず、そういう仕様で圧縮処理と再生が行われていま
す。
ちなみに、MP3に関しては、
■ 音声と圧縮
http://www.slideshare.net/kiminobuni
shimura/mp3and-audiocompression-simple
■ 【3】デジタル信号と音の圧縮 : MP3の仕組み
http://www.f-kmr.com/synthesizer/no3.htm
に仕組みが書かれています。
MPEGと言うのは、All-Intraのようなソースではないので、
基本的に、構造が異なるものだと言えます。MotionJPEGや
All-Intra設定のMPEg-4_AVC/H.264などはフルフレーム記録
ですが、通常の動画はそうではなく、GOP(Group Of Picture)
と言う単位で構成された物で記録されています。
これは、
■ Iフレーム( Intra Picture )
コマの情報が残ったそのままのフレーム
■ Pフレーム( Predictive Picture )
Iフレームから間引いたフレーム
■ Bフレーム
ダブった部分を間引いた状態を補完する
ために策背うする予測変換したフレーム
で構成されています。映像ではダブった状態の駒が存在
する場合、それが全くない状態のフレームを最初に作って、
その後間を補完します。つまり、変化がない場所ンフレー
ムと言う尾は圧縮場所が少なく同じ状態のものと変わり
せんからIフレームで容量を撮るのがもったいないので、
そうしたエンコードを行います。H.262はこうした変換
においてマクロブロックがあまりにもあほすぎたため
【 動きが激しい兄見栄のようなものですらブロッ
クノイズが出る 】
のですが、そうした問題を解消しているのが、H.264以
降のものになります。とありあえず、All-Intraで行うと
とんでもなく重たいデータになるので、コンシューマで
は非常に使いにくいので
■ コンシューマは8bitカラーなので、業務用のよう
な色数の多いソースよりも圧倒的い軽くしてあ
る。(デジタルシネマで使われるカメラでは、
16bitソースがあるので、既に比較してはなら
ないほどの差があります。)
■ 色差情報(赤や青からそれぞれ輝度を引いたもの)
もGH5のソースとコンシューマのそれが違うよう
に、半分まで圧縮されている。(ちなみに、DNG
は4:4:4ですから、GH5の10bit/4:2:2の倍の色
差情報になります。基本的にRGBとは異なるので
変換しないとRGBにはならないので、RGBとは異
なるのですが、同様に圧縮による真備胃がない状態
のも物になります。)
などの処理がされています。AVCHD 2.0辺りからコン
シューマのカメラでもプログレッシブのフルHDになり
ましたが、それ以前はインタレーススキャンでしたから、
【 走査線で交互に出す事で、送信時の転送レートの
負担を減らした仕様 】
ですから、相当間引かれた状態の物になっているわけです。
とりあえず、そうした仕様で院たれにしたものが放送で流
されているのが現在までのNTSC圏での映像になります。
つまり、PCで作る動画と放送準拠のVTRなどではデジ
タルになった段階でも全く異なる物を使っていたわけです。
とりあえず、DVコーディックの前の取り込みでもYV12
辺りやYUVを使う時点で、RGBとは異なる仕様になるので
変換が必要なのでそういう物になるのですが、映像コーデ
ィックの場合プログレッシブであっても、前述のような圧
縮がされているもののほうを多く見かけるはずです。
とりあえず、映像の場合、一般流通しているモノは圧縮
して流されているのでそうしたロッシー形式なモノになっ
ています。
扱うのと作るのでは異なる
表示に関しては今はリッチコンテンツを作る場合、あっ
さりと作れるのとワープロソフトでも画像や動画を挿入で
き、WEBオーサリングツールでもそうなっています。
その為、動くものを配置するだけだとそう難しくない
物になってます。とりあえず、画像のフォーマットでそ
うしたアニメーション機能が合うう物や動画が使えない
環境も世の中には存在すrのでそうした場合には工夫す
る必要性が出てきます。
そうした場合に、それを動かすプログラムをすると
言う方法があります。これは20世紀の概念に近そうで
すが、そうしたやり方もあります。
まず、動画と言うのは
【 連続した画像の集合体 】
です。これは、映像コーディックのようにコンテナに
巻けない条件だと フィルムと同じく当たり前の画像
用意する事になります。
ただし、この条件だと、画像の集まった📂フォルダー
でしかないので📹映像とし適応しません。
そうなると、これを動かす必要があります。
この場合、
【 スライドショーのように同じ場所の画像を
連番ファイルで掻きかえればいい 】
と言う話になります。つまり、
■ 表示をする
■ 変更するまでのタイミングを指定
■ 画像の切り替え
■ ループ
とすれば、それが可能になります。つまり、
xx1.jpg~xx120jpg
があったとします。この場合、
for i=1; i=121; i=i++;
とすると、iの数値はそのまま増加しループします。
とりあえず、ここで
"xx" + i + "jpeg"
と言う名称のファイルをIMGタグで呼び出せば、当たり前のように
ループの中に包含されます。しかし、この速度が異様に速い場合、
問題がありますから、速度が速い場合にも対応するべく最適な状
態を作る必要があります。
そうした場合、【 処理待ちを入れる 】ことで、表示タイミ
ングを調整する事ができます。アニメーションGIFなどの場合、
ブラウザによっては、画像制作ソフトで指定したタイミングで表
示してくれるものがありますから、40ms指定で25Fにできるも
のがりますが、10fpsに指定されるものもあります。
そうなると、このウィと調整を、40msにするのか100msに
するのかの問題はありますが、この秒数の違いでフレームレート
を指定できることになります。そうなると、このウェイトを、
ループに包含し、表示の後に指定すれば、ループがいったん止
まって、再度ループに走るので、コマの表示間隔が設定できる
と言う訳です。しかし、容量が大きく巨大ながお像や重たい画
像だとこれは出来ないので、制約を受けてしまうので、一旦、
画像をバッファしてそれを読み込んで操作するようなプログラ
ムにしないとダメな場合も出てきます。
こうした処理ですが、ゲームを作ると仮定した場合、カット
インのアニメーションでビジュアルを入れる時に、キャラクタ
ーグラフィックを動画に吸うと透過処理が出来ないので画像で
対応する必要がある場合などで出てきます。
個人が無料で使えるAVG制作のツールだと、動画ファイルで
はなく画像ファイルを利用するものの邦画多そうですから、こ
うした考え方で制御する方法になる場合もあります。ちなみに、
ウディタでは連番でアニメーションさせる方法もありますが、
こうした表示枚数指定をして、それを秒数で切り替える状態で
処理させれば、大き目な画像のアニメーションを行うことも
できるのでいろいろと操作できるようになります。
音を合わせる場合だと、これはバッファの利用が必要にな
りそうですが、基本的に、前述のそれとフレームレートを合
わせた音の読み込みでどれ位さが出るかを考えて、映像の開
始を遅れ気味で初めて合わせるか、待ち時間を入れてバッフ
ァをする時間を稼ぐなどしないと映像のほうが先に走ってし
まう可能性があります。その為、整合性が撮れた状態で完成
している映像個ファイルのような状態にならない場合がりま
す。そうした場合に、素材を先行読み込みしていて整合性を
とった状態で双方を流す手段を模索する必要が出てくるわけ
です。
とりあえず、映像ファイルの場合、当たり前に整合性がと
れた状態でしている代物なので、そのまま利用できるのです
が、個別にうっごかす場合にはバランスをとる必要性が出て
きます。ただ、サイレンスの状態でモーションを付けたもの
を作る場合だと、っ考え方はこうなるので、そういうプログ
ラムを組むと当たり前に動くと言う訳です。
ちなみに、映像の処理用のプログラムとなると、前述のGO
Pだと画像解析を行い、一致部分を割り出す処理が発生するの
で高度なプログラミングが必要になりますから、動画をコンテ
ナに収める何かの前に画像解析系の勉強をしないとそうしたモ
ノを扱うプログラムは組めないのですが、動画ファイルやアニ
メーションGIFなどの画像ファイルを配置する以外の選択も物を
動かす場合だと上記のような考え方もあるわけです、また、こ
れとは別に、1枚の画像を複数に分割してシーケンシャルとして
認知させて利用する方法もあるので、そうしたアプローチも複
数存在しています。