Zenn
Open3

地デジ放送録画データのffmpegエンコード

yooooyoooo

ベストプラクティス(暫定)

ffmpeg -i input.m2ts \
-vf yadif=mode=1:parity=-1:deint=1 \
-c:v libx264 -preset slow -crf 23 \
-c:a aac -map 0:v:0 -map 0:a:0 \
output.mp4

上記コマンドがやっていること

  • インターレース解除
  • 映像コーデックをH.264に変換
  • 音声コーデックをAACに変換

可能であれば追加で実現したいこと

上記コマンドの処理の内容を欠かすことなく、以下を実現したい。

  • 字幕情報の維持
  • メタ情報の維持

使用している動画のストリーム情報

Input #0, mpegts, from 'input.m2ts':
  Duration: 00:05:05.85, start: 44758.894833, bitrate: 15499 kb/s
  Program 1032
    Metadata:
      service_name    : NHKE?F?l1?El5~
      service_provider:
  Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709, top first), 1440x1080 [SAR 4:3 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Side data:
      cpb: bitrate max/min/avg: 20000000/0/0 buffer size: 9781248 vbv_delay: N/A
  Stream #0:1[0x110]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 255 kb/s
  Stream #0:2[0x130]: Subtitle: arib_caption (Profile A) ([6][0][0][0] / 0x0006)
  Stream #0:3[0x138]: Data: bin_data ([6][0][0][0] / 0x0006)
  Stream #0:4[0x140]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:5[0x160]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:6[0x161]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:7[0x162]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:8[0x163]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:9[0x164]: Unknown: none ([13][0][0][0] / 0x000D)
  Stream #0:10[0x165]: Unknown: none ([13][0][0][0] / 0x000D)
  Program 1033
    Metadata:
      service_name    : NHKE?F?l2?El5~
      service_provider:
  Program 1034
    Metadata:
      service_name    : NHKE?F?l3?El5~
      service_provider:
  Program 1416
    Metadata:
      service_name    : NHK?7HBS?2
      service_provider:
  No Program
  Stream #0:11[0x12]: Data: epg

ファイルサイズ

  • 処理前: 565MB
  • 処理後: 161MB
yooooyoooo

arib_captionがmp4コンテナで対応していないので、mp4のまま字幕情報を維持するのはそもそも難しそう?

以下はffmpegでのarib字幕の扱い方についての引用。

FFmpeg 4.2 以降、TS 内に含まれる字幕は今まで bin_data として認識されていたのですが、これが arib_caption という字幕ストリームとして認識されるようになりました。ただし、その変更のおかげで、ARIB 字幕をエンコード先の TS にそのままコピーすることができなくなってしまいました。

FFmpeg に libaribb24 を組み込んでビルドすると ARIB 字幕をデコードして srt や ass などの他の形式に変換することができるようにはなりますが、それらの問題は変わらないようです。

https://github.com/EMWUI/EDCB_Material_WebUI/issues/17

arib字幕を外部のsrtファイルとかに出力する方法が一番丸い気がする。

libaribb24はこの辺り見ると導入のヒントになりそう?

yooooyoooo

メタ情報(放送局・番組情報)はいくら調べても手動で移植する話しか出てこないので、ffmpeg単体でコピーするのは厳しいのかもしれない...。

ログインするとコメントできます