の新しいビルドを使用すると、とセグメントffmpeg
を使用してこれを実現できます。ffprobe
ffmpeg
muxer
- とawkを使用
ffprobe
して、目的のチャンク長にできるだけ近いキーフレームを識別します。
ffprobe -show_frames -select_streams v:0 \
-print_format csv [SOURCE_VIDEO] 2>&1 |
grep -n frame,video,1 |
awk 'BEGIN { FS="," } { print $1 " " $5 }' |
sed 's/:frame//g' |
awk 'BEGIN { previous=0; frameIdx=0; size=0; }
{
split($2,time,".");
current=time[1];
if (current-previous >= [DURATION_IN_SECONDS]){
a[frameIdx]=$1; frameIdx++; size++; previous=current;
}
}
END {
str=a[0];
for(i=1;i<size;i++) { str = str "," a[i]; } print str;
}'
どこ
- [SOURCE_VIDEO] =セグメント化するビデオへのパス
- [DURATION_IN_SECONDS] =必要なセグメントの長さ(秒単位)
出力は、キーフレームのコンマ区切りの文字列です。
- 上記のキーフレーム出力をへの入力として使用し
ffmpeg
ます。
ffmpeg -i [SOURCE_VIDEO] -codec copy -map 0 -f segment \
-segment_frames [OUTPUT_OF_STEP_1] [SEGMENT_PREFIX] \
_%03d.[SOURCE_VIDEO_EXTENSION]
どこ
- [SOURCE_VIDEO] =セグメント化するビデオへのパス
- [OUTPUT_OF_STEP_1] =キーフレームのコンマ区切り文字列
- [SEGMENT_PREFIX] =セグメント出力の名前
- [SOURCE_VIDEO_EXTENSION] =ソースビデオの拡張(例:mp4、mkv)