什么是网站制作app,网站建设与推广,一个免费的影视网站模板,网上书店网站建设实训总结有一个视频如a.mp4#xff0c;此视频采用帧率为30生成#xff0c;共有299帧#xff0c;这里通过FFmpeg命令分隔成1秒一个个的小视频#xff0c;即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示#xff1a; (1).-i:指定输入视频文件的名称#xff1b; (2).-c:指… 有一个视频如a.mp4此视频采用帧率为30生成共有299帧这里通过FFmpeg命令分隔成1秒一个个的小视频即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示 (1).-i:指定输入视频文件的名称 (2).-c:指定编解码器;copy是一个特殊编解码器它直接复制输入流到输出流中不会改变其内容不进行重新编码指定copy可保持质量进行无损复制 (3).-map:指定输入文件的映射指定输入文件的索引号或名称索引号从0开始可以是多个输入文件中的一个 (4).-segment_time:指定每个输出文件的时长默认值为2秒注意仅使用此参数有时可能分隔不准确 (5).-reset_timestamps:在每个视频段的开头重置时间戳它的目的是简化生成的视频段的播放它为bool类型默认为0 (6).-g:设置帧率指定每秒视频中包含的帧的数量会影响视频的播放速度或用于设置GOP(group of picture)大小即用来设置多少帧插入一个关键帧(I帧) (7).-sc_threshold:场景切换阈值(scene change threshold)默认值为0;这个阈值的设定会影响到关键帧的插入频率较小的阈值会导致更频繁地插入关键帧而较大的阈值则会减少关键帧的插入 (8).-f:force format,后跟segment用于将多媒体数据流分隔成多个独立的输出文件 (9).-segment_time_delta:用于设置分隔时间的近似值在选择分隔的开始时间时指定准确时间默认值为0此选项在分割视频内容时非常有用视频内容始终在GOP边界处分割以防在指定分割时间之前找到关键帧 当指定delta时如果关键帧(key-frame)的PTS(Presentation Time Stamp, 音视频帧在时间轴上的展示时间点,它通常以毫秒为单位表示从文件开始播放到当前帧的时间间隔)满足以下关系则关键帧将开始一个新的分隔 PTS start_time - time_delta (10).-loglevel:用于控制日志的详细程度后可跟的参考可为quiet:只显示致命错误fatal:显示致命错误和错误debug:显示调试信息等 (11).output%03d.mp4:输出文件命名格式其中%03d是一个占位符用于生成具有三位数字编号的文件名如生成的视频文件依次为output000.mp4, output001.mp4... 执行分隔的命令如下所示
ffmpeg -i a.mp4 -c copy -map 0 -segment_time 1 -segment_time_delta 9999999 -reset_timestamps 1 -g 30 -sc_threshold 0 -loglevel debug -f segment output%03d.mp4 执行结果如下图所示 分隔正确与不正确时输出信息对比如下还没有分析出对segment_time_delta设置不同的值会产生不同结果的原因a.mp4共299帧不添加segment_time_delta参数第一个分隔的视频为60帧;添加此参数,当值很小时还是第一个分隔的视频为60帧当此值设为0.05时第二个分隔的视频为60帧当此值设为0.1时第四个分隔的视频为60帧当此值设为0.2时第7个分隔的视频为60帧当此值设为0.25时第8个分隔的视频为60帧当此值设为0.27时第9个分隔的视频为59帧当此值为0.3时可完全正确分隔当此值很大时如为9999999也可完全正确分隔。 获取每个视频的总帧数的脚本show_video_frames_number.sh如下
#! /bin/bashif [ $# ! 1 ]; thenecho it takes an input parameter: mp4 video file directory
fitmp_filetmp.txt
find $1 -name *.mp4 ${tmp_file}while IFS read -r line || [[ -n $line ]]; doecho -n video file: ${line}: ./ffprobe.exe -v error -select_streams v:0 -show_entries streamnb_frames -of defaultnokey1:noprint_wrappers1 ${line}sleep .2
done ${tmp_file}rm ${tmp_file} 当segment_time_delta分别设置为0.2和0.3时分隔的结果如下所示 注 (1).通过执行ffmpeg.exe -h full 可获取每个参数的介绍; (2).可在https://ffmpeg.org/ffmpeg-formats.html 中查看参数的详细介绍。 GitHubhttps://github.com/fengbingchun/OpenCV_Test