link もっと前
   2015年 10月 8日 -
      2015年 9月 29日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

MPEG4-AVC / H.264 の 2つのフォーマット

今や映像の圧縮方式として当たり前となりつつある MPEG4-AVC(※)には、2つの形式があります。

  • ISO/IEC 14496-1: Annex B - Byte Stream Format
  • ISO/IEC 14496-15: NAL File Format

Byte Stream Format は、俗に言うスタートコード形式(0x000001 を目印として NALU が始まる)で、コンテナを使わない場合、リアルタイム配信(RTSP)、放送系(MPEG2-TS をコンテナ)で良く使われているようです。

利点としては「欠け」に強いことです。何か問題が発生してデータが欠けてしまっても、スタートコードさえ見つかれば、その地点から処理を再開できます。その分、毎度スタートコードを探す処理が必要がある、先頭が欠けても再生できるように重複して情報を入れる必要があるなど、やや非効率的です。

NAL File Format は、いわゆるサイズ指定形式(数バイトのサイズの後に NALU が始まる)です。ファイル形式(MP4 など)に良く使われているようです。

利点としては「効率的」であることです。余分な情報はコンテナに持たせて、ビットストリームからは取り去りますのでサイズが小さくできます。NALU のサイズも予めわかりますから不要な NALU をスキップする際の負荷も低いです。その分、1バイトでも欠けてしまうと、デコードできなくなってしまう弱さもあります。

実はこの 2つを変換するのは面倒で、サイズ指定をスタートコードに置き換えるだけではダメです。そんな単純な変換では、上記のような特徴が出せません…。

(※)AVC は Advanced Video Codec の略です。この規格は ISO/IEC と ITU-T の共同規格なので、MPEG4-AVC ではなく ITU-T の規格名である H.264 と呼ぶ人も多いですね。

変換ツールの使い方

でも、自分でそのような処理を書く必要はありません。世の中にはナイスガイ達が居て、変換が可能なツールを公開してくれています。ありがたいことです。

まずは ffmpeg を使う場合ですが、コーデックは変更しないので copy を指定して、普段の利用ではあまり見かけない bsf オプションを使って変換します。

なぜ mp4toannexb という名前かと言うと、MPEG4-AVC の規格である ISO/IEC 14496-1 Annex B に Byte Stream Format の規格が示されているからではないか?と思われます。

ffmpeg を使う場合(NAL File Format から Byte Stream Format)
avconv -i /path/to/hogehoge.mp4 -vcodec copy -bsf:v h264_mp4toannexb hogehoge.h264

Gstreamer を使う場合は h264parse エレメントを使います。ffmpeg と比べるとかなり長く感じますが、大したことはしていないです。

例では、改行を入れていますが、実際には改行を入れずに 1行で書いてください。もし Gstreamer 1.0 系を使う場合は、video_00 のところを video_0 と書く必要があったはずです。たぶん。

gstreamer を使う場合(NAL File Format から Byte Stream Format)
 gst-launch filesrc location=/path/to/hogehoge.mp4 ! 
 qtdemux name=dem dem.video_00 ! 
 h264parse ! 
 video/x-h264,stream-format=byte-stream,alignment=au ! 
 filesink location=/path/to/es/hogehoge.h264

普通に動画を楽しんでいる人には、こんな変換は全く縁がありませんが、私にとっては便利なんです。こんなツール達がオープンソースで公開されているというのは、ありがたいことですなー…。

[編集者: すずき]
[更新: 2015年 10月 11日 18:12]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

ちぐはぐな Visual Studio のエディタとコンパイラ

Visual Studio 2015 のコンパイラは、未だに BOM を付けないと UTF-8 を認識しません。なぜか Shift-JIS もコンパイルエラーになります(2013 ではなりません)。

MSDN ライブラリ(サイトへのリンク)でも「コンパイラおよびリンカーでの Unicode のサポート(... 中略 ...)BOM 付きの UTF-8」などと言いきる始末です。イマイチすぎる…。

Visual Studio の IDE は Git に対応したり、エディタがマルチプラットフォームになったり、コミュニティベース開発に力を入れたり、時代の流れに沿って進化していますが、

コンパイラはダメダメ感が漂います。C++0x の対応は llvm, gcc の後塵を拝しワーストです。もはや Microsoft ですら単独で C/C++ コンパイラを開発するのは不可能なのかなあ…?

メモ: 技術系の話は Facebook から転記しておくことにした。

[編集者: すずき]
[更新: 2015年 11月 29日 03:53]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

ジージェネレーションフロンティア

SD ガンダム ジージェネレーションフロンティアの話。今までの FR 設計イベントをメモしておきます。

FR 設計イベントの材料一覧
第一弾

FR アカツキ(シラヌイ)/ 誘導機動ビーム砲塔システム
-- UR ゲーマルク(覚醒)/マザー&チルド・ファンネル
-- UR シナンジュ /バズーカ
-- UR ドム/ジェットストリームアタック
-- UR デスティニーガンダム(最大稼働)/パルマフィオキーナ

第二弾

FR νガンダム/連続格闘
-- UR クロスボーン・ガンダムX1改・改/ヒートダガー&スクリュー・ウェッブ
-- UR サザビー/ファンネル(Ver.2)
-- UR ジ・O(覚醒)/ビーム・ソード/四刀流 
-- UR アルトロンガンダム/ドラゴンハング

第三弾

