動画管理。

 年が明けましたねぇ。と言いつつ、本番は春節のような気がする今日このごろ。

 昨年末ごろから香港映画なDVDを重複購入する事故が複数回起きてしまったので、personal collection softwareに手を出す。LinuxだとGCStarかTellicoだけど、AndroidにViewerがあるGCStarを導入した。これは外出先で確認できるのが目的だから。

www.gcstar.org

 入れた後に所有するBDやらDVDの情報を片っ端から突っ込む。全部で340本なり。うち248本、七割方(73%)が香港映画という尖った構成かつ九割がDVD。これはレンタル落ちを狙って集めているため。出物にBDがあれば買うけど、そもそも香港映画でBDになっているのが少ないという理由が大きい。VHSをそのままDVDにしました、BDはありませんっていうのが多いし。

 データ取得はGCStarのプラグインを更新して、IMDbから取得してた。と言っても監督名とか年しか取得してくれないから、時間とジャケットだけは手動で入れた。他は気が向いたらとか、鑑賞したら入れるつもり(まずやらない)。

 香港映画を入れ終わったところで(何せ間違えて重複購入するのはこいつらだし)、GCStar Viewer用にデータを書き出そうとして躓く。.gcsだと画像を含んでいないので、Androidに持っていくと画像が出ないし、Debian stretchのGCStar 1.7.1+repack-1だと.gczを作るところが動かず。仕方ないので、一旦.tar.gzで書き出して解凍、そいつらを再びpkzipで固めて拡張子を.gcsにしたらGCStarで読めた。

 大問題はDebian BusterでGCStarが削除されたことか。VAIO Pだとこいつもビルドですかねぇ。あとは録画も入れるかどうか。狂った量になるのは間違いないか。外れた理由は長期間更新が無かったためだけど、こんなフォークがある。

gitlab.com

紅皿の挙動に悩まされる。

 Windows 10でようやくDDSKK+skk-nicolaを導入も、紅皿の挙動に悩まされる。具体的に言えば、変換キー(<convert>)と無変換キー(<non-convert>)をEmacsから読めなくなるので、skk-nicolaのときだけ紅皿を切る必要がある。やまぶきRだと一時オフの機能があるものの、紅皿にはないので、終了するしかなくなる(再起動も面倒)。

(おまけに私は言語切り替えで繁体字中国語の入力でLIMEまで遣うから、さらにややこしい)

 なお、IMが直接入力で変換キーに機能を割り当ててると、やはりEmacsで変換キーを読めなくなるので、その部分を消す必要がある。

『願榮光歸香港』のJyutPingと逐語訳

 香港の『国歌』となってしまった『願榮光歸香港』(願榮光、香港に栄光あれ)にJyutPingと逐語訳をつけてみた。「『国歌』? 香港は特区でしょ」って作者……。これ狙って作ってるでしょ。歌詞自体は標準の文章語(這とか標準広東語では用いない)な上に古語の「榮光」という言葉を用いており、かなりレベルが高い。

 もちろん、香港の歌らしく発音は標準広東語。歌詞には当然のように英語版に日本語版(標準の歌詞は改善の余地あり)もある。

『願榮光歸香港』 曲:thomas dgx yhl 詞:t、一眾連登仔

何以 這土地 淚再流
Ho4ji5 ze2to2dei6 leoi6zoi3lau4
(何故に ここで 涙をまた流すのか)
何以 令眾人 亦憤恨
Ho4ji5 ling6zung3jan4 jik6fan5han6
(何が 人々を また憤らせるのか)
昂首 拒默沉 吶喊聲 響透
Ngong4sau2 keoi5mak6cam4 naap6haam3seng1 hoeng2tau3
(顔を上げ 沈黙を拒め 叫び声よ 響きとおれ)
盼自由 歸於 這裡
Paan3zi6jau4 gwai1jyu1 ze2leoi5
(願う自由を 返せ ここに)

