PanasonicのカメラとのWiFi通信

PanasonicのLUMIX GシリーズのミラーレスカメラGX8を購入しました。 WiFi通信が使えるカメラは初めてなのでいろいろと実験してみました。

ここ数年のPanasonicのカメラはHTTPで接続すると/cam.cgiで色々と制御できるようなっているということが分かりました。

export host=192.168.54.1
curl -v "http://${host}/cam.cgi?mode=getstate"

ただ、この状態に持ってくるにはどうやら通信先のソフトをカメラ側に認識してもらう必要があるようです。

私はPanasonic純正のAndroidアプリImage Appをインストールしてカメラを同じアクセスポイントに接続することでこのあたりはパスしました。

このへんは試していないので省略しますが、:60606/xxxxxxxxxxxx/Server0/ddd/cam.cgi?mode=accctrl&type=req_acc&/cam.cgi?mode=setsetting&type=device_name&の2つを適切なパラメータで呼ぶ必要があるようです。詳しくはGitHub内を"cam.cgi"でコード検索してみてください。

カメラ側でWi-Fi機能、履歴から接続するを選びAPに接続すると「スマートフォンのアプリを立ち上げていない場合は、立ち上げてください」と表示されるので、ここで1回だけcam.cgiのgetstateを送って認識させます。IPはDHCPなので事前になんとかして調べておいてください。本体のIPアドレス表示機能がありますが、接続しないと表示されないので使えないです。私はとりあえず一度だけImage Appを立ち上げてIPを確認しましたが、もうちょっとよい方法が欲しいところです。arpingとかを使えばいいのかな。

追記: とりあえず以下のようなスクリプトpingを打つことにしてみました。

seq 200 254 | xargs -P32 -i ping -c1 -W 1 192.168.24.{} | grep icmp_

/cam.cgi?mode=startstream&value=49152みたいなコマンドを送るとvalueで指定したUDPポートにMotionJPEGっぽいデータが送られてきます。 これをffplayで再生できるとの情報もありましたが、私の環境ではだめでした。netcatで受信後にffplayやmplayerで再生することはできました。 どうもパケットを解析してffd8からffd9までのJPEG部分だけを取り出して保存していく必要があるようです。このあたりも検索すればいろいろと出てきます。

ただ、なぜか動画の上部しか表示されませんでした。動画の大きさは/cam.cgi?mode=setsetting&type=liveviewsize&value=qvgaで変えられたので、QVGAで同じようにしてみたところ、うまく再生できました。

大きさはVGAQVGAの2択のようです。フレームレートもあまり期待できないようなので、リモート制御するとき以外はあまり使うことはなさそうです。

で、肝心のファイルのダウンロードはどうするのか調べたところ、ダウンロード自体はhttp://${host}:50001/DO${id}.${ext}のような形式のようですが、既知のidを使ってもうまくダウンロードできませんでした。

その後、UPnPでいろいろとしないといけないことが分かってきました。どうやらUPnPでファイル一覧にアクセスしてからでないとダウンロードできないようです。あと拡張子はなんでもよさそうです。jpgやmp4などを指定しておけばよいでしょう。

UPnPの処理は長くなるので以下のGistを見てください。

gist.github.com

:60606/Server0/CDS_controlをPOSTしているところがそれです。

結果がXMLで得られたらあとはそれを解析するだけです。

ここまでくればお好みのスクリプトで調理してあげればよいです。この例ではxml2を使っており、事前にsudo apt install xml2しておく必要があります。

あとはtmp.xmlを見ればなんとなく分かるかと思いますが、/Result/DIDL-Lite/item/@id=がIDで/Result/DIDL-Lite/item/upnp:class=がファイルの種類です。

ダウンロードは先程のhttp://${host}:50001/DO${id}.${ext}となります。

PanasonicのカメラはAPIの仕様が公開されていないため苦労しましたが、先人のハックのおかげでここまでできるようになりました。 GH4やGH5とかでもたぶんいけるのではないでしょうか。

WiFiでのダウンロードよりもSDカードやUSBマスストレージを使う方が速いですが、お手軽にダウンロードスクリプトを走らせてしばらく放置しておけばよいので使える場面はあるかと思います。

Ubuntu 18.04.1 LTSでDTM - Carlaのインストール

