出力フォーマットにsegmentmuxer を使って指定秒ごとに分割する。ストリームコピーする場合は GOP の関係で正確な指定秒ごとに分割できない。さらにファイルサイズを指定(-fs)して分割は出来ない。ニコ生のタイムシフトの個人的なバックアップ(ニコ動に非公開で投稿する)にも使える。
詳細な分割設定ができる Segment
ffmpeg で指定時間でカットするまとめ
-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 で Apple HTTP Live Streaming(HLS)を扱う
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日