動画 : してログ

結合できない動画について
  • ドライブレコーダーの素材(同じ形式の複数の連続したMOV)

  • UniteMovie で繋いたものを VLC media player などで再生すると、映像トラックが2つあるように見え、ウィンドウが2つ同時に表示される
  • AVI に変換し、VirtualDub で結合しようとするとエラーが発生する
解決方法

エラーメッセージ「... different sampling rates (29.97020 vs. 29.97030)」からすると、繋ごうとしている動画のフレームレートが微妙に異なっているようです。 そうであれば、VirtualDub のオプションでフレームレートを変更することができますので、これを統一した無圧縮の AVI に出力すれば良さそうです。 実際に試してみたところ、VirtualDub で問題無く結合ができました。

  1. MOV を VirtualDub で開く
  2. Video frame rate control を開き、Change frame rate to に 29.9700 を入力(数字は素材に合わせる)
  3. Save to AVI で、無圧縮 AVI で出力する(デフォルト設定)
  4. 結合する MOV すべてに対して上記処理を行う(一度設定すれば、MOV を開いて Save to AVI の繰り返し)
  5. VirtualDub で最初の MOV を開く
  6. 順番に結合する MOV を、Append AVI Segment で追加していく
  7. 必要であれば編集やフィルタの適用をして、Save to AVI で結合する

今回はビデオプレイヤーについてレポートします。 標準のビデオプレイヤーは、アスペクト比の維持ができないのと、DivX などが再生できなかったので、利用を断念しました。 ただし、画面アスペクト比16:9 の mp4 しか再生しないという場合、あるいは表示が潰れても気にしないのであれば、このプレイヤーでも良いと思います。 標準プレイヤーなら、レジュームも自然にでき、インターフェイスがシンプルで車向きです。

MX Player が最適

本当は PC でメインで使っている VLC for Android beta を使いたかったのですが、車という環境で使うとなると不便な点もあり、MX Player 一択といった結果となりました。 その理由は下記の通り。

  • フォルダ内の動画を連続再生(ミュージックビデオを主に再生したい)
  • アスペクト比を維持した再生が可能
  • サポートしている動画フォーマットの多さ(試した中では DivX の1本だけ正常に再生できませんでした)
  • レジューム再生(電源OFFからの場合は[アプリ起動>再生ボタン]の操作が必要)
  • バックグラウンド音声再生

ミュージックビデオを通常のオーディオの感覚で再生できる点が特に重要でした。 VLC では、再生が終わる度にファイル一覧に戻ってしまい、次の曲を選び直さなければなりません。 また、レジューム機能が無いと、少し車を離れるときなど、先頭のファイルに戻ってしまい、使い勝手が良くありません。 MX Player は、レジューム機能を持っていますし、[設定>General>Shutdown delay]を設定しておけば、その時間内での復帰(ただし、OFF中も再生はされ続けるので、エンジンを切った所で一時停止にはなっていません)はエンジンを掛けるだけです。

レジューム再生の注意点

エンジンOFF後、シャットダウン・ディレイを過ぎて電源もOFFされた場合は、アプリ(MX Player)も含めて Android 自体がシャットダウンされています。 このため、Android の起動アニメーション後、ホームアプリが表示されることになります。 標準プレイヤーであれば、最後に実行していたアプリを自動的に実行してくれて、なおかつレジューム機能も働きます。 MX Player の場合は、手動で起動しなければならないのですが、再生位置は覚えているので、続けて再生ボタンを押すだけで再開することが可能です。 ただし、Shutdown delay で指定した時間も再生が止まっていないため、これを1時間に設定していれば、1時間分の再生がスキップされた位置からの再開になります。 エンジンOFFで画面が消灯するので、サスペンド状態にされているのかと思いましたが、状況からすると動作し続けているように思います。 バッテリーを積んでいないので仕方無いかも知れませんが、サスペンド状態で待機して欲しかったと思います。 少し面倒ですが、戻ったときに続きから観たい場合は、一時停止させてからエンジンを切りましょう。

音声が消えるトラブルも

MX Player で再生しながら、標準アプリを操作すると、バックグラウンドで聞こえていた音声がミュートされ、MX Player に戻ってもそのまま無音状態になってしまうことがありました。 例えば、電話を受けた後に発生したように思います。 この状態になったときは、標準アプリのラジオにいったん切り替えてから、MX Player に戻れば回復するようです。 様々なアプリが複雑なリソースの奪い合いをしますので、このような不調和はある程度許容する必要があります。

その他の操作感

スワイプによる操作が車載機にマッチしていてとても良いです。 特に、画面右側を上下にスワイプで画面の輝度を調節できるのは、夜の運転で画面が眩しいとき素早く対応できます。 画面の輝度は、ライトに連動して変化するようにも設定していますが、それではまだ眩しいと感じるときがあります。 また、音声をミュートしたいときは、画面右側を下にスワイプすれば良いです。