今回はCarlaのインストールです。

Carla is a fully-featured audio plugin host, with support for many audio drivers and plugin formats.

CarlaはLV2やVST, LADSPA, DSSIプラグインのホストアプリです。 あと、SF2やSFZ, GIGといったサウンドフォント/サンプラーデータのファイルが扱えます。

個人的にはSF2やGIGは自分で作ることはありませんが、SFZは自分で編集したりします。 特にドラム音源についてはDrumGizmoやHydrogen、DrMrといった専用のものはあまり使わずにSFZ化して使うようになりました。

GUIの見た目はこんな感じです。(CLIもありますが。)

f:id:ohac:20180728133536p:plain

と、スクリーンショットを取ってみて気付きましたが、SF2やSFZが扱えない...。 これについては後述します。

LV2などのプラグインは普通に使えます。Add Pluginを押して、上部から検索して追加します。 以下はeqを検索した結果です。

f:id:ohac:20180728133813p:plain

さて、ビルドについてですが、まず以下のリポジトリをgit cloneします。

github.com

あとはmakeしてsudo make installするだけなのですが、/usr/localに自分でビルドしたffmpegがインストールされているため、うまくビルドできませんでした。

以下のようにパッチをあててビルドが通るようになりましたが、あとでffmpeg側のビルド方法を変更して対処できることが分かりました。 一応メモしておきます。

Carla$ git diff
diff --git a/source/Makefile.mk b/source/Makefile.mk
index d24e8c13..c6ec9e12 100644
--- a/source/Makefile.mk
+++ b/source/Makefile.mk
@@ -209,7 +209,7 @@ HAVE_PULSEAUDIO   = $(shell pkg-config --exists libpulse-simple && echo true)
 endif
 endif
 
-HAVE_FFMPEG       = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
+#HAVE_FFMPEG       = $(shell pkg-config --exists libavcodec libavformat libavutil && echo true)
 HAVE_FLUIDSYNTH   = $(shell pkg-config --exists fluidsynth && echo true)
 HAVE_LIBLO        = $(shell pkg-config --exists liblo && echo true)
 HAVE_LINUXSAMPLER = $(shell pkg-config --atleast-version=1.0.0.svn41 linuxsampler && echo true)

ffmpeg側は以下のようにビルドすることで上記パッチは不要となります。

ffmpeg$ ./configure --enable-libjack --enable-shared --enable-pic --enable-libx264 --enable-gpl

make, sudo make install後、Carla側をmake cleanしてやりなおせばOKです。

で動かしてみたところ、VSTやLV2などはちゃんと動くのですが、先程も書いたようにSF2/SFZ/GIGが動きません。

調べてみたところ、外部ライブラリが必要だということが分かりました。

まずSF2についてはfluidsynthが必要となります。 以下のようにインストール。

sudo apt install libfluidsynth-dev fluidsynth

make featuresを実行すればどれが有効になっているか分かります。

make features

ビルドしなおして、CarlaのGUICLIでFluidR3_GM.sf2を読み込んでみます。

carla-single sf2 /usr/share/sounds/sf2/FluidR3_GM.sf2 

問題なければJACK側に表示されます。

次にSFZ/GIGですが、linuxsamplerをインストールする必要があります。

The Linux Sampler Project

linuxsamplerのライセンスはちょっと変わっているので、aptではインストールできません。 ここでは時前でビルドしてみました。

ビルドするにはbisonが必要なので以下のようにしてインストールします。

sudo apt install bison

サイトから以下の3つのtarボールをダウンロードします。

  • libgig-4.1.0.tar.bz2
  • liblscp-0.5.8.tar.gz
  • linuxsampler-2.1.0.tar.bz2

libgig, liblscp, linuxsamplerの順に以下を実行しインストールする。

./configure
make -j8
sudo make install

Carlaをビルドしなおして、CarlaのGUICLIで何かSFZやGIGを読み込んでみます。

SFZのサンプルとして自作音源を紹介しておきます。

https://sound.sighash.info/

SFZでインターネットを検索すると他にもたくさん音源がヒットすると思います。 多すぎるため、品質のよいものを探すのに苦労しますが。

SFZはどこかのKONTAKなんちゃらと違ってオープンなフォーマットなので、生データがあれば自作することが可能です。 個人的にはDrumDropsのデータを購入してSFZ化してドラム音源として使っています。