何以 這恐懼 抹不走
Ho4ji5 ze2hung2geoi6 mut3bat1zau2
(何故に この恐怖から 逃げないのか)
何以 為信念 從沒退後
Ho4ji5 wai6seon3nim6 cung4mut6teoi3hau6
(何が 信念のために 退かないのか)
何解 血在流 但邁進聲 響透
Ho4gaai2 hyut3zoi6lau4 daan6maai6zeon3seng1 hoeng2tau3
(解らないか 血が流れても 進む声が 響きとおる)
建自由 光輝 香港
Gin3zi6jau4 gwong1fai1 Hoeng1gong2
(自由を建て 輝く 香港)

在 晚星 墜落 徬徨 午夜
Zoi6 maan5sing1 zeoi6lok6 pong4wong4 ng5je6
(夜空の星が堕ち 彷徨う 深夜に)
迷霧裡 最遠處 吹來 號角聲
Mai4mou6leoi5 zoi3jyun5cyu3 ceoi1loi4 hou6gok3seng1
(迷いの霧の 最も深いところから 吹かれる 角笛の音)
捍自由
Hon5zi6jau4
(守れ自由を)
來齊集這裡
Loi4cai4zaap6ze2leoi5
(集まれここに)
來全力抗對
Loi4cyun4lik6kong3deoi3
(全力で抵抗せよ)
勇氣 智慧 也 永不滅
Jung5hei3 zi3wai6 jaa5 wing5bat1mit6
(勇気も 知恵も また 永遠に不滅だ)

黎明來到 要光復 這香港
Lai4ming4loi4dou3 jiu3gwong1fuk6 ze2Hoeng1gong2
(夜明けが来た 光よ戻れ この香港に)
同行兒女 為正義 時代革命
Tung4hung4ji4neoi5 wai6zing3ji6 Si4doigaak3ming6
(子や娘とともに 正義のため 時代を変える)
祈求 民主 與自由 萬世都 不朽
Kei4kau4 man4zyu2 jyu5zi6jau4 maan6sai3dou1 bat1nau2
(祈る 民主と 自由が いつまでも 朽ちないことを)
我願 榮光 歸香港
Ngo5jyun6 wing4gwong1 gwai1Hoeng1gong2
(我は願う 栄光が 香港にあらんことを)

 「何解」の訳出に非常に苦心しましたさ。単純に訳すと「何故」という一語になってしまうけれど、その前に「何以(何を以て、何故)」が続くので、原義の「相手に理解や解釋を求める」、つまり「何か解るか」になる。結果、「解らないか 血が流れても 進む声が 響きとおる」となった次第。

 広東語の楽曲は韻を踏むのが特徴だけど、この曲は弱い。A1の「淚再流」(lau)とA2の「抹不走」(zau)程度かと。

「Ginzijau gwaijyu Hoenggong!」

FM-TOWNSでのRS-MIDI

 FM-TOWNSでRS-MIDIというと一般に外部クロック方式のものを指す。これはTOWNS-OSのMIDI-BIOSが外部クロックで割り込みするようになっているためである。

 外部クロック方式は別名同期通信と呼ばれ、平たく言えば25ピンのRS-232CでTxC1(ST1、24番ピン)とTxC2(ST2、15番ピン)、RxC(RT、17番ピン)を用いて通信する方法である。より具体的に言えば、TxC2に基準クロックを入れるとその1/16のボーレートでTxDからデータが送信され、RxCに基準クロックを入れるとその1/16のボーレートでRxDからデータを受信する、という使い方をする。なお、TxC1は機器の内部クロックがそのまま出ている。MIDIの通信速度は31.25 kbpsなので、31,250×16=500,000 [Hz]のクロックをTxC2とRxCに入れることになる。当然のことながら、PC/AT互換機のEIA-574の9ピン端子では同期通信機能が削除されているので外部クロック通信はできない。

 T-OSのMIDI-BIOSに対応したRS-MIDI I/Fには、ミュージカルプランのRS232C MIDI OUTアダプタとシステムサコムのSX-M232、下に追記した自作I/Fがある。このうち、ミュージカルプランのアダプターはMIDI OUTのみとなっている。SX-M232でMIDI INが機能するかは調べていない(T-OSのMIDI-BIOS上はINとOUT各1が用意されている)。

 また、MIDI機器のTO-HOST端子に接続する場合は、RS-232CのTxC2(ST2、15番ピン)とRxC(RT、17番ピン)に外部クロックが入るものを選ぶことになる。ヤマハCCJ-PC1NFが半分該当しており、T-OSのMIDI BIOSMIDI-OUTを使用できる(少なくともTG300以降の音源、TG100でいけるかは調べてない)。なお、MU50のマニュアルには「FM-TOWNS側のシステムの問題で、RS-232C 端子に接続したMIDIインターフェースを通しての入力はできません。」とあり、MIDI-INを使用できない。これはシステムの問題というよりも、単純にCCJ-PC1NFではRxC(RT、17番ピン)が接続されていないためと思われる。

 もちろん、今となってはCCJ-PC1NFは入手困難なので、ケーブルを自作することになる。この手のデータを示しているサイトとして、HOTARUIKA☆氏のサイトを紹介しておく。CCJ-PC1NFはCCJ-PC1に15番ピンの配線を加えたものであり、これに加えてPC側の15と17番ピンをつなげば良いと思われる。

