出力フォーマットに segment muxer を使って指定秒ごとに分割する。ストリームコピーする場合は GOP の関係で正確な指定秒ごとに分割できない。さらにファイルサイズを指定(-fs)して分割は出来ない。ニコ生のタイムシフトの個人的なバックアップ(ニコ動に非公開で投稿する)にも使える。

詳細な分割設定ができる Segment
ffmpeg で Apple HTTP Live Streaming(HLS)を扱う

-segment_time で分割する秒を指定する。

ffmpeg -analyzeduration 30M -probesize 30M -i input -c copy -f segment -flags +global_header -segment_format_options movflags=+faststart -reset_timestamps 1 -segment_time 720 output%02d.mp4

HLS 用の m3u8 を出力するにはコマンドもある。動画のファイルは m3u8 のファイル名.ts になる。
H.264/AVC.mp4 をコピーする場合は -bsf:v h264_mp4toannexb をつける。

-hls_time で分割する秒を指定する。

ffmpeg -analyzeduration 30M -probesize 30M -i input -c copy -f segment -flags +global_header -segment_format_options movflags=+faststart -reset_timestamps 1 -bsf:v h264_mp4toannexb -hls_time 720 output.m3u8

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

連結する場合は -segment_list で ffconcat 形式を指定すればリストファイルを同時に作成する。

-segment_list out.ffconcat で分割したファイルをまとめたリストを出力する。
ffmpeg -i input.mp4 -c copy -map 0 -flags +global_header -f segment -segment_time 60 -segment_list out.ffconcat -segment_format_options movflags=+faststart -reset_timestamps 1 out%03d.mp4

上の out.ffconcat を読み込んで1つのファイルに戻す。
ffmpeg -i out.ffconcat -c copy -segment_format_options movflags=+faststart output.mp4

【ffmpeg】動画・音声を連結する concat の使い方
【ffmpeg】動画・音声を連結する concat の使い方 其の2
【ffmpeg】動画・音声を連結する concat の使い方 其の3

以下のコマンドを追加した。2016年2月13日
-flags +global_header -segment_format_options movflags=+faststart -reset_timestamps 1

-flags +global_header はヘッダーを明示する
-segment_format_options movflags=+faststart は読み込みから再生開始を早める(特にブラウザのビデオタグで見る場合)
-reset_timestamps 1 はタイムスタンプを初期化する(反対のオプションは -copyts)
-segment_list の説明を追加。分割しても連結しやすくなった。2019年10月30日

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)