www.drumdrops.com

あとSF2はaptからいくつかインストールできるようです。 どんな音源なのか聴いていませんが、ためしにインストールしておくとよいかもしれません。

sudo apt install timgm6mb-soundfont opl3-soundfont fluid-soundfont-gs musescore-general-soundfont

Ubuntu 18.04.1 LTSでDTM - Cadenceのインストール

やっとlinux kernel 4.15.0-29-lowlatencyがちゃんと動作するようになりました。 電源ボタンからのスリープと復帰も動作しています。 メニューからスリープする方法はよく分かりませんが。

タスクバーみたいなところにownCloud、CPUモード切り替え、Cadenceのアイコンもちゃんと表示されています。 これで4.4.0-131-lowlatencyとおさらばできそうです。

さて、今回はCadenceをインストールしましたので、そのメモです。

Cadenceはこんなソフトです。

f:id:ohac:20180728111130p:plain

qjackctlよりも分かりやすくなっており、以下のような追加機能があります。

  • CPUの動作モードの状態表示と切り替え
  • LADISHとの連携(私は最近は使っていません。)
  • JACKブリッジの操作

JACK以外のオーディオシステムとの連携はALSA(ループバックデバイス)かPulse Audioが選択できます。 ただし、ALSAしか使えないアプリは減ってきていますし設定も難しいので、Pulse Audioを使うのがよいかと思います。

ALSA MIDIとの連携は非常に重宝します。 JACKはMIDIも扱えるのですが、対応されていないアプリがたくさんあるため、これがないときついです。

f:id:ohac:20180728124811p:plain

Export HW...のボタンを押すと以下のようなダイアログボックスが表示されます。

f:id:ohac:20180728124816p:plain

そのあとStartを押すと連携されます。

あと、Toolsのタブからいろいろなツールを起動できます。

f:id:ohac:20180728111154p:plain

普通にビルドしてインストールするとCatiaというツールもインストールされます。

f:id:ohac:20180728125049p:plain

Buffer Sizeが動的に切り替えられるのは重宝します。 リアルタイム録音しないときはBuffer Sizeを大き目にしておくと音飛び(Xruns)が発生しにくくなります。

Meter In/Outは入出力をモニターできるので便利です。

f:id:ohac:20180728125451p:plain

XY ControlはバーチャルMIDIキーボードと汎用XYコントローラです。

f:id:ohac:20180728125741p:plain

ビルド・実行には以下の追加パッケージが必要でした。 これら以外にも必要ですが、これまでの記事の中でいろいろとインストール済みなので詳しくは調べていません。

sudo apt install \
  libqt4-dev qt4-dev-tools python-qt4-dev python3-pyqt4 pyqt4-dev-tools \
  python3-pyqt5 pyqt5-dev-tools python3-qtpy python3-dbus.mainloop.pyqt5 \
  cpufreqd indicator-cpufreq

あとは本家からgit cloneしてきてmakeして、sudo make installするだけだったと思います。

github.com

Ubuntu 18.04 LTSでDTM - ffmpegでデスクトップのキャプチャとQsynthなど

ffmpegでデスクトップのキャプチャができたので、その手順メモです。

以下のようなコマンドでx11grabから画面をキャプチャできます。 長いのでスクリプトにしています。

#!/bin/bash
/usr/local/bin/ffmpeg \
-vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi \
-filter_threads 3 \
-thread_queue_size 128 \
-video_size 1920x1080 \
-f x11grab -i :0.0+0,54 \
-thread_queue_size 512 \
-itsoffset 0.25 \
-f jack -i ffmpeg \
-framerate 60 -r 10 -vf 'format=nv12|vaapi,hwupload' \
-c:v h264_vaapi \
-acodec pcm_f32le \
-y ram/out.mkv

前回のやつから変わったのは-video_sizeの位置とサイズ、 -f x11grabとDISPLAYの0.0とそのオフセット(+0,54)。 あと、-itsoffsetのずれ具合です。

WebCamからの動画も撮りたい場合は手抜きですが、 以下のようなコマンドで画面に表示したものをキャプチャすればよいです。

/usr/local/bin/ffmpeg -f v4l2 -i /dev/video1 -pix_fmt yuv420p -f xv display

