使用FFmpeg从视频创建动画GIF和WebP

2021-03-01 04:14:35

无论是用于网站,演示文稿,还是与朋友聊天共享有趣的剪辑,您都可能希望将视频转换为GIF动画或WebP动画。不幸的是,执行此操作的视觉工具因您的操作系统而异。此外,即使在2021年,大多数转换工具也不支持WebP格式。WebP基于VP8,与GIF图像格式相比,VP8是一种相对较新的视频编解码器标准。

因此,本指南适用于那些愿意学习一些终端以将任何视频转换为他们选择的动画格式的人。最好的部分:这将在所有主要操作系统上运行,并为您提供所需输出的所有控制!

有关如何在操作系统上打开和使用终端的基本知识。如果您需要备忘单或入门指南,请查看终端备忘单。

FFmpeg v4 +已安装在操作系统上,并且可以从路径执行。这是一些建议的地方,可以进行学习:

FFmpeg是一个免费的开源软件项目,由用于处理视频,音频和其他多媒体文件和流的大量库和程序组成。

为了我们的目的,我们将使用它在格式之间进行转换,例如将视频转换为GIF或动画WebP。它有很多用途,所以我建议您检查一下所有视频处理需求!

由于所有这些命令都需要FFmpeg,因此我们需要确保它可用。

如果得到的输出类似于未找到的命令:ffmpeg -version,请检查上面的“前提条件”部分,并确保已在系统上安装了FFmpeg。

ffmpeg -i $ INPUT_FILENAME \ -vf" fps = $ OUTPUT_FPS,scale = $ OUTPUT_WIDTH:-1:flags = lanczos,split [s0] [s1]; [s0] palettegen [p]; [s1] [p ] paletteuse" \ -loop $ NUMBER_OF_LOOPS $ OUTPUT_FILENAME#更改以下占位符:#* $ INPUT_FILENAME-输入视频的路径。#* $ OUTPUT_FPS-每秒输出帧数。以`10`开头。#* $ OUTPUT_WIDTH-输出宽度(以像素为单位)。 #* $ NUMBER_OF_LOOPS-始终使用“ 0”循环,或使用特定数量的循环。#* $ OUTPUT_FILENAME-输出动画GIF的名称。

这是基本命令,具有各种选项,可用于将视频的一部分转换为GIF动画:

ffmpeg -ss $ INPUT_START_TIME -t $ LENGTH -i $ INPUT_FILENAME \ -vf" fps = $ OUTPUT_FPS,scale = $ OUTPUT_WIDTH:-1:flags = lanczos,split [s0] [s1]; [s0] palettegen [ p]; [s1] [p] paletteuse" \ -loop $ NUMBER_OF_LOOPS $ OUTPUT_FILENAME#更改以下占位符:#* $ INPUT_START_TIME-输入视频中的开始秒数。#* $ LENGTH-从输入视频中转换的秒数。#* $ INPUT_FILENAME-路径#* $ OUTPUT_FPS-每秒输出帧数。以`10`开头。#* $ OUTPUT_WIDTH-输出宽度(以像素为单位)。 #* $ NUMBER_OF_LOOPS-始终使用“ 0”循环,或使用特定数量的循环。#* $ OUTPUT_FILENAME-输出动画GIF的名称。

这是基本命令,带有用于将整个视频转换为动画WebP的各种选项。您可以使用FPS,输出宽度和质量等选项来确定文件的大小和输出质量:

ffmpeg -i $ INPUT_FILENAME \ -vf" fps = $ OUTPUT_FPS,scale = $ OUTPUT_WIDTH:-1:flags = lanczos" \ -vcodec libwebp-无损0-压缩级别6 \ -q:v $ OUTPUT_QUALITY -loop $ NUMER_OF_LOOPS \-预设图片-an -vsync 0 $ OUTPUT_FILENAME#更改这些占位符:#* $ INPUT_FILENAME-输入视频的路径。 $ OUTPUT_FPS-每秒输出帧数。以`10`开头。#* $ OUTPUT_WIDTH-输出宽度(以像素为单位)。 #* $ OUTPUT_QUALITY-WebP输出的质量。以`50`开始。#* $ NUMBER_OF_LOOPS-使用'0'可以永久循环,或使用特定数量的循环。#* $ OUTPUT_FILENAME-输出动画WebP的名称。

ffmpeg -i" sample_recording.mp4" \ -vf" fps = 10,scale = 720:-1:flags = lanczos" \ -vcodec libwebp-无损0-压缩级别6 \ -q:v 50-循环0 \-预设图片-an -vsync 0 sample_recording.webp

这是带有各种选项的基本命令,用于将视频的一部分转换为动画WebP:

ffmpeg -ss $ INPUT_START_TIME -t $ LENGTH -i $ INPUT_FILENAME \ -vf" fps = $ OUTPUT_FPS,scale = $ OUTPUT_WIDTH:-1:flags = lanczos" \ -vcodec libwebp-无损0-压缩级别6 \ -q:v $ OUTPUT_QUALITY-循环$ NUMER_OF_LOOPS \-预设图片-an -vsync 0 $ OUTPUT_FILENAME#更改这些占位符:#* $ INPUT_START_TIME-将输入视频中的秒数转换为#* $ LENGTH-从输入视频转换的秒数。#* $ INPUT_FILENAME-输入视频的路径。#* $ OUTPUT_FPS-每秒输出帧数。以`10`开头。#* $ OUTPUT_WIDTH-输出宽度(以像素为单位)。 #* $ OUTPUT_QUALITY-WebP输出的质量。以`50`开始。#* $ NUMBER_OF_LOOPS-使用'0'可以永久循环,或使用特定数量的循环。#* $ OUTPUT_FILENAME-输出动画WebP的名称。

ffmpeg -ss 32.5 -t 7 -i" sample_recording.mp4" \ -vf" fps = 10,scale = 720:-1:flags = lanczos" \ -vcodec libwebp-无损0-压缩级别6 \ -q:v 50-循环0 \-预设图片-an -vsync 0 sample_recording.webp

这取决于输出所需的质量,大小和支持。现代浏览器支持动画WebP,质量往往更高,但是所需的处理能力也更高。

本指南是使用FFmpeg从视频创建动画GIF或动画WebP的简要介绍,但是您可以使用该工具做更多的事情。 FFmpeg还为这些格式提供了许多未涵盖的选项。

您还可以通过访问此处的GitHub Gist,在一处获取所有命令和示例的代码。