ffmpeg で指定秒ごとに分割する方法


出力フォーマットに 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

連結する場合
【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)

コメントを残す

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