できあがったram/out.mkvはそのままでは色々と不都合があるらしく、 vlcで表示するとうまくいきませんでした。ffplayで見ると問題ないです。

以下のコマンドでmp4に変換すればvlcでも問題なく扱えるようになり、 TwitterYouTubeへの投稿も可能になります。

/usr/bin/ffmpeg -i ram/out.mkv -vcodec libx264 -pix_fmt yuv420p -strict -2 -acodec aac $(date +%Y-%m-%d_%H-%M-%S).mp4

せっかくなのでLinuxでの音楽制作に関する動画を作成してみました。 音源はGMサウンドフォントを使用し、Qsynthでエフェクター付きで鳴らしてみました。 MIDI入力はVirtual MIDI Piano Keyboard(vmpk)を使いました。

インストールはこんな感じ。

sudo apt install vmpk qsynth

vmpkは普通のキーボードで演奏することもできます。 ベロシティがなく2オクターブしかないので、確認・打ち込み用ですが、 MIDIキーボードがなくても試せるので便利です。

youtu.be

Ubuntu 18.04 LTSのセットアップ8 - ffmpegとJACKで動画撮影

インストール後のメモその8です。 (もはやインストールと関係ないという話もありますが。)

ffmpegでJACKからオーディオ入力して動画を撮りたかったので、いろいろ試しました。

まず、ffmpegのJACK対応版をビルドします。

./configure --enable-libjack
make -j8
make install

次にffmpegwebcamの入力確認。video1は外部USBに接続したカメラです。

ffmpeg -f v4l2 -i /dev/video1 -pix_fmt yuv420p -f xv display

そしてJACKを使ったキャプチャと変換。 試行錯誤した結果、以下のようになりました。

ffmpeg \
-vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi \
-filter_threads 3 \
-thread_queue_size 128 \
-f v4l2 -i /dev/video1 \
-thread_queue_size 128 \
-itsoffset 1.95 \
-f jack -i ffmpeg \
-video_size vga -framerate 60 -r 10 -vf 'format=nv12|vaapi,hwupload' \
-c:v h264_vaapi \
-acodec pcm_f32le \
-y ram/out.mkv

解説

  • VAAPIを使うためのオプション
  • スレッド数を指定
    • HTをOFFにしたため、デフォルトの8コアではなく、4コアのうちの3つだけ使うイメージで。
  • thread_queue_size は数を増やせとの警告が出ていたので適当に増やした。
  • itsoffsetは動画と音声がずれていたので調整した。
  • ramはtmpfsでマウントしたディレクト

だいたいこんな感じです。

CPUはパフォーマンスモードにして、HTをOFFにします。

sudo cpufreq-set -g performance
sudo sh -c 'echo 0 > /sys/devices/system/cpu/cpu4/online'
sudo sh -c 'echo 0 > /sys/devices/system/cpu/cpu5/online'
sudo sh -c 'echo 0 > /sys/devices/system/cpu/cpu6/online'
sudo sh -c 'echo 0 > /sys/devices/system/cpu/cpu7/online'
cat /sys/devices/system/cpu/cpu?/online

RAMディスクもマウントしておきます。

sudo mount -t tmpfs tmpfs ram

あとはギターを録音するためにcalf-pluginsをインストール。 calfjackhostで実行。

sudo apt install calf-plugins
calfjackhost &

こんな画面が表示される。

f:id:ohac:20180701221507p:plain

ギターのノイズを目立たなくするためのEQを選択。 あと耳障りな周波数帯を押さえたりもしておく。

f:id:ohac:20180701222714p:plain

f:id:ohac:20180701222937p:plain

メトロノームとミキサーをインストールして立ち上げ。

sudo apt install gtklick jackmixer
gtklick &
jack_mixer &

f:id:ohac:20180701223018p:plain

f:id:ohac:20180701223031p:plain

あとはJACKで適切につなぎあわせて、いざ録画。

最後に動画編集のPiTiViをインストール。

sudo apt install pitivi
pitivi

編集してmkv形式でレンダリングすればYouTubeにアップロードできる。

Twitterに投稿する場合はffmpegで変換する必要があった。 PiTiViから直接生成する方法はよく分からなかった。

/usr/bin/ffmpeg -i input.mkv -vcodec libx264 -pix_fmt yuv420p -strict -2 -acodec aac output.mp4