その他、シングルタップで表示される操作パネルの表示時間が短いと感じたので4秒に設定しました。 また、操作パネル表示時に再度タップすることで、再生を一時停止するように設定するのがお勧めです。 左右のスワイプは、早送り&巻き戻しですが、ここは次の動画&前の動画に設定できたら完璧でした。

広告

無料版に表示される広告ですが、オフラインで利用する分には表示されないので、無料版で十分だと思います。 これは他の無料アプリにも言えることなので、広告はあまり気にならないと思います。


他のレポートはこちら

訳あって AVI コンテナの内部構造について勉強していたところ、大きいデータにスケールアップできなくて利用を断念したというお話し。 Time Lapse で大量に撮った JPG の格納に、ZIP では無く動画ファイルを活用しようと考えました。 ZIP では、そのまま動画編集ソフトで扱えないし、動画ファイルにしてしまうと、EXIF などの情報が失われたり、再エンコードで劣化してしまうからです。 しかし、単純に jpeg をフレーム毎に記録しているだけの mjpeg ならば、目的を達成できるのでは無いかと言うわけです。 試しに、ffmpg で -qscale 0(-sameq の代わり)を付けて mjpeg に出力してみたところ、容量が大幅に減ってしまうことから、EXIF や品質を維持していないように見えます。 このような状況から、自前で動画フレームを結合し、AVI コンテナに収めるようなツールを作ることにしました。

AVI ファイルの構造

AVI ファイルは、RIFF という形式で表され、チャンクとリストにより構成されています。 それらを組み合わせて、AVI ヘッダーやストリームを格納する仕組みです。 詳しい仕様は、AVI ファイル フォーマット を参照してください。 これによると、Motion JPEG を格納するには、AVIメインヘッダー、ストリームヘッダー、ストリームフォーマット、ストリームデータ、インデックスエントリの 5 つのチャンクを出力すれば良いことになります。 この時ストリームデータは、JPEGファイルをそのまま格納できるので、EXIF や品質を落とさないで保存することができます。

これらの情報から、連番 JPEG 画像を AVI コンテナに収めるツールを作成しました。 基本的には、下記のサイトや仕様通りに作成すれば良いのですが、いくつかポイントがありましたので列挙しておきます。

補足情報
AVIヘッダーの dwFlags ビット配置は?
ドキュメントでは曖昧な記述でどのようなビットをセットするのか分かりません。これは、Aviriff.h に定数定義があります。定数の中身については、Microsoft ライブラリのソースコードを見ないと分からない場合があるので、異なる言語で実装する場合でも、ソースコードを取得して読んでみることをお勧めします。
ストリームデータの記述方法
JPEG ファイルを羅列するものと思いましたが、各 JPEG ファイルを 00dc チャンクで包むようです。ひとつの 00dc チャンク内に JPEG を羅列した場合、エクスプローラのプロパティで AVI ヘッダを認識せず、サムネイルも表示されません。ただし、VCL media player や TMPGEnc などで再生または認識できました。恐らく AVI2.0 のオーバーヘッド節約モードとかが関係していると思われます。
JUNK チャンクを挿入して 2048 バイト境界に配置する?
そのような説明がされているサイトがありましたが、特に配慮する必要は無いように思います。
AVI は 2GB 以下の容量しか対応しない?
AVI には、Video for Windows(AVI1.0) の時代のものと、OpenDML AVI File Format Extensions(AVI2.0) の拡張仕様の2種類があり、AVI1.0 は 2GB まで、AVI2.0 は無制限(ファイルシステムの限界より大きい)のようです。なお、AVI1.0 ではチャンクサイズやオフセット値などが DWORD 型になっているので、4GB までは行けそうな気もします。
dwMicroSecPerFrame には何を入れたらいい?
フレームあたりのマイクロ秒を入れます。下記の計算式に当てはめれば良いです。60fps の場合は、16666 になります。
1 / fps * 1000 * 1000
dwMaxBytesPerSec には何を入れたらいい?
秒あたりの最大バイト数を入れます。ドット数とビット深度、及びフレームレートから、「width * height * 3 * fps」の計算式でしょうか? しかし、これだとかなり大きくなるし、ffmpg で作った似たような AVI では 2500 という比較的小さな値が入っていました。
dwSuggestedBufferSize には何を入れたらいい?
推奨バッファサイズを入れます。dwMaxBytesPerSec の数十倍程度を入れておくべき? よく分かりませんが、ffmpg で作ったものには 0x100000 が入っていました。
AVI 出力ツールの構造

基本的にはチャンクとリストを単位に順番に出力していく構造になります。 各チャンクまたはリストの出力は、下記のような手順が単純で効率が良いです。

  1. FOURCC を出力する
  2. ファイルポインタを記憶する
  3. チャンクサイズを 0 で出力する
  4. データを出力する
  5. (2)の位置との差からチャンクサイズを計算し、正しいサイズに(3)を書き換える
容量限界が 2GB なわけ

