论文部分内容阅读
一、ffprobe的下载安装
(一)下载ffprobe
到http://sourceforge.net/projects/ffprobe/页面,下载ffprobe源码。
(二)解压源码
#tar -xzvf ffprob-53.tar.gz
(三)安装
一般Linux软件,从源码编译、安装过程为 :
#./configure //检查环境,生成makefile
#make //编译
#make install //安装,一般可能需要root权限
二、关键帧的提取
根据上面的叙述,我们已经有了提取视频关键帧的思路:利用ffprobe定位关键帧的位置(即pkt_dts),利用ffmpeg将这一关键帧转换为png格式的图片。有两种做法。
(一)不改变源代码,而是利用shell脚本编程,从ffprobe -show_frames命令输出的信息中提取出pkt_dts的值,然后利用ffmpeg将这一帧转换为图片
我所写脚本中的关键语句:
./ffprobe -show_frames $1 > ffprobetmp 2>>/dev/null
DTS=`awk 'BEGIN {FS="\n" ; RS="\["} {if($0~/codec_type=video/ && $0~/pkt_flag_key=K/) print substr($13,9)}' ffprobetmp`
for singledts in $DTS
do
echo $singledts
ffmpeg -i $1 -sameq -ss $singledts -vframes 1 -y -vcodec png ./png/$singledts.png
done
解释:
./ffprobe -show_frames $1 > ffprobetmp 2>>/dev/null 使用ffprobe命令显示帧信息,并写入文件ffprboetmp,错误信息不显示
DTS=`awk 'BEGIN {FS="\n" ; RS="\["} {if($0~/codec_type=video/ && $0~/pkt_flag_key=K/) print substr($13,9)}' ffprobetmp` 使用awk处理ffprobe输出的信息。设置记录分隔符为"[",字段分隔符为"\n";匹配记录中含有codec_type=video 且含有pkt_flag_key=K字符串的记录;截取13字段的从第9个字符开始的字符串,并输出;这是因为pkt_dts=xxxxx,这一字段的字段号是13,而等号之后的数值起始位是9。
for singledts in $DTS
do
echo $singledts
ffmpeg -i $1 -sameq -ss $singledts -vframes 1 -y -vcodec png ./png/$singledts.png
done
ffmpeg命令中-i 后为输入视频文件; -ss为开始时间(定位); -vframes 1表示一帧;-y表示覆盖输
出;-vcodec png表示输出文件格式为png,这是因为png这一格式不在ffmpeg 的format list中,故不使用-f png这种写法;$singledts.png为输出文件名
(二)利用C语言中的sysytem(cmd)函数,可以直接调用shell执行cmd命令,故在源码中,,对show_frames函数稍作修改
主要修改的地方是,在函数末尾加上
if(iframe->pkt_flags & PKT_FLAG_KEY==1 && codec_type_string(ist->st->codec->codec_type)=="video" )
{
sprintf(cmd, "ffmpeg -i %s -ss %s -vframes 1 -sameq -y -vcodec png ./pngfiles/%05d.png",
videofilename,
time_value_string(val_str, sizeof(val_str), iframe->pkt_dts, &st->time_base, value_string_flags),
filenum++);
system(cmd);
}
sprints()函数将需要运行的命令放入cmd这个字符指针中,cmd就相当于执行ffmpeg命令的字符串;sysytem(cmd)尝试执行cmd命令。
需要说明的是,输出的图片默认放在./pngfiles目录下,如果没有该目录,将会创建这一目录。
三、总结
目前关键帧提取技术并不成熟.至今还没有通用公认的提取方法。现有的提取方法各有优缺点.应用时一般根据镜头的类型及特点选择合适的提取方法.且现有的算法在检出率和检准率上还需进一步提高。
参考文献:
[1]Zhang H J,et a1.An Integrated system for Content-based Video Retrieval and BrowsingⅡ.Pattern Recongnition,1997,30(4):643-657.
(一)下载ffprobe
到http://sourceforge.net/projects/ffprobe/页面,下载ffprobe源码。
(二)解压源码
#tar -xzvf ffprob-53.tar.gz
(三)安装
一般Linux软件,从源码编译、安装过程为 :
#./configure //检查环境,生成makefile
#make //编译
#make install //安装,一般可能需要root权限
二、关键帧的提取
根据上面的叙述,我们已经有了提取视频关键帧的思路:利用ffprobe定位关键帧的位置(即pkt_dts),利用ffmpeg将这一关键帧转换为png格式的图片。有两种做法。
(一)不改变源代码,而是利用shell脚本编程,从ffprobe -show_frames命令输出的信息中提取出pkt_dts的值,然后利用ffmpeg将这一帧转换为图片
我所写脚本中的关键语句:
./ffprobe -show_frames $1 > ffprobetmp 2>>/dev/null
DTS=`awk 'BEGIN {FS="\n" ; RS="\["} {if($0~/codec_type=video/ && $0~/pkt_flag_key=K/) print substr($13,9)}' ffprobetmp`
for singledts in $DTS
do
echo $singledts
ffmpeg -i $1 -sameq -ss $singledts -vframes 1 -y -vcodec png ./png/$singledts.png
done
解释:
./ffprobe -show_frames $1 > ffprobetmp 2>>/dev/null 使用ffprobe命令显示帧信息,并写入文件ffprboetmp,错误信息不显示
DTS=`awk 'BEGIN {FS="\n" ; RS="\["} {if($0~/codec_type=video/ && $0~/pkt_flag_key=K/) print substr($13,9)}' ffprobetmp` 使用awk处理ffprobe输出的信息。设置记录分隔符为"[",字段分隔符为"\n";匹配记录中含有codec_type=video 且含有pkt_flag_key=K字符串的记录;截取13字段的从第9个字符开始的字符串,并输出;这是因为pkt_dts=xxxxx,这一字段的字段号是13,而等号之后的数值起始位是9。
for singledts in $DTS
do
echo $singledts
ffmpeg -i $1 -sameq -ss $singledts -vframes 1 -y -vcodec png ./png/$singledts.png
done
ffmpeg命令中-i 后为输入视频文件; -ss为开始时间(定位); -vframes 1表示一帧;-y表示覆盖输
出;-vcodec png表示输出文件格式为png,这是因为png这一格式不在ffmpeg 的format list中,故不使用-f png这种写法;$singledts.png为输出文件名
(二)利用C语言中的sysytem(cmd)函数,可以直接调用shell执行cmd命令,故在源码中,,对show_frames函数稍作修改
主要修改的地方是,在函数末尾加上
if(iframe->pkt_flags & PKT_FLAG_KEY==1 && codec_type_string(ist->st->codec->codec_type)=="video" )
{
sprintf(cmd, "ffmpeg -i %s -ss %s -vframes 1 -sameq -y -vcodec png ./pngfiles/%05d.png",
videofilename,
time_value_string(val_str, sizeof(val_str), iframe->pkt_dts, &st->time_base, value_string_flags),
filenum++);
system(cmd);
}
sprints()函数将需要运行的命令放入cmd这个字符指针中,cmd就相当于执行ffmpeg命令的字符串;sysytem(cmd)尝试执行cmd命令。
需要说明的是,输出的图片默认放在./pngfiles目录下,如果没有该目录,将会创建这一目录。
三、总结
目前关键帧提取技术并不成熟.至今还没有通用公认的提取方法。现有的提取方法各有优缺点.应用时一般根据镜头的类型及特点选择合适的提取方法.且现有的算法在检出率和检准率上还需进一步提高。
参考文献:
[1]Zhang H J,et a1.An Integrated system for Content-based Video Retrieval and BrowsingⅡ.Pattern Recongnition,1997,30(4):643-657.