hp.vector.co.jp

 一方、TOWNS-OSのMIDI-BIOS経由でMIDIを扱わないのであれば、PC-9800用のケーブルで接続する方法がある。ただ、この方法だとシーケンサーが奏、プレーヤーがCool!しかなくなってしまう。

www.asahi-net.or.jp www.vector.co.jp

 追記。T-OSで使用できる外部クロック方式のRS-232C MIDI I/F(MIDI-OUTのみ)の自作記事を見つけたのでリンクしておく。これの50ページから52ページを参照のこと。

books.google.co.jp

tsCaption

ARIB字幕パケットをmux/demuxするツールを探していたところ(まだFFmpeg 4.2の機能は試してない)、tsCaptionというツールを見つける。

my0nio.seesaa.net

……今までやろうとしていたことが全て解決してしまった。

Debian StretchからBusterへのアップグレード

 何かうまく行かないですねぇ。apt-get dist-updateをかけるとこんな感じ。

取得:5214 http://ftp.jp.debian.org/debian buster/main amd64 winff all 1.5.5-6 [16.4 kB] エラー:640 http://ftp.jp.debian.org/debian buster/main i386 gnome-themes-extra-data all 3.28-1 403 Forbidden エラー:641 http://ftp.jp.debian.org/debian buster/main i386 gnome-themes-standard all 3.28-1 403 Forbidden エラー:649 http://ftp.jp.debian.org/debian buster/main i386 gnome-accessibility-themes all 3.28-1 403 Forbidden エラー:1432 http://ftp.jp.debian.org/debian buster/main i386 gnome-tweak-tool all 3.30.2-1 403 Forbidden エラー:1433 http://ftp.jp.debian.org/debian buster/main i386 gnome-tweaks all 3.30.2-1 403 Forbidden 5,562 MB を 29分 40秒 で取得しました (3,123 kB/s) E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-themes-extra/gnome-themes-extra-data_3.28-1_all.deb の取得に失敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-themes-extra/gnome-themes-standard_3.28-1_all.deb の取得に失敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-themes-extra/gnome-themes-extra_3.28-1_amd64.deb の取得に失敗しま した 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-themes-extra/gnome-accessibility-themes_3.28-1_all.deb の取得に失 敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/a/attica-kf5/libkf5attica5_5.54.0-1_amd64.deb の取得に失敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-tweaks/gnome-tweak-tool_3.30.2-1_all.deb の取得に失敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/g/gnome-tweaks/gnome-tweaks_3.30.2-1_all.deb の取得に失敗しました 403 Forbidden E: http://ftp.jp.debian.org/debian/pool/main/k/kdeconnect/kdeconnect_1.3.3-2_amd64.deb の取得に失敗しました 403 Forbidden E: いくつかのアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

 しかたないのでStretchに戻しましたとさ。