下記の記事を参考にしました。ありがとうございます。

kivantium.hateblo.jp

/usr/binとしているのはffmpegのビルドオプションがちょっと足りてなかったようで、 Ubuntuの標準パッケージのものを使う必要があったため。

出来上がった動画はこんな感じです。 PiTiViで文字入れとクロスフェードを使ってみました。

www.youtube.com

Ubuntu 18.04 LTSのセットアップ7 - JACK優先度とCPU

インストール後のメモその7です。

audioグループへの参加。

$ groups
ohashi adm cdrom sudo dip plugdev lpadmin sambashare

audioがないことを確認。

$ sudo adduser $USER audio
ユーザー `ohashi' をグループ `audio' に追加しています...
ユーザ ohashi をグループ audio に追加
完了。

いったんログアウト。と思ったがアップデートがあったので再起動。

$ groups
ohashi adm cdrom sudo audio dip plugdev lpadmin sambashare

audioが追加された。

$ sudo vi /etc/security/limits.conf 

で以下を追加。

@audio          -       rtprio          99
@audio      -   memlock     unlimited
@audio      -   nice        -19

niceの行はよく分かってないけどググったら出てきたから一応入れてみた。

念のため、またログアウト・ログインする。一緒にやっておけばよかった。

qjackctlを立ち上げて、設定。

f:id:ohac:20180602125927p:plain

f:id:ohac:20180602130152p:plain

リアルタイムをチェック、レイテンシの許容度やPCの性能に合わせてバッファサイズ(フレームとピリオド数)を設定。プライオリティを最高の99に設定。

最後に開始を押して、音が出れば成功。

f:id:ohac:20180602125935p:plain

メトロノームでも鳴らしてみる。

$ jack_metro -b 60

systemにドラッグして接続。

f:id:ohac:20180602125940p:plain

CPUの動作周波数の設定ができるようにする。

$ sudo apt install cpufrequtils

現状こんな感じ。

$ cpufreq-info | head -13
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 900 MHz.

900 MHzで動作していて、省電力モードっぽい。 なお、linux kernelは事情があり4.4.0-122-lowlatencyを使用している。

governorsにはperformanceとpowersaveがあるので、performanceに切り替えてみる。

$ sudo cpufreq-set -g performance
$ cpufreq-info | head -13
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 800 MHz - 3.80 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 800 MHz and 3.80 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 3.65 GHz.
$ cpufreq-info | grep current.CPU
  current CPU frequency is 3.60 GHz.
  current CPU frequency is 3.61 GHz.
  current CPU frequency is 3.67 GHz.
  current CPU frequency is 3.64 GHz.
  current CPU frequency is 3.53 GHz.
  current CPU frequency is 3.56 GHz.
  current CPU frequency is 3.70 GHz.
  current CPU frequency is 3.70 GHz.

ちなみにHyper Threadingは切った方がよいらしい。(今は切ってない)

powersaveに戻してみる。

$ sudo cpufreq-set -g powersave
$ cpufreq-info | grep current.CPU
  current CPU frequency is 900 MHz.
  current CPU frequency is 1.24 GHz.
  current CPU frequency is 922 MHz.
  current CPU frequency is 1.02 GHz.
  current CPU frequency is 900 MHz.
  current CPU frequency is 900 MHz.
  current CPU frequency is 1.12 GHz.
  current CPU frequency is 900 MHz.

コマンドだと面倒くさいが、後でCadenceとCatiaをインストールするので、 そこからGUIで操作可能になる。同じくGUIでJACKのバッファサイズも動的に切り替えられる。

リスニングではバッファ多めのpowersaveで、制作時はバッファ少なめのperformanceでといった運用が可能に。

Ubuntu 18.04 LTSのセットアップ6 - ffmpeg

インストール後のメモその6です。

ffmpegをビルドする。

ohac.hatenablog.com

この頃はハードウェアでのエンコーディングを知らなかったが、 その後、VAAPIを使うとCPUパワーをほとんど使わずにH.264エンコーディングできるということを知った。

ということで以下からgit cloneする。

Download FFmpeg

ビルドに必要なパッケージは以下である程度揃うはず。

sudo apt build-dep ffmpeg

./configure を実行。hwaccelsがEnabledになっていることを確認。

