jetson nano のハードウェアエンコーダ、デコーダが利用できるffmpeg はnvidiaから公式サポートはされていませんが、さがしてみるとこのリポジトリが見つかりました。
これをビルドしてみたのでその手順を紹介します。
ビルドはjetson nano上でネイティブビルドしています。
準備
ffmpeg をソースからビルドするので、まず依存するライブラリをインストールします。
sudo apt build-dep ffmpeg
これがエラーになるときは、このページをみてください。
apt build-dep がエラーになるときの対処方法
sudo apt install libv4l-dev
あとはこのページの手順でいけます。
https://github.com/jocover/jetson-ffmpeg
依存ライブラリのビルド
git clone https://github.com/jocover/jetson-ffmpeg.git
cd jetson-ffmpeg
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
ffmpeg のパッチとビルド
git clone git://source.ffmpeg.org/ffmpeg.git -b release/4.2 --depth=1
cd ffmpeg
wget https://github.com/jocover/jetson-ffmpeg/raw/master/ffmpeg_nvmpi.patch
git apply ffmpeg_nvmpi.patch
./configure --enable-nvmpi
make -j4 2>&1 |tee make.log
sudo make install
$ which ffmpeg
/usr/local/bin/ffmpeg
$ ffmpeg -codecs |grep 264
ffmpeg version 3eedf15 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 7 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)
configuration: --enable-nvmpi
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_nvmpi ) (encoders: h264_nvmpi h264_v4l2m2m h264_vaapi )
H.264 のdecoder と encoder に h264_nvmpi が入っているのが確認できました。
トランスコードしてみた
H.264の1080p 30fps の動画ファイルを 720p 30fps にトランスコードしてみました。
ffmpeg -c:v h264_nvmpi -i bbb1080.mp4 -c:a copy -c:v h264_nvmpi -s 1280x720 -b:v 1M -g 60 bbb720.mp4
1.1 倍速でできました。
でも、できたファイルを再生してみると音と映像にズレがある ..? ちょっと音が早いみたい。なんでだろ。