FR ガンダムアヴァランチエクシア/GNソード/ソードモード
-- UR ストライクルージュ(IWSP)/一斉発射
-- UR ノイエ・ジール/有線クロー・アーム
-- UR ∀ガンダム/核弾頭
-- UR ケルディムガンダムGNHW(トランザム)/GNライフルビット

第四弾

FR ガンダムデルタカイ/プロト・フィン・ファンネル
-- UR グフ・カスタム/ヒート・ワイヤー
-- UR ガンダムDX(Gファルコン)/ツインサテライトキャノン
-- UR デストロイガンダム/ツォーンMk2&スーパースキュラ
-- UR デルタガンダム/ビーム・サーベル/二刀流

第五弾

FR ガンダムAGE-2ノーマル/MS/ハイパードッズライフル
-- UR ザクII改/ヒート・ホーク&ダミーバルーン爆弾
-- UR トールギスIII/メガキャノン/最大出力
-- UR ガンダムAGE-1ノーマル/ドッズライフル
-- UR ラフレシア/親バグ&子バグ

これらのイベントは既に終わっていますが、しばらく経つと再実施されるようです。作り逃した FR キャラクターが居ても、後でまた作れるかもしれませんので、材料となる UR キャラクターを、間違って処分してしまわないようにメモしておきます。

しばらくやってみた感想

楽しい点は、小学生の時にハマっていた SD ガンダムのカードダス集めの気分が味わえることです。特に FR キャラクター(カードダスのキラキラカードに相当)が当たった時は、出たこれ!って気分で嬉しいですね。

ゲームとしてはつまらないです。もし同じ面を 100回以上やる「イベント」を、毎週連発するだけのゲームが面白い!好き!と思う人が居ればオススメしますが…。私は立ちながらか、歩きながらプレイしないと確実に寝ます。

嫌いな点は UI です。いちいちボタンを押さないと進まないのに、ボタンの配置に統一感がありません。片手で遊びづらいです。

[編集者: すずき]
[更新: 2015年 10月 4日 03:49]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link permalink

ネットワークドライブ上の実行ファイル

Visual Studio Community 2015 をインストールしてみたので、適当なプロジェクトを作成して、デバッグしようとすると「アクセスが拒否されました」と怒られました。なんだ、いつのまにこんなことに…?

どうもプロジェクトを samba の共有ドライブ上に作成していたのが良くないようで、生成された exe ファイルを直接実行しようとしても「アクセスできません」と怒られてしまいます。

原因

Samba のデフォルトの設定だと Windows 側からファイルを作成すると全てのファイルがパーミッション 0755 で作成されてしまい、実行ファイルでもないファイルに実行権限が付いてしまいます。

これは Linux からファイルを見る時に非常にウザいので、私の環境では Samba の設定に create mask = 0644 を追加しています。しかし、この設定だと exe ファイルもパーミッションが 0644 で作成されてしまいます。

Samba はパーミッション 0644 を Windows の ACL に変換するとき「実行権限が無い」と解釈するため、Windows 側が「実行してはいけないファイルを実行するな」と怒っているようです。

対症療法

Linux 側から手動で exe ファイルのパーミッションを 644 から 755 に変更すると、実行できるようになりますが、ビルドの度にパーミッションが 644 に戻るので、毎回変更しなければならずダルくてやっていられません。

逆に Windows 側から実行権を付けようと [プロパティ] - [セキュリティ] - [編集] ボタンから、実行権限を付加しても、ファイルのパーミッションに全く反映されません。

解決方法

この問題に半日悩んでいたのですが、実は非常に簡単な設定がありました。

Samba の設定に acl allow execute always = yes を加えれば解決しました。このオプションは名前の通り、ファイルは常に実行可能、と解釈するオプションのようです。

なぜか日本語のヘルプが見あたらないのですが、最近追加されたオプションなのでしょうか?まあ、今となってはどうでも良いですが…。

ちなみに Samba の設定ファイルは /etc/samba/smb.conf です。もし現在の Samba の設定の一覧を調べたければ testparm コマンドを使ってください。便利です。

[編集者: すずき]
[更新: 2015年 10月 1日 03:01]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2015年 10月 8日 -
      2015年 9月 29日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 8/15 10:52

カレンダー

<2015>
<<<10>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント 5件

  • link 18年08月15日
    すずき 「うーん、なんか暴走したり、動かなかったり...」
    (更新:08/15 10:52)
  • link 18年08月15日
    すずき 「実行できた。あと実行ファイルパスについて...」
    (更新:08/15 10:42)
  • link 18年08月15日
    すずき 「さすがに x86_64 と arm のク...」
    (更新:08/15 10:35)
  • link 18年08月14日
    すずき 「ダイナミックリンクにするだけで性能がほぼ...」
    (更新:08/15 08:34)
  • link 18年08月14日
    hdk 「なるほど! LINKERを変えていなくて...」
    (更新:08/14 23:06)

最近の記事 3件

link もっとみる
  • link 18年08月15日
    すずき 「[自分のマシンは何 GFLOPS か? その 3] その 1、その...」
    (更新:08/15 10:46)
  • link 18年08月14日
    すずき 「[自分のマシンは何 GFLOPS か? その 2] その 1、その...」
    (更新:08/15 10:08)
  • link 18年08月13日
    すずき 「[自分のマシンは何 GFLOPS か? その 1] その 1、その...」
    (更新:08/15 10:08)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報