Show page source of mpeg_encoder #103679

= 連番 PPM または PNG から MPEG-1 ファイルを作成するエンコーダ
== 概要
Javascript + html5 canvas で mpeg-1 ファイルを再生してしまうすごいライブラリ jsmpeg を発見しました。
入力された mpg ファイルをデコードすることで得られる画像を 逐次canvas に描いていくことで動画再生を実現するというものですが、
入力できるMPEGデータに2つの制約があるようです。
 * 制約1. 幅が偶数であること
 * 制約2.  Bフレームを含まないこと
制約1 はともかくとして、制約2がなかなかクリアできずに苦戦していました。
配布元の指示通りに ffmpeg のパラメータを指定してmpeg1動画を生成しても、
表示が大幅に崩れてしまいます。 まあ、ffmpeg を使い慣れているわけでもないですし、
動画フォーマットについてほぼ素人なので、実は正しいパラメータの指定の仕方
を知らないだけかもしれません。 
結局 ffmpeg のパラメータの指定方法の詳細がなかなかつかめなかったので、別のツールを試すことにしました。

探したところ、[http://vision.kuee.kyoto-u.ac.jp/lecture/dsp/?menu=c_movie mpeg_encode]という、連番 PPM ファイルから mpeg1  ファイルを作成できるエンコーダを発見しましたので、
ここからソースを取得し、Visual Studio でビルドできるようにソースを修正してみました。
また、ついでに png デコーダ [http://d.hatena.ne.jp/tueda_wolf/20110702/p2 stb_image] も組み込んで、連番 PNG にも対応してみました。

前置きが長かったですが、この「エンコーダ」が今回紹介するプログラムです。
このエンコーダで作ったmpegファイルは、今のところは jsmpeg でうまく再生できてます。
他の色々なデータでも試してみて、表示が崩れないことを確認していきたいと思います。


・・・そういえば、Windows10 でこの検証をしていたのですが、 Windows10 のメディアプレイヤーで mpeg-1 ファイルが再生できませんでした。
Windows10 には mpeg-1 codec が入ってなかったりするんでしょうか?

== 参考サイト
 * [http://github.com/phoboslab/jsmpeg jsmpeg] (MITライセンス?)
 * [http://vision.kuee.kyoto-u.ac.jp/lecture/dsp/?menu=c_movie mpeg_encode]
 * [http://d.hatena.ne.jp/tueda_wolf/20110702/p2 stb_image] (Public Domain)

== ダウンロード
 * [/downloads/users/8/8896/mpeg_encode.zip ソース]