我遇到了https://askubuntu.com/questions/377579/ffmpeg-output-screenshot-gallery/377630#377630,这是完美的。这完全符合我的要求。
但是,我使用远程网址生成屏幕截图时间轴。我知道可以使用https://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg快速搜索远程文件(在-i之前使用-ss),但这只运行一次。
我正在寻找使用
的方法./ffmpeg -i input -vf "select=gt(scene\,0.4),scale=160:-1,tile,scale=600:-1" \
-frames:v 1 -qscale:v 3 preview.jpg
命令但使用快速搜索方法,因为它与远程文件一起使用时当前非常慢。我使用PHP,但我知道使用av_seek_frame存在一个C方法,我几乎不知道C所以我无法将其实现为我编写的PHP脚本。所以希望,可以在PHP system()函数中直接使用ffmpeg执行此操作。
目前,我运行单独的ffmpeg命令(使用-ss方法),然后在PHP中将屏幕截图组合在一起。但是,使用此方法,每次都会重新获取元数据,而更优化的方法是将它全部发生在同一命令行中,因为我想减少对远程URL发出的请求数量,这样我就可以运行更多的脚本彼此依次。
感谢您的帮助。
答案 0 :(得分:2)
是的,因为-ss不是在-i之前,你需要在每次输入之前添加它。
所以这是一个可以超快速地发布它的工作示例。 ffmpeg -ss 10 -i test.avi -frames:v 1 -f image2 -map 0:v:0缩略图/ output_0.png -ss 800 -i test.avi - frames:v 1 -f image2 -map 1:v :0个缩略图/ output_1.png -ss 2400 -i test.avi -frames:v 1 -f image2 -map 2:v:0缩略图/ output_2.png
所以0:v:0表示第一个输入,选择视频流,第一个视频流1:v:0表示第二个输入,选择视频流,第一个视频流(0)2:v:0表示第二个输入,选择视频流,首先是视频流(0)
答案 1 :(得分:1)
这很慢的主要原因是因为“select = gt(scene \,0.4)”需要对每一帧进行解码并与下一帧进行比较,以便能够检测到场景变化。
我认为不可能比使用场景变化探测器更快地完成你正在做的事情。您可以通过视频中的video_duration / n步骤提供n个屏幕截图,另外您还可以通过检查图像强度是否高于阈值来检查每个帧是否为黑色。
答案 2 :(得分:0)
$ffmpeg = "ffmpeg.exe";
$cmd = "$ffmpeg -ss 20 -i $Filename -frames:v 1 mjpeg -map 0:v:0 $Thumbnail";
$Return = `$cmd`;
制作非常快速的视频缩略图。 $ Filename是视频的文件和路径,例如C:\ videos \ video_1.mp4
$ Thumbnail是您要将缩略图存储到的文件路径和文件名,例如C:\ Thumbnails \ Thumbnail_1.jpg