カーネルまわりでinitramfs-toolsのエラー

 最近、Debian GNU/Linuxでapt-get dist-upgradeをかけると、「インストール済みの post-installation スクリプト はエラー終了ステータス 1 を返しました」と宣う。

 最初は

  • /var/lib/dpkg/info/linux-image-4.9.0-9-amd64.postinst
  • /var/lib/dpkg/info/linux-image-4.9.0-9-amd64.postrm
  • /var/lib/dpkg/info/linux-image-4.9.0-9-amd64.prerm

なりを消して

# dpkg --configure linux-image-4.9.0-9-amd64

をかけていたものの、カーネルまわりでinitramfs-toolsのエラーが出るのは基本ありえない。

 ちょっと調べたら、/bootが一杯になっていたという……。仕方ないので/bootの中の古いカーネルを消しましたとさ。

ARecX6でOneSeg24

 ARecX6というワンセグを6 ch分全録するハードウェアで遊んでいたり。公式サイトは閉鎖されたようで、普通の使い方をするのは難しくなっているよう。まあ、元々のファームウェアのまま録画データのvpp形式をts形式に変換(vpp2ts)して、適当なプレーヤーで再生することもできるけど、変換の時点で普通の使い方ではなし。

 こいつはOpenRD-BaseにSianoのワンセグチューナー(世代としてはNice)をUSB接続したハードウェア構成になっているので、任意のLinuxディストリビューションで扱うことができる(元々のファームウェアRedhat系だったらしい)。

 自分の例だとU-BootでHDDからDebianを動かして、firmware-sianoパッケージを入れてDVBデバイスとして動かしてやる。ただ、そのままだとDVB用のファームウェアがロードされてしまうので、/lib/firmware/isdbt_nova_12mhz_b0.inpを/lib/firmware/dvb_nova_12mhz_b0.inpにシンボリックリンクを張り、ISDB-T用のファームウェアがロードされるようにする。(この辺りは普通にDebian機にSiano Nova B/Niceなチューナーを入れるのと同じ)

 このようにしてDVBデバイスとして認識してしまえば、後は煮るなり焼くなり。dvbstreamとOneSeg24を入れればワンセグ全録サーバーの出来上がりである。

FFmpegで欠落フレームがある場合の音ズレ対策

 映像ソースがノイズだらけの放送波とか、バグ持ちな機器で撮影とかで、動画ファイルに欠落したフレームが存在する場合、フレームの枚数で時間を管理しているプログラムやコンテナにおいては、欠落したフレーム分の時間がないものとなってしまう。こうなると、FFmpegで-asyncなどで時間を同期しようとしても、動画側の時間がずれてしまっているので、盛大に音ズレが生じてしまう。

 したがって、元のデータの時間軸を維持した状態でフレームを補完することになる。FFmpegではフレームレートを指定する方法がいくつかあるものの、欠落フレームがある場合は、時間軸を維持するためにfpsフィルターやframerateフィルター、minterpolateフィルターで欠落したフレームを補完をしてやる必要がある。

 なお、-rオプションでフレームレートを指定する方法は実在するフレームの数を維持して、フレームの数の合計×フレームレートを時間にする結果になるので不適当である。時間軸が無視される。

 一番軽いのはfpsフィルター。こいつは指定したfpsよりも元データのフレームが多い場合はフレームを捨て、少ない場合は既存のフレームで補完する。逆に一番重いのはminterpolateフィルターで、フレームを予測して補完する。

 まあ、自分の場合は映画やらアニメーションは逆テレシネして24 fpsにしてしまうので、fpsフィルターで一旦30 fpsにして、そこからdecimateをかけてしまう。

