2021-01-30

FFplay disappears when loosing focus

デュアルディスプレイ環境で、片方にffplayで動画を再生しもう一方で作業しようとすると、ffplayがフォーカスを失ったときにウィンドウが消えるという問題に遭遇した。

この原因は、SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSSというヒントが設定されているためで、これを無効にすればよい。

以下のようにffplay.cに1行加えることで、問題を解決できた。

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 9ff0425163..2e3d7a18cc 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -3755,6 +3755,7 @@ int main(int argc, char **argv)
             flags |= SDL_WINDOW_RESIZABLE;
         window = SDL_CreateWindow(program_name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, default_width, default_height, flags);
         SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
+        SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, "0");
         if (window) {
             renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
             if (!renderer) {

2020-12-22

動画ファイルのキーフレーム間隔を調べる方法

Stackoveflowのこの記事で、動画ファイル中のキーフレームの時刻を表示するサンプルが示されていた。 これを参考に、キーフレーム間隔を調べる方法をメモする。

入力ファイルをinput.mp4とすると、FFprobeとawkを使って以下のコマンドにより、キーフレーム間隔を調べることができる。

ffprobe -loglevel error -select_streams v:0 -show_entries packet=pts_time,flags -of csv=print_section=0 input.mp4 | awk -F',' '/K/ {print $1-prev; prev=$1}' | sort | uniq -c
出力は、間隔でソートし、それぞれの出現回数をuniqのオプション-cで表示する。

2020-12-15

Git-grepで特定のファイル名のファイルを除いて検索する方法

Git-grepを使うとレポジトリに登録されているファイルの中でgrepを行うことができる。 このとき、特定のファイルを除いて検索することができる。

例えば、拡張子が.iniのファイルを除いてScreenshotを探す場合、

$ git grep Screenshot UI ':!*.ini'
と、:!に続いて除外するファイル名を書く。

2020-12-10

CentOS8でグラフィカルログインを有効にする

手順

gdmをインストールして、getty@tty1を無効に設定すれば良い。
$ sudo dnf install gdm
$ systemctl set-default graphical.target

メモ

gdmをインストールするだけでは、gdmが有効になっているにも関わらず、gdmが起動しなかった。

2020-11-28

SSH経由で遠隔のホストからPulseAudioの音を出す方法

TigerVNC viewerはオプション-viaを使用することで簡単にSSH経由で遠隔のVNCサーバーへ接続することができる。 残念なことに、VNCのプロトコルには音声を転送するプロトコルが定義されていないので、たいていのVNCサーバー・クライアントでは音声を送ることが出来ない。

このページでは、サーバー上で、vncserverを使用して起動したVNCのセッション内で音声を再生するアプリケーションを起動し、遠隔のクライアントでその音声を聴く方法を説明する。

クライアント側の設定

pactl load-module module-native-protocol-tcp 'auth-ip-acl=127.0.0.1'
もしauth-ip-aclに複数のホスト・ネットワークを設定したい場合、;で区切って記載する。

サーバー側の設定

環境変数PULSE_SERVERを以下のように設定する。
export PULSE_SERVER=tcp:127.0.0.1:4715
ポート番号4715の部分は、後述のトンネリングの設定とあわせておけば何でも良い。 この設定をした上で、PulseAudioを使用するアプリケーションを起動する。

SSHトンネリングの設定

クライアント側から、以下のようにトンネルを掘る。
ssh -NfR 4715:127.0.0.1:4713 server.example.net

制限事項

サーバー側で環境変数が設定されたアプリケーションの音声しか送ることが出来ないため、既に起動しているアプリケーションの音声は送ることが出来ない。 従って、例えばx11vncと併用する使用方法には適していない。 既に起動している (ローカルの) デスクトップの音声を送る場合、以下のページが参考になる。

2020-11-24

Vimから:makeでビルドする際に別のディレクトリに移動する方法

Vimには、ビルドするコマンド:makeが備わっており、統合開発環境 (IDE) のように使用することができる。 Vimから抜けずにビルドできるだけでなく、GCCのエラーメッセージが出た行へ自動でジャンプしてくれる。

最近はビルドをビルド専用のディレクトリで行うことが推奨されているが、Vimでの設定方法を説明する。

手順

Autoconf, automakeを使用する場合を例に説明する。
  1. ビルドディレクトリを作成する。
    mkdir build
  2. Makefileを作成する。
    cd build
    ../configure
  3. 下のディレクトリに移動する。
    cd ..
  4. Vimでソースファイルを開く。(Vimだけを開いても良い)
    vim src/main.c
  5. Vim内で、makeprgを設定する。
    :let &makeprg='cd build && make'
  6. Vim内でビルドを開始する。
    :make
    このとき、-jなどのオプションを付けることもできる。

デバッグ

エラー・ワーニングが出た場合は、最初のエラーの行にジャンプする。 メッセージ間を移動する場合、:cn:cpを使用する。

2020-11-03

SSHを通して遠隔にあるLinuxマシンのデスクトップ音声を聴く方法

はじめに

SSHでログインできるLinuxマシンのデスクトップ音声を聴く方法を説明する。 X11VNCを使うとデスクトップを操作することが可能だ。しかしながら、VNCには音声を転送する機能が付いていない。このようなとき、音声を圧縮してSSH経由で送ることで、やや遅延があるが、音声を一緒に聴くことができるようになる。

環境

接続先は、Pulse Audioが動いており、オーディオデバイスが接続されていることが必要である。 以下の手順は、遠隔ホストとしてScientific Linux 7を使用した。

手順

  1. まず、出力デバイスのモニターを確認する。最後に.monitorと名前が着いているものが出力デバイスのモニター (出力中の音を入力できる) である。
    $ LANG=C pactl list sources | grep Name
  2. 予め、無音の音声を再生しておく。
    $ ffplay -loglevel error -vn -nodisp -f s16le /dev/zero &
  3. SSHで接続した先でffmpegによりモニターをmp3に変換し、ローカルへパイプして、ffplayで再生する。
    $ input=alsa_output.usb-Burr-Brown_from_TI_USB_Audio_CODEC-00.analog-stereo.monitor # 上記で取得したモニターの名前
    $ ssh user@example.com ffmpeg -fflags nobuffer -flags low_delay -loglevel error -f pulse -ac 2 -i ${input} -c:a aac -f flv - | ffplay -fflags nobuffer -flags low_delay -nodisp -loglevel error -f flv -
ここで重要なのは、ffmpegとffplayそれぞれに-fflags nobuffer -flags low_delayを付けることだ。これらのオプションがなくても機能するが、段々と音声のバッファリングが増え、徐々に遅れが目立ち始める。