created: 2023-09-01T05:08:04.486Z
ffmpeg で Too many packets buffered for output
録画サーバでのエンコードが失敗するようになってしまったのでトラブルシューティング
このときに作った録画サーバのその後。
- 2022年度版 RaspberryPi4で録画サーバ(Mirakurun/EPGStation)を動かす
- [2022年度版][Mirakurun + EPGStation] Raspberry Pi で mp4 のエンコードにハードウェアアクセラレータを使うまで
経緯
あるとき、ffmpeg でこのようなエラーが出て ts ファイルが mp4 に encode できなくなってしまった。
Too many packets buffered for output stream 0:2.577014:32:22.77 bitrate= -0.0kbits/s speed=N/A
「字幕のストリームが悪さをしているよ」というissueを何個か見かけたので、字幕を無視するようにオプションをいろいろいじってみたが、エラーメッセージが変わったりするが好転しない。
Cannot determine format of input stream 0:0 after EOF
これまでも、録画する番組の前の番組のストリームが原因で encode に失敗することがあったので、そういうのを疑っていたのだが、原因は違った。
原因
どうやら、ICカードリーダが抜けてしまっていて、それで ts ファイルがきちんとつくれなくなっていたようだ。まさかのデバイス由来。
接続デバイスを確認したら、カードリーダがリストされない。
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 0781:5583 SanDisk Corp. Ultra Fit
Bus 001 Device 003: ID 3275:0080 VidzMedia Pte Ltd PX-S1UD Digital TV Tuner
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
PX-S1UD Digital TV Tuner
というのは地上波デジタルチューナーのほうで、こちらは刺さっているのだが、カードリーダのほうだけなにかのはずみで外れてしまったようだ。
差し直したところきちんと認識された。
$ sudo pcsc_scan
Using reader plug'n play mechanism
...
Scanning present readers... Japanese Chijou Digital B-CAS Card (pay TV)
$ lsusb | grep Card
Bus 001 Device 007: ID 04e6:5116 SCM Microsystems, Inc. SCR331-LC1 / SCR3310 SmartCard Reader