创建视频缩略图

您可能想要为从网站下载的视频创建缩略图。 这些可以用在显示多个视频缩略图的页面上,并允许您单击它们来观看特定视频。

准备工作

该示例将使用名为 ffmpeg 的工具。 ffmpeg 可从 www.ffmpeg.org 获取。 按照适用于您的操作系统的说明下载并安装。

如何做

示例脚本位于 04/11_create_video_thumbnail.py 中。 它由以下代码组成:

import subprocess
video_file = 'BigBuckBunny.mp4'
thumbnail_file = 'thumbnail.jpg'
subprocess.call(['ffmpeg', '-i', video_file, '-ss', '00:01:03.000', '-frames:v', '1', thumbnail_file, "-y"])
python

运行时您将看到 ffmpeg 的输出:

built with Apple LLVM version 8.1.0 (clang-802.0.42)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.4 --enable-shared --
enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --
enable-avresample --cc=clang --host-cflags= --host-ldflags= --enablelibmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enablevideotoolbox --disable-lzma --enable-vda
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'BigBuckBunny.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: mp41
creation_time : 1970-01-01T00:00:00.000000Z
title : Big Buck Bunny
artist : Blender Foundation
composer : Blender Foundation
date : 2008
encoder : Lavf52.14.0
Duration: 00:09:56.46, start: 0.000000, bitrate: 867 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661),
yuv420p, 320x180 [SAR 1:1 DAR 16:9], 702 kb/s, 24 fps, 24 tbr, 24 tbn, 48
tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo,
fltp, 159 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x7fb50b103000] deprecated pixel format used, make sure you did
set range correctly
Output #0, image2, to 'thumbnail.jpg':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: mp41
date : 2008
title : Big Buck Bunny
artist : Blender Foundation
composer : Blender Foundation
encoder : Lavf57.71.100
Stream #0:0(und): Video: mjpeg, yuvj420p(pc), 320x180 [SAR 1:1 DAR 16:9],
q=2-31, 200 kb/s, 24 fps, 24 tbn, 24 tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
encoder : Lavc57.89.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
frame= 1 fps=0.0 q=4.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.151x
video:8kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
bash

输出的 JPG 文件将是以下 JPG 图像:

image 2024 01 29 15 26 45 366

工作原理

.ffmpeg 文件实际上是一个可执行文件。 该代码将以下 ffmpeg 命令作为子进程执行:

ffmpeg -i BigBuckBunny.mp4 -ss 00:01:03.000 -frames:v 1 thumbnail.jpg -y
bash

输入文件是 BigBuckBunny.mp4。 -ss 选项告知我们要检查视频的位置。 -frames:v 表示我们要提取一帧。 最后,我们告诉 ffmpeg 将该帧写入thumbnail.jpg(并且 -y 确认覆盖现有文件)。

还有更多

ffmpeg 是一个令人难以置信的多功能和强大的工具。 我曾经创建的一个抓取工具会抓取并查找媒体(实际上是网站上播放的广告),并将它们存储在数字档案中。 然后,抓取工具会通过消息队列发送一条消息,该消息将被一组服务器接收,这些服务器唯一的工作就是运行 ffmpeg 将视频转换为许多不同的格式、比特率,并创建缩略图。 从那时起,更多消息将发送给审核员,以使用前端应用程序检查内容是否符合广告合同条款。 了解一下 ffmeg,它是一个很棒的工具。