mp4の動画をBDレコーダーで再生する(その1:ffmpeg)

mp4の動画をdigaで見れるようにBDに焼いてみたのですが、なかなか旨くいきません。
ffmpegでmp4(h.264の動画とaacの音声)からm2tsへ変換すると、何故か音声が

% ffprobe -hide_banner test.mp4
Input #0, mpegts, from 'test.mp4'
  Duration: XX:XX:XX.XX, start: 1.483333, bitrate: 2132 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
  Stream #0:0[0x1011]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn
  Stream #0:1[0x1100](und): Audio: aac (LC) ([6][0][0][0] / 0x0006), 44100 Hz, stereo, fltp, 264 kb/s

と(und)になってしまいdigaから音が出ない。一旦、映像だけのファイルと音声だけのファイルに分けて、それらをffmpegで合成すれば(und)にはならずちゃんと音は出ますが、30分程度の動画でも最後のほうでは音声が数秒ずれてしまうので、分離せずに何とかできないものか。(und)のものはPMTを見てみると、

00000180  37 99 16 6d 47 41 00 10  00 02 b0 29 00 01 c1 00  |7..mGA.....)....|
                                     |ここからCRCまで PMT
00000190  00 f0 11 f0 0c 05 04 48  44 4d 56 88 04 0f ff fc  |.......HDMV.....|
           PCR_PID(1011) <------program information------- 
000001a0  fc 1b f0 11 f0 00 06 f1  00 f0 06 0a 04 75 6e 64  |.............und|
          -> <-1b(H.264)--> <---------06(字幕)------------
000001b0  00 aa 98 7c cc ff ff ff  ff ff ff ff ff ff ff ff  |...|............|
          -> <---CRC--->

ということで、stream IDが1b(H.264)、06(字幕)しかなく、0f(mpeg2 aac音声)が存在しない。ffmpegにいろいろ引数を追加してもうまく行かないので面倒になってperlで簡単なスクリプトを書いて無理やりPMTから06(字幕)を削除して0f(音声)を追加したらffprobeの表示からも(und)が消えて無事音ずれせずに鳴るようになりました。

書き換え後のPMTは以下の通り。

00000180  37 99 16 6d 47 41 00 10  00 02 b0 2c 00 01 c1 00  |7..mGA.....,....|
                                            ^^section長を修正(0x29->0x2c)
00000190  00 f0 11 f0 0c 05 04 48  44 4d 56 88 04 0f ff fc  |.......HDMV.....|
000001a0  fc 1b f0 11 f0 00 0f f1  00 f0 09 88 04 0f ff fd  |................|
                            <------0f(mpeg2 AAC 音声)-----
000001b0  fc 52 01 10 1d 13 2b ae  ff ff ff ff ff ff ff ff  |.R....+.........|
          ----------> <---CRC--->

その2へ続く