Enabled hwaccels:
h263_vaapi         mpeg1_xvmc             vc1_vaapi
h264_vaapi         mpeg2_vaapi            vc1_vdpau
h264_vdpau         mpeg2_vdpau            vp8_vaapi
hevc_vaapi         mpeg2_xvmc             vp9_vaapi
hevc_vdpau         mpeg4_vaapi            wmv3_vaapi
mjpeg_vaapi        mpeg4_vdpau            wmv3_vdpau
mpeg1_vdpau

makeを実行。マルチコアなら-j8とか付けてもいい。

終わったら sudo make install し、/usr/local/binにインストール。

最後に動作確認。

$ which ffmpeg
/usr/local/bin/ffmpeg
$ ffmpeg -version|head -1
ffmpeg version 3.4.2-2 Copyright (c) 2000-2018 the FFmpeg developers
$ ffmpeg -hwaccels 2>/dev/null
Hardware acceleration methods:
vdpau
vaapi
cuvid

$ ffmpeg -encoders 2>/dev/null | grep vaapi
 V..... h264_vaapi           H.264/AVC (VAAPI) (codec h264)
 V..... hevc_vaapi           H.265/HEVC (VAAPI) (codec hevc)
 V..... mjpeg_vaapi          MJPEG (VAAPI) (codec mjpeg)
 V..... mpeg2_vaapi          MPEG-2 (VAAPI) (codec mpeg2video)
 V..... vp8_vaapi            VP8 (VAAPI) (codec vp8)
 V..... vp9_vaapi            VP9 (VAAPI) (codec vp9)
$ ffmpeg -decoders 2>/dev/null | grep cuvid
 V..... h264_cuvid           Nvidia CUVID H264 decoder (codec h264)
 V..... hevc_cuvid           Nvidia CUVID HEVC decoder (codec hevc)
 V..... mjpeg_cuvid          Nvidia CUVID MJPEG decoder (codec mjpeg)
 V..... mpeg1_cuvid          Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
 V..... mpeg2_cuvid          Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
 V..... mpeg4_cuvid          Nvidia CUVID MPEG4 decoder (codec mpeg4)
 V..... vc1_cuvid            Nvidia CUVID VC1 decoder (codec vc1)
 V..... vp8_cuvid            Nvidia CUVID VP8 decoder (codec vp8)
 V..... vp9_cuvid            Nvidia CUVID VP9 decoder (codec vp9)
$ ffmpeg -decoders 2>/dev/null | grep vdpau
 V....D h264_vdpau           H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration) (codec h264)
 V....D mpeg1video_vdpau     MPEG-1 video (VDPAU acceleration) (codec mpeg1video)
 V....D mpegvideo_vdpau      MPEG-1/2 video (VDPAU acceleration) (codec mpeg2video)
 V....D mpeg4_vdpau          MPEG-4 part 2 (VDPAU) (codec mpeg4)
 V....D vc1_vdpau            SMPTE VC-1 VDPAU (codec vc1)
 V....D wmv3_vdpau           Windows Media Video 9 VDPAU (codec wmv3)

webcamのキャプチャ確認。

$ man ffmpeg 2>/dev/null | grep video4
               ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
               ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
$ ffmpeg -f video4linux2 -i /dev/video0 /tmp/out.mpg

再生。vlcが最もCPU負荷が軽いようだ。

$ ffplay /tmp/out.mpg
$ ffmpeg -re -i /tmp/out.mpg -f xv display
$ vlc /tmp/out.mpg

ハードウェアアクセラレータを使ったエンコードを確認。

$ ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f video4linux2 -i /dev/video0 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -y /tmp/out.mkv

画面のキャプチャ例。

$ ffmpeg -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -f x11grab -i :0.0+100,100 -video_size vga -framerate 30 -vf 'format=nv12|vaapi,hwupload' -c:v h264_vaapi -y /tmp/out.mkv

VDPAUを有効にして再生したが、効果はいまいち。vlcが一番よさそう。

sudo apt install vdpauinfo libvdpau-va-gl1 vdpau-va-driver
VDPAU_DRIVER=va_gl vdpauinfo
VDPAU_DRIVER=va_gl ffmpeg -hwaccel vdpau -re -i /tmp/out.mkv -pix_fmt yuv420p -f xv display