RaspberryPiでハードウェアエンコードも可能だという事がわかったので、さっそくやってみることにした。
Step1.必要なファイルをインストールする
$ sudo sh -c "echo 'deb http://vontaene.de/raspbian-updates/ . main' >> /etc/apt/sources.list"
$ gpg --recv-keys 0C667A3E
$ gpg -a --export 0C667A3E | sudo apt-key add -
$ sudo aptitude update
$ apt-get install libgstreamer1.0-0 libgstreamer1.0-0-dbg libgstreamer1.0-dev liborc-0.4-0 liborc-0.4-0-dbg liborc-0.4-dev liborc-0.4-doc gir1.2-gst-plugins-base-1.0 gir1.2-gstreamer-1.0 gstreamer1.0-alsa gstreamer1.0-doc gstreamer1.0-omx gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-dbg gstreamer1.0-plugins-bad-doc gstreamer1.0-plugins-base gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-base-dbg gstreamer1.0-plugins-base-doc gstreamer1.0-plugins-good gstreamer1.0-plugins-good-dbg gstreamer1.0-plugins-good-doc gstreamer1.0-plugins-ugly gstreamer1.0-plugins-ugly-dbg gstreamer1.0-plugins-ugly-doc gstreamer1.0-pulseaudio gstreamer1.0-tools gstreamer1.0-x libgstreamer-plugins-bad1.0-0 libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-base1.0-0 libgstreamer-plugins-base1.0-dev
$ gst-inspect-1.0 | grep omx
omx: omxmpeg2videodec: OpenMAX MPEG2 Video Decoder
omx: omxmpeg4videodec: OpenMAX MPEG4 Video Decoder
omx: omxh263dec: OpenMAX H.263 Video Decoder
omx: omxh264dec: OpenMAX H.264 Video Decoder
omx: omxtheoradec: OpenMAX Theora Video Decoder
omx: omxvp8dec: OpenMAX VP8 Video Decoder
omx: omxmjpegdec: OpenMAX MJPEG Video Decoder
omx: omxvc1dec: OpenMAX WMV Video Decoder
omx: omxh264enc: OpenMAX H.264 Video Encoder
pi@raspberrypi ~/gstreamer-1.0 $ gst-inspect-1.0 | grep fbdevsink
fbdevsink: fbdevsink: fbdev video sink
Step2.MPEG2のライセンスキーの購入
http://www.raspberrypi.com/mpeg-2-license-key/
Step3.ハードウェアエンコード
ネット上より参考に見つけたやり方。
gst-launch-1.0 \
filesrc location=daitosho_PV.mpg ! progressreport ! mpegpsdemux name=demuxer demuxer. ! queue ! \
mpegaudioparse ! mad ! audioresample ! audioconvert dithering=0 ! voaacenc bitrate=196000 ! mux. \
mp4mux name=mux ! filesink location=hoge.mp4 demuxer. ! queue ! \
mpegvideoparse ! omxmpeg2videodec ! videoconvert ! \
omxh264enc target-bitrate=6000000 control-rate=variable ! video/x-h264,stream-format=byte-stream,profile=high ! \
h264parse ! mux.
これをやればうまく行くんだろうけど、目的は容量削減ではなく、
chromebookがMpeg2の再生に対応していないので、再生できるようにMpeg4へトランスコードすることである。
それとせっかくのRaspberryPiがハードウェアエンコードとデコードが使えるので、これらを使えるようにする。
やり方
1.TSファイルから必要な情報のみ取り出す。
(これだけで、90%くらいに縮む。 21MB→19MB)
$ tssplitter_lite src.ts dst.ts -1 (SIDはTS毎異なる)
2.TSファイルを分割する。(MPEG2動画とAAC音声に分ける)
$ ffmpeg -y -i dst.ts -acodec copy dst.aac -vcodec copy -an dst.m2v
3.動画をMPEG2→MPEG4に変換する。
$ gst-launch-1.0 filesrc location=a.m2v ! mpegvideoparse ! omxmpeg2videodec ! videoconvert ! omxh264enc ! filesink location=test.mp4
4.MPEG4とAACファイルをそのまま結合する。
$ ffmpeg -i out.mp4 -i a.aac -vcodec copy -acodec copy output.mp4
(最終結果で2.3MB、おおよそ10分の1)
これでMpeg4ファイルが完成してとてもコンパクトになったが、
インターレースの格子がひどいのでStep3は見直しが必要である。
○TSファイルから必要なデータのみ抽出
wget http://hp.vector.co.jp/authors/VA038175/download/tssplitter_lite.zip
unzip tssplitter_lite.zip
cd tssplitter_lite
make all
cd tssplitter_lite
sudo cp tssplitter_lite /usr/local/bin/
使い方:tssplitter_lite source.ts dest.ts [SID]
SIDの調べ方は、
ffmpeg -i source.ts
を実行して、Mepg2Videoになっている一番上にある番号が使うSID(1056など)
参考URL
http://theiopage.blogspot.jp/2013/04/enabling-hardware-h264-encoding-with.html