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へ続く