使用 ffmpeg 从视频创建缩略图

问题描述 投票:0回答:6

我需要在将视频上传到 CDN 时创建视频缩略图。

我一直在寻找这个发现this,但即使按照以下步骤我也无法获得屏幕截图。

我正在使用 jwplayer 播放视频

有人可以帮我在使用 ffmpeg 上传视频时创建缩略图吗

video amazon-web-services ffmpeg
6个回答
94
投票

我不知道如何在上传时截取屏幕截图,但我知道如何在上传后进行截屏。

最简单的代码是:

ffmpeg -i input.mp4 -ss 00:00:01.000 -vframes 1 output.png

上传文件后运行此脚本。如果在视频开头截取屏幕截图,则只需要很短的时间。 (例如第一分钟)。

我认为在文件仍在上传时不可能截取屏幕截图。

编辑: 删除了

-f image2
,因为 ffmpeg 猜测它是正确的


19
投票

其他答案都很好......但对于大多数“视频”内容,JPEG是缩略图的更节省空间的选择。 这个答案讨论 JPEG 质量设置。

通常您会想要指定 缩略图大小 - 下面的命令 (source) 会将视频缩小到适合 320x320 的框(通过减小较小的边缘来保持纵横比,即 320 像素)长边):

ffmpeg -ss 00:00:01.00 -i input.mp4 -vf 'scale=320:320:force_original_aspect_ratio=decrease' -vframes 1 output.jpg

8
投票

根据本文档https://trac.ffmpeg.org/wiki/Seeking和我的个人测试,你应该像这样改变-ss和-i的位置

ffmpeg -ss 00:00:01.000 -i input.mp4 -vframes 1 output.png

由于不进行视频解码,操作将变得更快。视频将使用关键帧进行解析,速度非常快。


0
投票
$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)

0
投票

这是我的 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

0
投票

https://github.com/romanwarlock/thumbnails 结果应显示包含文件名、分辨率、大小和屏幕截图以及时间的报告:https://github.com/romanwarlock/thumbnails/blob/master/th7138.jpg。单独的屏幕截图保存在 tmp 文件夹中。

© www.soinside.com 2019 - 2024. All rights reserved.