% ffmpeg -i in.ts -vf  bwdif=0:-1:1,fps=30,decimate,removelogo=logo.png -acodec copy -async 100 -vcodec  -pix_fmt yuv420p -vcodec libx264 -tune film -x264opts "nal-hrd=vbr:aud:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=4/3:weightp=0:b-pyramid=strict:slices=4:bframes=3:keyint=24:vbv-maxrate=40000:vbv-bufsize=30000:ref=4:level=4.1" out.m2ts

 指定するfpsは、入力するファイルのfpsを維持して、ただ単純に欠落したフレームを補完するなら30000/1001(約29.97 fps)のようにする。一方で扱いやすい形にしたいのであれば整数の30にする(NTSC系統の30000/1001 fpsだとドロップフレームがあるし)。映画やらアニメーションは本来NTSCの24000/1001 fpsではなく、24.0 fpsであるので、逆テレシネ前の段階で30.0 fpsにしておけばdecimateフィルターが24.0 fpsにしてくれる。

 追記。Past duration 0.xxxxxx too largeというメッセージが出る場合は、fpsフィルターを別のものに変えてみる。自分のところではminterpolateフィルターではこのメッセージは消えず、framerateフィルターにすると消えた。 なお、decimateの後ろにfps=24とやってもメッセージは消えるものの、これでは元ソースに欠けがあると音ズレの原因になる。

FFmpegでのBDAV向けh.264の例

 備忘用メモ。音声までは再エンコードしない(動画に比べて容量が大したことがない)。音ズレするならdecimateしないで30pにするのも手か。

ソースが1920x1080 pxの場合

ffmpeg -i in.ts -vf bwdif=0:-1:1,decimate,removelogo=logo.png -acodec copy -async 1000 -pix_fmt yuv420p -vcodec libx264 -tune film -x264opts "nal-hrd=vbr:aud:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=1/1:weightp=0:b-pyramid=strict:slices=4:bframes=3:keyint=24:vbv-maxrate=40000:vbv-bufsize=30000:ref=4:level=4.1" out.m2ts

ソースが1440x1080 pxで画面アスペクト比が16:9の場合

ffmpeg -i in.ts -vf bwdif=0:-1:1,decimate,removelogo=logo.png -acodec copy -async 1000 -pix_fmt yuv420p -vcodec libx264 -tune film -x264opts "nal-hrd=vbr:aud:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=4/3:weightp=0:b-pyramid=strict:slices=4:bframes=3:keyint=24:vbv-maxrate=40000:vbv-bufsize=30000:ref=4:level=4.1" out.m2ts

ソースがSDの場合

 画面アスペクト比が16:9だとSARが32/27になり、最大refが6になる。

ffmpeg -i in.ts -vf bwdif=0:-1:1,decimate,removelogo=logo.png -acodec copy -async 1000 -pix_fmt yuv420p -vcodec libx264 -tune animation -x264opts "nal-hrd=vbr:aud:colorprim=bt709:transfer=bt709:colormatrix=bt709:sar=32/27:weightp=0:b-pyramid=strict:slices=4:bframes=3:keyint=24:vbv-maxrate=40000:vbv-bufsize=30000:ref=6:level=4.1" out.ts

DOSBOXを高解像度V-TEXTにする方法

 非常にマニアックな記事といえばその通り。

 DOSエミュレーターの中でDOSBOXは既設のディレクトリーをマウントできるなど、扱いやすい特徴があるものの、こいつを日本語環境にして、つまりDOS/V化して使うとなると、

  • DBCSベクター周りの実装に誤りがある
  • 日本語キーボード(106とか)に対応していない

