created: 2023-09-01T05:08:04.486Z

ffmpeg で Too many packets buffered for output

録画サーバでのエンコードが失敗するようになってしまったのでトラブルシューティング

このときに作った録画サーバのその後。

経緯

あるとき、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
すぐわかる代数
[ad] すぐわかる代数
石村 園子 (単行本)