我需要在将视频上传到 CDN 时创建视频缩略图。
我一直在寻找这个发现this,但即使按照以下步骤我也无法获得屏幕截图。
我正在使用 jwplayer 播放视频
有人可以帮我在使用 ffmpeg 上传视频时创建缩略图吗
我不知道如何在上传时截取屏幕截图,但我知道如何在上传后进行截屏。
最简单的代码是:
ffmpeg -i input.mp4 -ss 00:00:01.000 -vframes 1 output.png
上传文件后运行此脚本。如果在视频开头截取屏幕截图,则只需要很短的时间。 (例如第一分钟)。
我认为在文件仍在上传时不可能截取屏幕截图。
编辑: 删除了
-f image2
,因为 ffmpeg 猜测它是正确的
根据本文档https://trac.ffmpeg.org/wiki/Seeking和我的个人测试,你应该像这样改变-ss和-i的位置
ffmpeg -ss 00:00:01.000 -i input.mp4 -vframes 1 output.png
由于不进行视频解码,操作将变得更快。视频将使用关键帧进行解析,速度非常快。
$ffmpegPath = exec('which ffmpeg');
$ffprobePath = exec('which ffprobe');
$command = "$ffprobePath -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $input_video";
$video_duration = shell_exec($command);
$thumbnails_output = 'output%02d.png';
$command = "$ffmpegPath -i $input_video -vf fps=3/$video_duration $thumbnails_output";
shell_exec($command)
这是我的 bash 脚本,用于创建 n 个视频缩略图(在示例中有 11 个,但您可以更改它) 它在整个视频长度上定期执行此操作。
#!/bin/bash
for input_video in "$@"
do
duracion=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$input_video");
#echo $duracion;
ffmpeg -i "$input_video" -vf fps=11/$duracion "$input_video%02d.png";
#echo " ffmpeg -i \"$input_video\" -vf fps=3/$duracion \"$input_video%02d.png\"";
done
https://github.com/romanwarlock/thumbnails 结果应显示包含文件名、分辨率、大小和屏幕截图以及时间的报告:https://github.com/romanwarlock/thumbnails/blob/master/th7138.jpg。单独的屏幕截图保存在 tmp 文件夹中。