詳細な分割設定ができる Segment


segment muxer とは時間やフレーム数指定でストリームを分割する。出力ファイル名には image2 muxer と同じように連番出力や、strftime オプションを使って日時設定もできる。正確にストリームを分割するにはキーフレームを分割毎の先頭に挿入しなければならない。キーフレームが先頭に来ないとキーフレームが来るまで映像が乱れる原因になる。hls muxer のオプションと併用することで詳細に分割設定ができる

ffmpeg で Apple HTTP Live Streaming(HLS)を扱う
ffmpeg で指定秒ごとに分割する方法

基本コマンド

60秒ごとに .mp4 で分割して out.csv で分割データを記載したファイルも出力する
ffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_time 60 -segment_list out.csv out%03d.mp4

時間でキーフレームを指定しセグメントを分割して、キーフレーム時間を丸める
ffmpeg -i input.mp4 -force_key_frames 1,2,3,5,8,13,21 -map 0 -c:v libx264 -c:a aac -f segment -segment_time 60 -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 -segment_list out.csv out%03d.mp4

公式ドキュメント:FFmpeg Formats Documentation : segment, stream_segment, ssegment

オプション

  • increment_tc [boolean]
    各セグメント間のタイムコードを増やす
    既定値:0
  • reference_stream [string]
    どのストリームを参照するか
    既定値:auto
  • segment_format [string]
    セグメントのコンテナフォーマット指定
    既定値:出力コンテナフォーマットと同じ
  • segment_format_options [string]
  • segment_list name[string]
    出力されるセグメントリストのファイル名の指定
    既定値:出力しない[string]
  • segment_list_flags [flags]
    • cache
      キャッシュを許可。M3U8 リストだけに反映(既定値)
    • live
      HLS 配信に有効
  • segment_list_size [int]
    リストに記載されるセグメント数。0 はすべて
    範囲:0 – INT_MAX
  • segment_list_entry_prefix [string]
    リストの各セグメントに URL を付与する。各セグメントに絶対パスを指定するときに使う
    既定値:なし
  • segment_list_type [int]
    セグメントリストのファイル形式の指定
    • -1, flat
      普通のテキスト形式。既定値
    • 0, csv
    • 1, ext
    • 2, ffconcat
    • 3, m3u8
    • 4, hls
  • segment_time [string]
    各セグメントの秒指定。キーフレームでないと指定した時間通りに分割されない。Apple の推奨値は 10。映像のキーフレーム間隔を考慮する
    既定値:2
  • segment_atclocktime [boolean]
    1 で 00:00 開始の時計の時間通りに分割する。segment_time で分割時間を指定する
    既定値:0
  • segment_clocktime_offset [duration]
    segment_atclocktime を使ったときに分割時間を遅延させる。例えば -segment_time 900 -segment_clocktime_offset 300 を併用すると 600秒、1500秒、2400秒と900秒毎に分割される
    既定値:0
  • segment_clocktime_wrap_duration [duration]
    既定値:INT64_MAX
  • segment_time_delta [duration]
    各セグメントの開始時間を決める時間(PTS)を特定する
    既定値:0
  • segment_times [string]
    , で区切って分割時間を指定する。3分より長いストリームを用いて 60,120,180 を指定すると、60, 60, 60, 残り時間全部で分割される
    既定値:0
  • segment_frames [string]
    , で区切って分割フレーム数を指定する。segment_times と同様に分割タイミングが来たときにキーフレームが来ていなければ次のキーフレームで分割する
    既定値:0
  • segment_wrap [int]
    セグメント数の上限を指定する。上限に達すると最初のセグメントから上書きするので容量の削減になる
    範囲:0 – INT_MAX
    既定値:0
  • segment_start_number [int]
    セグメントの開始番号。開始番号を変更するのであり、映像の開始をずらすのではない
    範囲:0 – I64_MAX
    既定値:0
  • strftime [boolean]
    各セグメント名に strftime を使う。1 にしたときは必ずセグメント名に strftime の書式を用いなければならない
    既定値:0
  • break_non_keyframes [boolean]
    1 にしたときにセグメントの開始にキーフレーム以外も含める。特定のプレイヤーで挙動がよくなるかもしれないが一般的にはよくならない
    既定値:0
  • reset_timestamps [boolean]
    タイムスタンプをリセットして各セグメントのタイムスタンプが 0 になる。hls など分割を前提に読み込む以外はリセットした方が分割後のファイルが扱いやすい
    既定値:0
  • initial_offset [duration]
    タイムスタンプのオフセット秒指定
    既定値:0
  • write_empty_segments [boolean]
    各セグメントで空データが出力された場合にそのまま出力するか
    既定値:0

コメントを残す

メールアドレスが公開されることはありません。