使用较新的构建ffmpeg
,可以通过使用ffprobe
和ffmpeg
段来实现这一点muxer
。
- 使用
ffprobe
和 awk 来识别尽可能接近所需块长度的关键帧。
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)