soy-curd's blog

へぼプログラマーです [https://twitter.com/soycurd1]

新年になったのでGIF作成webアプリ「にこ☆GIF」をmp4に対応させた

正月休み中暇だったので、ニコニコ動画からGIFを作成するツール「にこ☆GIF」をmp4に対応させた。

にこGIF

どんなかんじか

例えばこんな動画をGIFに変換すると、 f:id:soy-curd:20160102150035g:plain

となる。

実装について

基本、ffmpegで動画ファイルをGIFに変換するだけなのだが、なにも考えずに行うと動画をいちいち全て取得する必要があって、異常に時間がかかっていた。

そこで、動画の途中からデータを部分的に取得するように実装したのだが、そのようにすると動画として再生できないバイナリの断片しか得られない。そこで、pythonを使って力技でファイルの断片から.264ファイルを擬似的に作成して、それをffmpegでmp4に変換することにした。mp4と.264、仕様書は存在するのだが、英語が全然読めなくて非常に辛かった。結局はmp4のバイナリを目で読んで仕様をバイト列から類推するみたいなかんじになった。一年分はバイナリエディタを使ったと思う。当分16進は見たくない。

参考にしたもの

mntone.hateblo.jp

stackoverflow.com

developer.apple.com

https://www.cmlab.csie.ntu.edu.tw/~cathyp/eBooks/14496_MPEG4/iso14496-10.pdf

ごちうさMADで学びたいmp4のデータ構造

近頃、ごちうさMADの中身が気になって気になってしかたがない病にかかってしまいました。これでは夜も眠れないので、全く動画関連の知識がない中ではありましたが、ごちうさMADの中身を調べる次第となりました。

素材

今回はこちらを利用します。

(各位、どうにかしてこの動画のmp4データを入手してください)

MP4Boxの入手

mp4の内部構造を調べるため、MP4Boxというツールを利用します。 macなら、

brew update
brew install gpac

とhomebrewで入手することができます。

それでは実行してみます。

MP4Box -info -v sm24551585.mp4   

f:id:soy-curd:20151216222728p:plain

一見、意味不明なデータが取得できました。

mp4の内部構造

mp4はBOXと呼ばれる構造が複数繋がったデータ形式となっています。 BOXはそれ自体が内部に別のBOXを持つこともできるのですが、 その中でも「ftyp」「moov」「mdat」というようなBOXがルートに配置されています。

さきほどのMP4Boxの出力でも、"Current top box"として表示されているのでわかりやすいかと思います。この中で、moovは動画のメタ情報、mdatは動画本体の情報が格納されています。

ごちうさMADでは以下のように、

  • ftype
  • moov
    • mvhd
    • ...
  • mdat
  • free

moovがmdatより前に存在することがわかります。これは恐らく、ニコニコ動画で再エンコードされた際、ストリーミングやシーク等に対応するためにmoovをこの位置に配置しているのだと考えられます(推測)。

バイナリで確認

さて、動画はバイナリデータですから、とりあえずバイナリエディタで開いてみましょう。

f:id:soy-curd:20151216225203p:plain

先頭の8バイトを以下に示します。

00 00 00 14 66 74 79 70

これは前半の4byteがBOXの長さ、後半の4byteがBOXの名前を表しています。この場合は'ftyp'です。長さが0x14なので、ftyp BOXはこのヘッダ含め20バイトの大きさであることがわかります。このBOXには以下'isom'というascii文字列が格納されていますが、これはこのmp4ファイルの規格を示しています。

Complete List of all known MP4/QT 'ftyp' designations

このようにして頭からバイナリを読んでいくと、動画の長さやトラックの数等を知ることができます。

ここで、ファイルの0x1D0あたりの位置にある'stsd'というBOXの内容を見ていただくと、'avc1'というascii文字列が確認できると思います。これで、このmp4に格納されている動画がH.264形式であることがわかります。この情報は、MP4Boxの出力に、

Visual PL: AVC/H264 Profile (0x15)

とあることからも確認できます。

H264

続いてはこちらの中身を見ていきたいところですが、このH.264については完全に闇だったため、全く情報を追えていません。だれか私にISO-14496-10を読み解く力をください。(続かない)

参考ページ

デジタル映像の「アーカイブ&デリバリー」に関する技術情報サイト|mpeg.co.jp > MPEGラボ > 第26回

http://perso.telecom-paristech.fr/~concolat/MPEGFileFormats.pdf

unoh.github.com by unoh

http://cimarronsystems.com/wp-content/uploads/2014/04/Elements-of-the-H.264-VideoAAC-Audio-MP4-Movie-v2_0.pdf

https://msdn.microsoft.com/en-us/library/windows/desktop/dd757808(v=vs.85).aspx?tduid=(82e78e30a0c47dc925de44e2ff61b99b)(256380)(2459594)(TnL5HPStwNw-WveVIlRjIxZxvxcYVBlNFw)()

H.264 について(まとめ) 【H.264/Annex B/NAL file format/AVC/rtmp】 - モノトーンの伝説日記

ご注文はうさぎですか?? 第1巻 (初回限定版) [Blu-ray]

ご注文はうさぎですか?? 第1巻 (初回限定版) [Blu-ray]

上田岳弘『私の恋人』読んだ

クロマニョン人が転生して現代日本人として生まれ変わってオーストラリア人の女の子といちゃいちゃする話。

このように数十万年規模で物語が進行する小説は、青木淳悟の『四十日と四十夜のメルヘン』に収録されている「クレーターのほとりで」以来な気がする。 どちらも新潮社なので、新潮新人賞クロマニョン人は親和性が高いのかもしれない。

内容としては若干思弁SFっぽいかんじがして、例えば飛浩隆作品のSF的理詰めの部分を取り除いて観念的な会話だけに終始させたら似たようなかんじになるかもしれない。この小説、前半は読んでいて辛い感があるが、後半オーストラリアから始まる世界一周の旅パートに入ると面白くなってくるので、作者を旅に出せば出すほど小説が純化して良くなっていくかもしれない。将来に期待。

ラギッド・ガール 廃園の天使?

ラギッド・ガール 廃園の天使?

四十日と四十夜のメルヘン

四十日と四十夜のメルヘン

私の恋人

私の恋人

宮崎夏次系『ホーリータウン』読んだ

宮崎夏次系『ホーリータウン』読んだ。例によってヘリコプターを乗り回すおじいちゃんとかちくわが頭部に生えた女の子とかが出てきてテンションが高めですが、中でも以下のコマ、

妻が家出してしまった我が家でもくもくと自分の作った食事を食べる夫が、あまりの妻への許せなさに焼き魚を箸でぶしゅっとするシーンが非常に高まります。

近作になるに従ってどんどんコマとコマの間の感情の連続性が欠落していってギャグ寄りになっている気がするのですが、果たしてこのまま突っ走っていってどれだけの読者がついてこれるのか非常に心配です。

(『夕方までに帰るよ』は未読なのでそちらでは一般向けになっているのでしょうか...)

ホーリータウン (モーニング KC)

ホーリータウン (モーニング KC)

夕方までに帰るよ (モーニング KC)

夕方までに帰るよ (モーニング KC)

小山田浩子『工場』読んだ

小山田浩子『工場』読んだ。三島由紀夫賞の候補だけあってそれなりにとがっている。作者が動物好きのようで、収録されている三編とも動物が登場し、全てオチに使っている。だけど、吉村萬一『ハリガネムシ』のハリガネムシオチとかと比べるとあまりピンとこない気がしなくもない。表題作の「工場」は鵜とかヌートリアとか以外にも苔がふんだんに盛り込まれいて、むしろ動物抜きで苔小説として先鋭化していたほうが楽しめたかもしれない。

工場

工場

サークル告知

boonlab.hatenablog.com

サークル「文學ラボ」の文学フリマのブースが決まりましたので、告知させていただきます。

ブース位置 : イ-33 (Fホール(2F))

カテゴリ : 小説|その他

冊子については、『実践 太宰治』というpython + ElasticSearch本を出す予定です。 とりあえずコンテンツは以下です。

boonlab.hatenablog.com

内容は以前出した『実用 どんぐりと山猫』ともろ被りしているので、二冊目にしてネタ切れしてて最高なかんじです。

カテゴリは"小説|その他"ということで、その他なかんじのサークルさんたちと横並びになることが予想されます。 楽しみでしかたないです。よろしくお願いします。

太宰治小説のTF-IDFを計算した

http://takuti.me/note/tf-idf/

を参考に、太宰治小説のTF-IDFを計算した。以下、値が上位のものから単語だけ30個並べると、

いちど,謂わ,依っ,要ら,つらい,やたら,ご存じ,在っ,先日,おそろしく,だいいち,
あがっ,ゆるし,下さっ,おそろしい,落ちつき,青森,あいだ,くるしい,おそく,ちかく,
おまえ,ごはん,大笑い,具合い,判ら,ちまい,のこのこ,としの,三鷹,やけくそ,たいてい,
れい,だめ,無かっ,ちゃんと,逢う,津軽,あらわれ,繰りかえし,わびし,あれこれ,わかい,
うつむい,みじん,いやらしい,わがまま,ふるさと,於い,在る,口調,なんにも,捨て,
無学,ッ,なさっ,だいたい,概念,判る,長兄,生家,安易,素知らぬ,金木,したため,熱狂,
あいそ,のろのろ,ごちそう,わるい,芸術,ばん,之,落ちつい,まじめ,ことし,敗北,自重,
たのしみ,めいわく,長編,ロマンス,かたち,悪癖,言える,記さ,あからめ,知合い,滅茶,
とたんに,あやしい,心掛け,判っ,くさく,高潔,まごつい,侘び,あたらしく,甲府,ひくく,
むだ,瞬時,ふっと,酔っ,大  声,きらい,内心,おのれ,ゆえ,ふたり,おめでとう

のようになる。ネガティブな単語が多く含まれていて、非常に満足度が高い。

https://github.com/soy-curd/Dazai/blob/master/doc/flayer.png

ついでに文学フリマ用のビラもできたので、ひと安心。