【FFmpeg】【gif】命令行工具,将视频转为gif

1 做动图用到的工具:

1.1 工具1-gifcam:录制屏幕为gif

1.2 工具2-FFmpeg:将视频转换为gif

FFmpeg是一个开源的多媒体处理工具,可以用来转换、编辑和处理各种音视频格式,其中也包括GIF格式。它的优点是跨平台、免费且功能强大,可以自定义各种参数来控制GIF的输出质量和大小。但是,它的界面比较复杂,需要一定的命令行操作经验。

1.3 参考文章

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33697094/article/details/112718101

版权声明:本文为CSDN博主「山下海棠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33697094/article/details/112718101

1.4 ffmpeg下载

1.5 ffmpeg安装和环境变量配置

1.5.1 下载解压后就能在 bin 文件夹下

解压的路径为

D:\Program Files\ffmpeg-release-essentials\ffmpeg-4.3.1-2021-01-01-essentials_build\bin

能看到三个可执行程序:ffmpeg、ffplay、ffprobe,配置好环境变量后即可使用。

1.5.2 将bin所在的文件夹添加到系统变量中

打开命令提示符或 PowerShell 应用程序。

输入以下命令来查看当前系统的环境变量1

在这里插入图片描述

需要用管理员运行powershell

set PATH

找到要添加的路径,记下该路径的完整路径名。

输入以下命令来将要添加的路径添加到系统环境变量-用户变量path中:

setx PATH "%PATH%;[要添加的路径]"

输入以下命令来将要添加的路径添加到系统环境变量-系统变量path中:

setx /M PATH "%PATH%;[要添加的路径]"

本机为:

setx /M  PATH "%PATH%;D:\Program Files\ffmpeg-release-essentials\ffmpeg-4.3.1-2021-01-01-essentials_build\bin"

其中,[要添加的路径] 替换为你要添加的路径的完整路径名,不包括方括号。

1.5.3 验证是否成功

cmd窗口输入ffmpeg -version
在这里插入图片描述

1.6 3.在cmd里使用命令行

  • 项目路径输入cmd,将命令行路径改为FFmpeg所在的安装目录

1.7 4.输入ffmpeg命令行

1.7.1 视频转为gif

将一个视频文件转换为GIF格式,可以使用FFmpeg命令行工具。下面是将一个视频文件转换为GIF的基本命令:

ffmpeg -i input.mp4 -vf scale=320:-1 -r 10 -f gif output.gif

解释:

  • -i input.mp4:指定输入视频文件。
  • -vf scale=320:-1:调整输出GIF的大小为320像素宽,高度等比例缩放。
  • -r 10:每秒钟10帧输出一个GIF帧。
  • -f gif:指定输出格式为GIF。
  • output.gif:指定输出的GIF文件名。

需要注意的是,GIF格式不支持音频,因此上述命令只会转换视频部分。如果需要将视频和音频一起转换为GIF,需要先将音频提取出来进行处理,再将视频和音频合并为GIF。

另外,可以根据具体需求调整参数,例如调整GIF的质量、帧率、大小等等。

1.7.2 加速gif的帧

要让输出的GIF文件播放速度加快,可以通过调整输出帧率来实现。在FFmpeg命令中,可以使用“-r”参数来指定输出的帧率。较高的帧率将导致GIF文件播放速度更快,但也会增加文件大小和播放的负担。

例如,如果您希望输出的GIF文件播放速度加倍,可以将输出帧率设置为每秒钟20帧,即原来的两倍。可以使用以下命令:

ffmpeg -i input.mp4 -vf scale=320:-1 -r 20 -f gif output.gif

需要注意的是,较高的输出帧率也可能会导致GIF文件的质量下降,因为每秒钟输出的帧数增加,就需要在同样的时间内输出更多的帧,从而可能导致帧之间的差异更大。因此,需要根据具体情况权衡输出帧率和GIF文件的质量和大小。

1.7.3 不改变GIF的总帧数的情况下加快GIF的播放速度

要在不改变GIF的总帧数的情况下加快GIF的播放速度,您可以使用FFmpeg的“setpts”滤镜来实现。该滤镜可以调整每个帧的时间戳,从而加速或减慢GIF的播放速度。

例如,如果您希望将GIF的播放速度加快两倍,可以将每个帧的时间戳减半。可以使用以下命令:

ffmpeg -i input.gif -filter:v "setpts=0.5*PTS" output.gif

该命令将使用“setpts”滤镜将每个帧的时间戳减半,从而使GIF的播放速度加快一倍。输出文件名为“output.gif”。

需要注意的是,较快的播放速度可能会导致GIF的质量下降,因为帧之间的差异可能更大。因此,需要根据具体情况权衡播放速度和GIF文件的质量。

