この記事について
Raspberry Piを使って、どのご家庭にもある.ts
なファイルを圧縮してディスクの空き容量を増やし、
さらに溜め込んでいくぞという試みです。
以下の2モデルで確認しています。
- Raspberry Pi(初代) Model B+
- Raspberry Pi3 Model B
従来、Raspberry PiでのハードウェアエンコードではGStreamer
を使って行うのが一般的でした。
しかし、GStreamer
はそもそもこのような単純な動画エンコードを目的としたツールではないため、
- オプションなどがわかりにくい
- 情報が少ない
などの問題がありました。
そこで、本記事では皆さんが使い慣れたFFmpegを使ってハードウェアエンコードを行っていきます。
なお、FFmpegがRaspberry Piのハードウェアエンコードに対応したのは2016年中頃のようです。
事前準備
- Raspbianの初期設定
- MPEG-2ライセンスの入手と設定
この辺りの説明は割愛します。各自お好きなようにしてください。
FFmpegのビルド
ここから本編です。
$ wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
$ tar jxvf ffmpeg-snapshot.tar.bz2
$ cd ffmpeg
$ ./configure --enable-static --enable-omx-rpi --enable-mmal
# 使用している Raspberry Pi のCPU数に応じて変更 (Pi=>1, Pi3=>4 あたり)
$ make -j4
# Piだと6時間弱, Pi3でも40分程度かかります
$ sudo make install
エンコード
ビルドしたffmpegを使ってエンコードしていきます。
ハードウエアエンコードにありがちですが、以下の操作をしようとすると、エンコード速度が落ちます。
- 解像度を変更する
- インターレースを解除する
あくまでファイル容量削減程度に考え、割り切ってエンコードしていくのが良さそうです。
例
hoge.tsをH.264に変換する例です。h264_omx
がポイントです。
$ ffmpeg -fflags +discardcorrupt -i hoge.ts -bsf:a aac_adtstoasc -c:a copy -b:v 5000k -c:v h264_omx -y hoge.mp4
-fflags +discardcorrupt
-bsf:a aac_adtstoasc
あたりはaudioのコピーをするためのオプションです。
audioをそのままコピーすることによってエンコード速度低下を防いでいます。
-b:v 5000k
でmovieのビットレートを指定できます。
元の解像度や好みによって変えると良いと思います。
上記オプションの場合、
- Raspberry Pi: 動画長さの3倍程度の時間
- Raspberry Pi3: 動画の長さとほぼ同じ時間
でエンコードできるようです。
あとは各自でスクリプト書くなりして、どんどんエンコードしていきましょう。💪