使用 FFmpeg 截取视频中多个图片,然后拼成一张图
最近在做一个视频处理模块,需要在视频中截取几张图,然后拼成一张大图;
注意: 服务器需要安装ffmpeg,请参考官方文档
<?php
//获取文件路径
fwrite(STDOUT, "哪个视频文件:");
$video_path = trim(fgets(STDIN));
fwrite(STDOUT, "多少秒截取1张图:");
$s = trim(fgets(STDIN));
//设置输出路径
fwrite(STDOUT, "输出到哪里:");
$export_path = trim(fgets(STDIN));
$command = system('ffmpeg -y -i '.$video_path.' -vf "fps=1/'.$s.',scale=iw/4:-1,tile=2x2" -an '.$export_path.'_%d.png');
// fps = 1/2 每2秒截一张图,如果是每秒截一张 参数就是 fps=1
// scale 截图大小,上面的代码是设置宽为原始的1/4大小,高度自动,也可以设置成固定值如:120:80
// tile 网格化,自动将100张图合并成一张大图
补充一个知识点:
上一个方法,截图会输出很多张大图,这不是我想要的, 我只想从视频中提取4张图片,然后拼接成一张大图怎么操作;
获得视频总时长然后除以4就好了(如果要6张图就除以6)
代码如下:
$duration = system('ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i '.$video_path.'');
$s = $duration/4;
$command = system('ffmpeg -y -i '.$videopath.' -vf "fps=1/'.$s.',scale=iw/4:-1,tile=2x2" -an 1%d.png');