ffmpeg -i c8494efd9768623b2a2b06528c239315.mp4 -vf scale=960:-1 -r 20 -filter:v "setpts=0.1*PTS" -f gif output.gif

使用FFmpeg将名为“c8494efd9768623b2a2b06528c239315.mp4”的视频文件转换为960像素宽的GIF文件,每秒钟输出20帧,并将输出文件保存为“output.gif”。同时,使用“setpts”滤镜将每个帧的时间戳缩短为原来的0.1倍,从而加快GIF的播放速度。请确保在命令行窗口中运行该命令时,当前目录为包含输入文件的目录,或者在输入文件名前使用完整路径来指定输入文件的位置

增加用户图形界面

UI

在这里插入图片描述
在这里插入图片描述
生成的GIF在视频目录下

代码


import tkinter as tk
import tkinter.filedialog as fd
import subprocess
import os

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.select_file_button = tk.Button(self)
        self.select_file_button["text"] = "Select Video File"
        self.select_file_button["command"] = self.select_file
        self.select_file_button.pack(side="top")

        self.convert_button = tk.Button(self)
        self.convert_button["text"] = "Convert to GIF"
        self.convert_button["command"] = self.convert_to_gif
        self.convert_button.pack(side="top")

    def select_file(self):
        self.file_path = fd.askopenfilename(filetypes=[("Video Files", "*.mp4")])

    def convert_to_gif(self):
        if not hasattr(self, "file_path"):
            tk.messagebox.showwarning("Error", "Please select a video file first.")
            return

        file_name, file_ext = os.path.splitext(self.file_path)
        output_path = file_name + ".gif"

        command = [
            "ffmpeg",
            "-i", self.file_path,
            "-vf", "scale=1080:-1",
            "-r", "50",
            "-f", "gif",
            output_path
        ]

        try:
            subprocess.run(command, check=True)
            tk.messagebox.showinfo("Success", "GIF conversion completed.")
        except subprocess.CalledProcessError as e:
            tk.messagebox.showerror("Error", f"FFmpeg error: {e}")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

  1. 环境变量的作用

    在 Windows 操作系统中,环境变量是一种系统级别的设置,用于存储各种系统和用户相关的配置信息,这些信息包括可执行文件、动态链接库(DLL)、路径、用户名、计算机名、系统目录和临时文件夹等。环境变量可以帮助您在不同的应用程序之间共享配置信息,同时也可以方便地管理系统配置。以下是环境变量的一些作用:

    1. 管理系统路径和文件:环境变量可以帮助操作系统定位需要运行的文件、程序和库,从而避免手动指定路径和文件名的繁琐工作。

    2. 管理用户配置:环境变量可以存储用户的相关配置信息,例如 Windows 用户名、主目录、文档文件夹和下载文件夹等。

    3. 提高系统性能:通过使用环境变量,系统可以更快地定位需要的文件和程序,从而提高系统性能。

    4. 便于系统管理:环境变量可以用于管理系统和应用程序的配置信息,例如配置 Java 的路径以及设置系统临时文件夹等。

    5. 便于应用程序开发:环境变量可以用于在应用程序中存储和访问配置信息,例如用于存储应用程序的路径、数据库连接字符串等。

    在 Windows 中,您可以使用“环境变量”设置来管理环境变量。通过设置环境变量,您可以配置系统和应用程序的行为,同时也可以方便地管理和维护系统配置。

    用户环境变量系统环境变量的区别

    在 Windows 中,环境变量分为用户环境变量和系统环境变量两种类型。用户环境变量只适用于当前用户,而系统环境变量适用于整个系统。

    对于环境变量 PATH 来说,用户环境变量 PATH 和系统环境变量 PATH
    中的内容可能不完全相同,因为它们具有不同的作用范围。

    • 用户环境变量 PATH:它包含了当前登录用户在命令行或文件浏览器中可以直接访问的可执行文件的路径。这些路径可能包括用户自己安装的应用程序或工具,或者是系统管理员添加到用户环境变量
      PATH 中的路径。

    • 系统环境变量 PATH:它包含了整个系统中所有用户都可以访问的可执行文件的路径。这些路径包括了 Windows 系统自带的工具和应用程序,以及系统管理员添加到系统环境变量 PATH 中的路径。

    因此,用户环境变量 PATH 和系统环境变量 PATH
    中的内容可能有重叠部分,但是它们的作用范围不同,可能包含不同的路径。在使用命令行或文件浏览器时,系统会首先查找用户环境变量 PATH
    中的路径,如果找不到则会继续查找系统环境变量 PATH 中的路径。

    ↩︎
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmywillstronger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值