という点で困ることになる(DOSBOXの開発部隊はゲームに関係しないところはとことんやらない主義)。まあ、日本だとNEC PC-9800シリーズと互換機が絶対的多数で、少数FMR/FM-TOWNSがあった程度で、IBM系の資産がある人はPS/55やJ-3100を使っていたとか、HP-95/100/200LX、InterTop、DOSモバを使っていた層が大部分であるのだけど。

 まず、DBCSベクターについては、DR DOS以外の互換DOS(例えばPTS-DOS)で共通する問題で、こいつはDISPV (Lepton氏、http://www.hmsoft.co.jp/lepton/software/dosv/dispv.htm)に付属するvesapat.exeを/jpオプション付きで起動することで回避できる。

 次に、日本語キーボードについては、Windows版ではパッチが当たったものがあるものの、*BSD/Linuxだと諦めて英語キーボードにするというのが現実的な解である。

単純にDOS/V

 話が逸れた。単純にDOSBOXをDOS/V化するだけであれば、フォントドライバーとディスプレイドライバー、言語切り替えソフトを用意してやれば良い。これらソフトウェアを挙げると、

が一般的なところであろう。フォントドライバーとしてはFONTX2 (Lepton氏、http://www.hmsoft.co.jp/lepton/software/dosv/fontx.htm)が一般的であるものの、autoexecで起動できる点から代わりとして軟式で公開されているFONTNX (https://www.nanshiki.co.jp/software/index.html?etcdos)を使用した。また、DISPVの代わりのディスプレイドライバーとしてはDspVV (Torry氏、https://www.vector.co.jp/soft/dos/hardware/se012544.html)がある。DISPVはグラフィックモードへ対応していないため、グラフィックモードを使用する場合はDspVV/DspSSを使うことになる。

 なお、通常のDOSを日本語化するのであれば、http://izumilib.web.fc2.com/drdos/docs/drinst.htmlを参照するとよい。

フォント入手先

 なお、この他にフォントが必要である。最低限必要なのは

  • ANK 8x16 dot
  • ANK 8x19 dot
  • 日本語16x16 dot

の3種類である。新たにX11用のbdfフォントを変換してもよいものの、入手元を下記する。(出水は自作、東雲などのX11用は以前変換したもの)

izumilib.web.fc2.com izumilib.web.fc2.com izumilib.web.fc2.com izumilib.web.fc2.com

また、平木敬太郎氏のサイトでもFONTX2形式のフォントを公開している。

hp.vector.co.jp

設定

 これらのフォントファイルを適当なディレクトリー(ここではc:\font)に置いた後、fontn.iniを作成する。下記は出水ゴシック16ドット(JIS2004版、izmg1604.fnt)とANKフォントを使用した例である。

[CODE]
[FONT] ; Install font file.
UNVHN16X.FNT
UNVHN19X.FNT
izmg1604.fx2

ここまで準備できれば、

C:\> c:\path\vesapat.exe /jp
C:\> c:\path\fontnx.exe /p=c:\font\
C:\> c:\path\dispva.exe /hs=on /fc=0
C:\> c:\path\chej vt // jpでもよい

とすることでVGA画面で日本語が表示できるようになる。必要に応じこの辺の内容をdosbox-0.74.confの[autoexec]の中に入れてやれば、起動時に自動的に日本語環境にすることができる。

高解像度V-TEXT化

 ここまでが前フリである(長かった……)。

 実はDOSBOXはディスプレイアダプターを変えられるようになっており、標準ではsvga_s3である。DISPVやDspSSのようなSVGA用のディスプレイドライバーで800x600 pxで使用する分にはこの設定のままでよいものの、DOSBOXで使用できるディスプレイアダプターに適合するディスプレイドライバーがあればSVGA以上の解像度を扱うことができる。

 S3に関してはLepton氏のDISPS3が存在するものの、確認したところうまく行かなかった。市販ソフトのDOS/Vスーパードライバーズ/DOS/Vスーパードライバーズ32の中にもS3用ドライバーがあるものの、所有していないので確認できていない。

 その他のディスプレイアダプターとしては、hercules, cga, tandy, pcjr, ega, vgaonly, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb, vesa_oldvbeがあり、この中でSVGA以上の解像度を提供するのはsvga_s3, svga_et3000, svga_et4000, svga_paradiseである。この中でフリーなディスプレイドライバーが存在するのはS3を除くとsvga_et4000である。

 ET4000にはChaN氏(http://elm-chan.org/)の作成したドライバーがあり、下記で入手できる。

www.vector.co.jp

こいつをディスプレイドライバー(DspVVの方がよい)の後にTSRとして起動してやることで大画面環境を得ることができる。

FFmpegビルドのメモ。

 FFmpegARIB字幕対応版を改めて導入したので、そのときのコマンド内容を備忘のためメモ。

 FFmpegARIB字幕対応版自体は下記に公開されており、gitか何かで拾ってくる。

github.com

 ビルドする前に必要なライブラリーを入れておく。まあ、BSDならports / pkgsrcで一回ffmpegのビルドしてみるとか(一回FreeBSDportsでビルドしているので、この辺はいい加減)、Debianならapt-get build-dep ffmpegあたりか。そして適当にビルドする。

% ./configure --enable-gpl --enable-nonfree --enable-libbluray --enable-libcodec2 --enable-libdc1394 --enable-libfreetype --enable-libmp3lame --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libspeex --enable-libass --enable-libtheora --enable-libtwolame --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid
% make
# make install

 configureのオプションは削れそうな気もしなくもない。

動画の煮るなり焼くなりのメモ

 相変わらず動画関係で苦労している今日この頃。ということで忘れがちなコマンドを備忘的にメモ。

動画ソフト全般的な話

 Debianの場合、non-freeなライセンスのものは含まない方針であるので、FFmpegのような動画関係のソフトウェアにはつらいものがある。よって、debian-multimediaなどの外部リポジトリーを導入したり、あるいは自分のところでビルドすることになる。

 大抵はFFmpegを自分でビルドするか? とか、一部作業をHandBrakeのような他のソフトでやる、果てはwineでWindowsなソフトを動かすということが迫られるわけで。

 あと、DebianだとFFmpegが一時期avconvになっていた関係で、コマンドラインの記述が現在と違うことが結構ある。最新版と書いてあっても十年前の情報ということすらあるので、確認しながら行うと良い。

字幕(ソフトサブ)関係

 字幕関係、特にARIB字幕はFFmpegの公式版ではできない(注: version 4.2で追加された)ので、以下の中のarib-ts2assでass形式にして抽出してからFFmpegか何かでsrtに変換するとよい。ただ、FFmpegでソフトサブを埋め込めるコンテナー形式が例えばmkvなど限られたり、mp4だとmov_textしか入らないので、外部運用するなど考えないとならず。

github.com

 arib-ts2assは出力ファイル名に制限があるようなので、ASCIIなファイル名にで出力するようにするとよい。

% arib-ts2ass in.ts -o mid.ass

 FFmpegでの字幕形式の変換はこんな感じ。

% ffmepg -i mid.ass -scodec srt out.srt

 ちなみに、FFmpegには次のARIB字幕対応版が存在している。(追記: FFmpeg 4.2にて、libarib25経由でARIB STD B25の字幕に対応した)

github.com

 追記: 別解として、wineでtsCaptionを用いてdemux/remuxする方法がある。

my0nio.seesaa.net

ロゴ消し

 FFmpegにはdelogoとremovelogoの二つのフィルターが用意されており、あらかじめロゴ画像が用意できるならremovelogoを用いる。delogoはロゴがある座標範囲で周りの色と合わせてぼかすもの。removelogoで綺麗に消えない場合はその後にunsharpフィルターをかけるか、あるいはdelogoの方が綺麗に消える場合がある。

removelogoで消す場合

 removelogoフィルター用の画像は元の動画と同じ大きさで、ロゴしか入っていない黒地のPNG画像が望ましい。

 ロゴ画像を手動で作成するなら、VLC辺りのプレーヤーでスナップショットを撮って画像処理ソフト(ペイントでもよい)で整える。ただ、地デジのような1440x1080 pxをアスペクト比16:9の1920x1080 pxに引き伸ばしている動画だとスナップショットが1920x1080 pxになるので、幅を縮小することになる。

% ffmpeg -i in.mp4 -vf removelogo=logo.png (中略) out.mp4

 ロゴ画像をコマンドラインで作成する場合は、以下を参照するとよい。

nico-lab.net

delogoで消す場合

 一方、delogoの場合は次のようになる。

% ffmpeg -i in.mp4 -vf delogo=x=1322:y=954:w=46:h=66 (中略) out.mp4

ここでx=1322とy=954はロゴの左上座標が左から1322 px、上から954 pxであることを、w=46とh=66はロゴの幅が41 px、高さが66 pxであることを示している。ロゴ座標を簡単に調べる方法としては、comskipをかけたときにできるlogo.txtを参照するのが手っ取り早い。

Crop

 FFmpegでの動画の画面範囲の切り抜きはcropを用いる。例えば元動画が1920x1080 pxで4:3な動画がピラーボックスになっている場合は、左右両側を240 px取り除いて真ん中の1440x1080 pxを切り抜く形になるので、こんな感じになる。

% ffmpeg -i in.mp4 -vf crop=1440:1080:240:0 (中略) out.mp4

ここで1440:1080は切り抜く動画の大きさで、240:0は左端から240 px、上から0 pxであることを示している。地デジな1440x1080 pxでピラーボックスの場合だと、1880x1880 pxを切り抜くことになるので、crop=1880:1880:180:0となる。これだと画素が正方でないので、正方にするなら、-aspect 4:3 -s 1440x1080で1440幅に引き伸ばしてやることになる。

 また、SD放送の720x480 pxだと、同様に540x480を切り抜く形となりcrop=540:480:90:0、さらに画素を正方にする場合は-aspect 4:3 -s 640x480と幅方向に引き伸ばすことになる。

動画のアスペクト比の変更

 FFmpegだと、-aspect 16:9なりで指定する。通常は-s 1920x1080のように画面の大きさも同時に指定してやると良い。

CMカット

 comskipを用いる。前回書いているので省略。

yu-izumi.hatenablog.com

動画周りこもごも。

 録画環境を作ってしまうと、恐ろしい勢いでディスクを消費してしまう。8 TBなハードディスク何台買ったっけ……。

 ちなみに、px4_drvでPX-Q3U4は問題なく認識。しっかし、熱に弱いのは確かで、ケースばらして運用してたり。

 録画データの後処理としてComskipを入れてみたり。UNIX系OSへのComskipの移植はいくつかあるけれど、ffmpegとの兼ね合いからErikkashoek版を使用した。

github.com

 ただ、こいつ単体だと扱い辛いので、Nagata氏のラッパースクリプトを今のffmpegに合わせて修正して使用した。まあ、変更点なんてconcat周りとかパイプ周りとかなので、知識があれば対した内容でないので省略。

github.com

 こんな風にCMカットは省力化したものの、まあ、精度が低いのは確かなので、ファイルの大きさを見て、可否を判断している感じであったりする。

 問題と言えば、ffmpegARIB字幕の書き出しに対応していないので、字幕が吹っ飛ぶことか。ロゴ消しはできても、ねぇ。

DPT-S1を買ってしまった。

 あははは。

 発売当初に香港の店頭で買いかけたBOOX NOTEと同じくらいの値段(在庫なかったので買えなかったけど)だけど、画面がA4相当というのが最大の理由。大きいのは正義。

 10インチなタブレットならあるし、似た大きさのe-inkならPocketBook Pro903があるしで、振り返ればBOOX NOTEはいらなかったのでした……。

 ただ、ファイル形式がPDFしか扱えないので、論文やら規格のデータはともかくとして、CBZ/CBRやらテキストファイルの扱いは考えどころ。せめてテキストファイルくらいはと思わずにいられない。

 そこでCBZ/CBRからpdfへの変換はこんな感じでやった。この例はCBZで内部がjpgなものの場合。

$ for f in *.cbz ; do mkdir .cbzconv ;cd .cbzconv ; unar ../"$f" ; mv ./*/* .; mogrify -format pdf *.jpg ; pdftk *.pdf output ../"${f%*.cbz}.pdf" ; cd ../; rm -rf .cbzconv; done

 説明しておくと、unarはzipの文字化け対策、その次の移動はdebianのunarの-no-directoryオプションがまともに働かないために行っている。また、ImageMagicでのpdfへの変換はconvertで一気に単一ファイルにしてしまうと、オンメモリーでやろうとして恐ろしい量のメモリーを消費するので、mogrifyで画像をそれぞれpdfにしてからpdftkで結合している。

 さすがに回転とか解像度合わせとかをやりだすと大変なので、アーカイブ形式を変えるだけ。