AVI(1.0)が 2GB までなのは、チャンクサイズを 4 バイトで表すためでした。 4 バイトで表すことのできるサイズは、符号ありで 2GB、符号なしで 4GB になると思います。 また、実装上 fseek など使う場合は、引数の long int 型が 2GB の制限を生んでしまいます。 従って、AVI を扱うソフトウェアはフォーマットの上でも、実装の上でも 2GB に制限されていると思われます。

OpenDML AVI File Format Extensions(AVI2.0)

仕様をざっくり読むと、1GB 以下では単一の RIFF AVI チャンクを持つ AVI ファイルと同じようです。 1GB 以上では RIFF AVI チャンクと、複数の RIFF AVIX チャンクで構成されるようです。 基本的には、1GB 以下になるように、複数の RIFF に分けて出力すれば良さそうです。 なぜ、1GB 以下なのかはナゾですが、実装としては 1GB 以下で RIFF ファイルを分割して出力し、最後に1本のファイルに結合するのが楽そうです。


桜の季節の新潟市を駆け足でどうぞ。走行ルートは、鳥屋野潟 ⇒ 鷲ノ木桜遊園 ⇒ 西川沿い ⇒ すご堀の桜並木 ⇒ さくらの舞う道(覚路津) ⇒ 雁巻の桜並木(小須戸桜ロード)です。OPは、加治川治水公園、EDは、石山のしだれ桜です。

ちなみに、最後に鳴くウグイスはこいつです。という訳で、答えは5番、ざーんねん(*^_^*)

YouTubeにアップロードしたら画質が落ちて、桜が溶けてしまいました。YouTubeへ行って720pHDにしてもあんまり変わらないし、ビットレート落とさないようにできないのかな。

04/14 新潟市中央区など
iPhone5→TMPGEnc VMW5
Tags #植物 #桜 #ドライブレコーダー #動画
※この記事は「Yahoo!ブログ - HDRp」からの転載です

NIIGATA光のページェントの新潟駅南けやき並木です。なかなか雪が積もりませんので、ドライブレコーダーによる横着な動画です。途中、立ち寄るロータリーは新潟駅の南口で、中心市街地とは反対側にあります。このイルミネーションは、バレンタインデーまで催されます。雪が積もれば、また見違えることでしょう。

動画は5倍速+残像残しの超速動画にしました。だいぶスピード出しているように見えますが、30km程度しか出してません。

01/06 新潟市中央区
iPhone5→TMPGEnc VMW5
Tags #夜景 #イルミネーション #ドライブレコーダー #動画
※この記事は「Yahoo!ブログ - HDRp」からの転載です

VLC Media Player の OSD フォントに「メイリオ」などの日本語フォントを指定すると文字化けしてしまいます。このフォントの指定ですが、「メイリオ」等ではなく「Meiryo UI」にすると文字化けせずに表示できるようです。なお、日本語フォント名が英数字のみのフォントであれば良さそうですが未確認です。文字化けにお困りの方はお試しください。



今日は、夏越の祓で新潟の一宮である彌彦神社へ行って来ました。ついでに例の場所へ行ってみたら、佐渡こそ見えなかったものの、環天頂アークが綺麗に見えました。早速のご利益ありがとうございます、お弥彦様♪

静止画は、HDR合成したものをパノラマ合成してみました。でも、動画のほうが綺麗に撮れたなあ。

動画は、1カット目は S100 手持ち動画撮影、2と3カット目は X4 の微速度撮影です。微速度撮影のほうは、金環日食のとき買った ND100000 を付けて、30秒露光の連続撮影です。

(画像)
Canon PowerShot S100
HDR JPG×3×2→PhotomatixPhotoshop(パノラマ合成)
(動画)
Canon PowerShot S100
Canon EOS Kiss X4 / SIGMA 10-20mm F3.5 EX DC HSM
EOS Movie×1、JPG×54、JPG×96→TMPGEnc VMW5

06/30 西蒲原郡弥彦村 弥彦山(多宝山)山頂
Tags #大気光学現象 #環天頂アーク #内暈 #動画 #微速度撮影
※この記事は「Yahoo!ブログ - HDRp」からの転載です


梅雨にも関わらず、非常にいい条件でお月見ができました。この日はスーパームーン、過去に同じレンズで撮った満月と比較すると確かに大きいですね。

これほど明暗差のあるものを、いとも簡単に統合できてしまう人間の目には、デジタルの目は敵いませんぜ。

(関連記事)
今夜もスーパームーン(2012年5月5日)
スーパーフルムーン(2011年3月20日)

(動画)
Canon EOS Kiss X4 / EF300mm1:4L , Canon PowerShot S100
EOS Movie×4→TMPGEnc VMW5

(静止画)
Canon EOS Kiss X4 / EF300mm1:4L
RAW×4→Photoshop(コンポジット合成)/TpzAdjust

06/23 新潟県内3箇所
Tags #天文 #満月 #スーパームーン #動画
※この記事は「Yahoo!ブログ - HDRp」からの転載です