recfsusb2nを使った録画で出力されるtsファイルがひじょーに重く扱いにくい。
なので,mp4に圧縮してファイルサイズを削減します。
Raspberry Piにはh264のハードウェアエンコーダが備わっているので,
これを使うことで非力なRPiでも短時間でエンコードが可能になります!
gstreamerのインストール
さっそくエンコードに必要となるソフトgstreamerの準備をします。
$ sudo apt-get install gstreamer1.0-*
必要ないものは削ってください。
hardware decoder&encoderの有効化
ハードウェアデコーダ/エンコーダが有効になっているかを確認。
ここではmpeg2のハードウェアデコーダを使っているので,こちらを参考に有効にしておいてください。
$ gst-inspect-1.0 | grep omx
で出力内にomxmpeg2videodecとomxh264encがあればOK
gst-inspect-1.0はgstreamerで使用できる機能の一覧を調べられます。他のフォーマットからh264に変換したい場合や,h264以外に変換したい場合は,このコマンドを使って適当なモノを探してきます。
エンコード設定
ここまで確認できればあとは変換するのみ。
(例:test.tsからtest.mp4にコンバート
$ gst-launch-1.0 filesrc location=test.ts ! progressreport ! tsdemux name=demuxer demuxer. ! queue ! aacparse ! avdec_aac ! audioresample ! audioconvert dithering=0 ! voaacenc bitrate=192000 ! mux. mp4mux name=mux ! filesink location=test.mp4 demuxer. ! queue ! mpegvideoparse ! omxmpeg2videodec ! videoconvert ! omxh264enc target-bitrate=3000000 control-rate=variable ! video/x-h264,width=1280,height=720,stream-format=byte-stream,profile=high ! h264parse ! mux.
上記コマンドの簡単な流れ
①filesrc:入力ファイルの指定
②tsdemux:データの読み出し
③aacparse ! avdec_aac:音声をデコード
④audioresample ! audioconvert ! voaacenc:サンプリングしてエンコード(改善余地あり。なぜaccからaccに変換せにゃならんのだ。。
⑤filesink:一度ファイルに保存
⑥mpegvideoparse ! omxmpeg2videodec:今度は動画の読み込み
⑦videoconvert ! omxh264enc:指定フォーマットでエンコード
参考:動画フォーマットを調べる
実行するとこんなのが出てくるので,動画のフォーマットに合わせてgstreamerのオプションを修正
$ mediainfo test.ts
General
Complete name : test.ts
Format : MPEG-TS
Video
Format : MPEG Video
Format version : Version 2
Width : 1 440 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Audio
Format : AAC
Format/Info : Advanced Audio Codec
Format version : Version 2
Bit rate : 192 Kbps
コメントを投稿