31
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi で MPEG-2 TS の動画を H.264 にハードウェアエンコードする(ffmpeg版)

Last updated at Posted at 2017-03-05

この記事について

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: 動画の長さとほぼ同じ時間
    でエンコードできるようです。

あとは各自でスクリプト書くなりして、どんどんエンコードしていきましょう。💪

31
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?