当前位置: 首页 > news >正文

《解锁FFmpeg - python:开启多媒体处理新时代》

走进 FFmpeg - python 的奇妙世界

在当今这个数字媒体占据主导地位的时代,视频已经成为了信息传播和内容创作的核心载体。从社交媒体上的短视频分享,到专业影视制作中的复杂特效处理,视频处理的重要性日益凸显。无论是内容创作者想要剪辑出吸睛的作品,还是开发者致力于打造创新的视频应用,亦或是企业期望通过视频进行高效的宣传推广,都离不开强大而灵活的视频处理工具。

在众多视频处理工具中,FFmpeg 无疑是一颗耀眼的明星。而 FFmpeg - python,则为这颗明星披上了一层更加便捷和强大的外衣,它将 Python 语言的简洁性与 FFmpeg 的强大功能完美融合,为我们打开了一扇通往视频处理新世界的大门。如果你曾为视频格式转换而烦恼,为视频剪辑的复杂操作而头疼,为添加音频或特效的困难而沮丧,那么 FFmpeg - python 很可能就是你一直在寻找的解决方案。接下来,就让我们一同深入探索 FFmpeg - python 的奇妙世界,揭开它神秘的面纱,领略它在视频处理领域的无限魅力。

一、FFmpeg - python 初相识

(一)FFmpeg - python 是什么

FFmpeg - python 是一个功能强大的 Python 库,它为 Python 开发者提供了一个便捷的接口,用于访问和使用 FFmpeg 这个强大的多媒体处理工具的各项功能 。它就像是一座桥梁,将 Python 语言的简洁性、灵活性与 FFmpeg 的丰富功能紧密连接起来,让开发者能够在熟悉的 Python 环境中,轻松实现各种复杂的多媒体处理任务。

通过 FFmpeg - python,开发者可以在 Python 脚本中,仅需几行代码,就能完成诸如视频格式转换、视频剪辑、音频提取、添加字幕、调整视频分辨率和帧率等一系列操作。例如,想要将一个视频文件从 MP4 格式转换为 AVI 格式,使用 FFmpeg - python 库,代码可以简洁到如下程度:

import ffmpeginput_file = 'input.mp4'output_file = 'output.avi'ffmpeg.input(input_file).output(output_file).run()

在这段代码中,首先导入了 ffmpeg 库,然后通过ffmpeg.input()方法指定输入文件为input.mp4,接着使用ffmpeg.output()方法指定输出文件为output.avi,最后调用run()方法来执行这个格式转换的操作。如此简洁的代码,却实现了强大的视频格式转换功能,充分展示了 FFmpeg - python 库在多媒体处理中的便捷性和高效性。

(二)与 FFmpeg 的渊源

FFmpeg 作为一款开源的、跨平台的多媒体框架,在多媒体处理领域占据着举足轻重的地位,堪称业界的 “瑞士军刀”。它拥有丰富的功能,几乎支持所有常见的音频和视频格式,能够进行编码、解码、转码、流处理等多种操作,被广泛应用于各种专业视频编辑软件、流媒体服务、视频监控系统以及移动音视频应用等场景中。

FFmpeg - python 则是 FFmpeg 的 Python 绑定库,它的出现,为 Python 开发者提供了一种更为友好和便捷的方式来使用 FFmpeg 的功能。与直接使用 FFmpeg 命令行工具相比,通过 FFmpeg - python 库进行操作,具有诸多优势。首先,对于熟悉 Python 语言的开发者来说,使用 Python 代码进行多媒体处理,比记忆和编写复杂的命令行参数更加容易和直观。其次,Python 语言本身具有强大的生态系统和丰富的库,FFmpeg - python 可以与其他 Python 库进行无缝集成,进一步拓展了多媒体处理的能力和应用场景。例如,在进行视频分析时,可以结合 OpenCV 库进行图像识别和处理,再利用 FFmpeg - python 进行视频的合成和输出。

假设我们要从一个视频中提取音频,并将其转换为 MP3 格式。如果使用 FFmpeg 命令行工具,命令可能如下:

ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3

而使用 FFmpeg - python 库,代码则为:

import ffmpeginput_file = 'input.mp4'output_file = 'output.mp3'ffmpeg.input(input_file).output(output_file, vn=None, acodec='libmp3lame').run()

对比这两种方式,可以明显看出,使用 FFmpeg - python 库的代码更加简洁易懂,且与 Python 的编程风格一致,更易于维护和扩展。在 Python 开发环境中,FFmpeg - python 库为开发者提供了一种更加高效、灵活和便捷的多媒体处理方式,让开发者能够更加专注于业务逻辑的实现,而无需花费过多精力在命令行参数的记忆和调试上。

二、搭建 FFmpeg - python 的舞台

(一)FFmpeg 的安装之旅

在开始使用 FFmpeg - python 进行音视频处理之前,我们首先需要在系统中安装 FFmpeg。FFmpeg 的安装过程因操作系统的不同而有所差异,下面我们将分别针对 Windows、macOS 和 Linux 系统,详细介绍其安装步骤。

Windows 系统

1、下载 FFmpeg

        访问 FFmpeg 官方网站的下载页面:Download FFmpeg ,在页面中找到 “Windows” 部分,然后选择 “Windows builds from gyan.dev” 链接。

        在弹出的新页面中,找到 “release builds” 区域,这里提供了不同版本的 FFmpeg 下载链接。建议选择最新的稳定版本,点击下载链接,将 FFmpeg 的压缩包(通常是一个以.zip结尾的文件,如ffmpeg - release - essentials.zip)下载到本地。

2、解压文件

        使用解压工具(如 WinRAR、7 - Zip 等)解压下载的 FFmpeg 压缩包。解压后,你会得到一个包含多个文件夹和文件的目录,其中bin文件夹下包含了ffmpeg.exe、ffplay.exe、ffprobe.exe等可执行文件,这些文件是我们使用 FFmpeg 的核心。

3、配置环境变量

  • 找到 FFmpeg 解压后的bin目录路径,例如C:\ffmpeg\bin。
  • 右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”。
  • 在 “系统属性” 窗口的 “高级” 选项卡中,点击 “环境变量” 按钮。
  • 在 “环境变量” 窗口的 “系统变量” 部分,找到名为 “Path” 的变量,点击 “编辑”。
  • 在 “编辑环境变量” 窗口中,点击 “新建”,将 FFmpeg 的bin目录路径添加进去,然后点击 “确定” 保存设置。需要注意的是,环境变量配置完成后,最好重启一下电脑,确保环境变量生效。

4、验证安装

  • 打开命令提示符(可以通过在开始菜单中搜索 “命令提示符” 找到)。
  • 在命令提示符中输入ffmpeg -version,如果安装成功,将会显示 FFmpeg 的版本信息、编译配置以及版权声明等内容。

macOS 系统

方式一:使用 Homebrew 安装(推荐)

1、更新 Homebrew:如果你的系统中已经安装了 Homebrew,在终端中输入以下命令更新 Homebrew 到最新版本:

brew update
brew upgrade

2、安装 FFmpeg:在终端中输入以下命令安装 FFmpeg:

brew install ffmpeg

Homebrew 会自动下载并安装 FFmpeg 及其依赖项。安装过程中可能需要你输入管理员密码进行确认。

3、验证安装:安装完成后,在终端中输入ffmpeg -version,如果显示 FFmpeg 的版本信息,则说明安装成功。

方式二:从官网下载安装包安装

1、下载 FFmpeg

访问 FFmpeg 官方网站的下载页面:Download FFmpeg ,点击页面中的苹果图标,然后选择 “Static builds for macOS 64 - bit” 按钮。

选择想要的版本,建议下载更加稳定的 release 版本,避免下载开发版本,因为开发版本可能存在未知的 bug。下载完成后,会得到一个压缩包。

2、解压文件:双击下载的压缩包进行解压,解压后得到一个可执行文件ffmpeg。

3、配置环境变量

打开终端,编辑.zshrc文件(如果使用的是 bash 终端,则编辑.bash_profile文件),可以使用以下命令打开:

vim ~/.zshrc

在文件末尾添加以下内容,将/your/ffmpeg/path替换为实际的 FFmpeg 解压后的路径:

export PATH=$PATH:/your/ffmpeg/path

保存并退出编辑器,然后执行以下命令使配置生效:

source ~/.zshrc

4、验证安装:在终端中输入ffmpeg -version,如果显示 FFmpeg 的版本信息,则安装成功。需要注意的是,解压后的可执行文件是没有经过苹果官方认可的,首次运行时可能会出现安全提示。解决方法是点击显示器左上角苹果图标 -> 系统偏好设置 -> 安全性与隐私 -> 通用,点击 “仍要打开” 按钮,然后在弹出的提示中继续点击 “打开” 即可正常运行。

Linux 系统(以 Ubuntu 为例)

1、更新软件包列表:在终端中输入以下命令,更新系统的软件包列表,确保获取到最新的软件信息:

sudo apt - get update

2、安装 FFmpeg:输入以下命令安装 FFmpeg 及其依赖项:

sudo apt - get install ffmpeg

系统会提示你确认安装,输入y并回车,开始下载和安装 FFmpeg。

3、验证安装:安装完成后,在终端中输入ffmpeg -version,如果显示 FFmpeg 的版本信息,则说明安装成功。如果在安装过程中遇到网络问题或源配置有误导致失败,建议检查网络连接和软件源配置,并重试安装步骤。例如,如果网络连接不稳定,可以尝试更换网络环境或使用代理;如果源配置有误,可以参考 Ubuntu 官方文档或相关技术论坛,修改软件源配置文件。

(二)ffmpeg - python 库的加入

在成功安装 FFmpeg 之后,我们还需要安装 ffmpeg - python 库,以便在 Python 中调用 FFmpeg 的功能。安装 ffmpeg - python 库非常简单,只需要使用 Python 的包管理工具 pip 即可。

1、安装 ffmpeg - python 库

打开命令行终端(Windows 下是命令提示符或 PowerShell,macOS 和 Linux 下是终端)。

输入以下命令安装 ffmpeg - python 库:

pip install ffmpeg - python

如果你的系统中同时安装了 Python 2 和 Python 3,并且希望使用 Python 3 来安装 ffmpeg - python 库,可能需要使用pip3命令:

pip3 install ffmpeg - python

安装过程中,pip 会自动从 Python 包索引中下载 ffmpeg - python 库及其依赖项,并将其安装到你的 Python 环境中。

2、导入库

在安装完成后,我们就可以在 Python 代码中导入 ffmpeg - python 库了。在 Python 脚本的开头,添加以下代码:

import ffmpeg

导入库后,我们就可以使用库中提供的各种函数和方法来进行音视频处理了。例如,我们可以使用ffmpeg.input()方法指定输入文件,ffmpeg.output()方法指定输出文件,run()方法来执行具体的音视频处理操作。下面是一个简单的示例,将一个视频文件从 MP4 格式转换为 AVI 格式:

import ffmpeginput_file = 'input.mp4'output_file = 'output.avi'ffmpeg.input(input_file).output(output_file).run()

在这个示例中,首先导入了ffmpeg库,然后定义了输入文件input.mp4和输出文件output.avi,最后通过ffmpeg.input(input_file).output(output_file).run()这一行代码,实现了视频格式的转换。通过这样简单的代码,我们就借助 ffmpeg - python 库,利用了 FFmpeg 强大的音视频处理功能,展示了其在 Python 环境中进行音视频处理的便捷性和高效性。

三、FFmpeg - python 的基础舞步

(一)视频格式大变身

在视频处理的众多任务中,视频格式转换是一项基础且常见的操作。不同的应用场景和平台往往对视频格式有着不同的要求,例如,某些在线视频平台可能更适合 MP4 格式的视频,而一些视频编辑软件可能对 AVI 格式的兼容性更好。使用 FFmpeg - python,我们可以轻松地实现视频格式之间的转换。

以将 MP4 格式视频转换为 AVI 格式为例,下面是使用 FFmpeg - python 进行视频格式转换的代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'output.avi'ffmpeg.input(input_file).output(output_file).run()

在这段代码中,input_file变量指定了输入视频文件的路径,这里是名为input.mp4的 MP4 格式视频文件。output_file变量则指定了输出视频文件的路径和格式,即转换后的 AVI 格式视频文件output.avi。ffmpeg.input(input_file)这部分代码表示读取输入文件,ffmpeg.output(output_file)表示将处理后的结果输出到指定文件,而最后的run()方法则是执行整个视频格式转换的操作。当我们运行这段代码时,FFmpeg - python 会根据指定的输入和输出文件,利用 FFmpeg 强大的编解码功能,将 MP4 格式的视频转换为 AVI 格式。

通过这样简单的几行代码,我们就能够实现视频格式的转换,充分展示了 FFmpeg - python 在处理视频格式转换任务时的便捷性和高效性。而且,这种方式不仅适用于 MP4 到 AVI 的转换,对于其他支持的视频格式之间的转换,也只需相应地修改输入和输出文件的格式即可轻松实现。例如,将 AVI 格式转换为 MKV 格式,代码可以修改为:

import ffmpeginput_file = 'input.avi'output_file = 'output.mkv'ffmpeg.input(input_file).output(output_file).run()

(二)视频剪辑小能手

在视频制作和编辑中,视频剪辑是一项非常重要的技能,它能够帮助我们从原始视频中提取出关键的片段,或者对视频的尺寸进行调整,以满足不同的需求。使用 FFmpeg - python,我们可以方便地实现视频剪辑的各种操作。

提取视频特定时间段片段

有时候,我们只需要视频中的某一段特定时间段的内容,比如一个教学视频中讲解重点知识点的部分,或者一个电影中的精彩片段。使用 FFmpeg - python,我们可以通过指定起始时间(ss)和持续时间(t)来轻松提取视频的特定时间段片段。以下是代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'clip.mp4'start_time = 10 # 开始时间(秒)duration = 5 # 持续时间(秒)ffmpeg.input(input_file, ss=start_time, t=duration).output(output_file).run()

在这段代码中,start_time变量设置为 10,表示从视频的第 10 秒开始提取;duration变量设置为 5,表示提取的片段时长为 5 秒。ffmpeg.input(input_file, ss=start_time, t=duration)这部分代码通过ss参数指定了起始时间,通过t参数指定了持续时间,从而准确地定位了要提取的视频片段。然后,output(output_file)将提取出的片段输出到名为clip.mp4的文件中,最后run()方法执行整个剪辑操作。运行这段代码后,我们就会得到一个从原视频第 10 秒开始,时长为 5 秒的新视频文件clip.mp4。

按尺寸裁剪视频

除了提取特定时间段的片段,我们还可能需要对视频的尺寸进行裁剪,比如将一个宽屏视频裁剪为适合手机屏幕显示的竖屏视频,或者去除视频周围的黑边。在 FFmpeg - python 中,我们可以使用crop参数来实现按尺寸裁剪视频。以下是代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'cropped.mp4'width = 640 # 裁剪后的宽度height = 480 # 裁剪后的高度x = 100 # 裁剪区域左上角的x坐标y = 100 # 裁剪区域左上角的y坐标ffmpeg.input(input_file).output(output_file, vf=f'crop={width}:{height}:{x}:{y}').run()

在这段代码中,width和height变量分别指定了裁剪后的视频宽度和高度,这里设置为 640 和 480。x和y变量则指定了裁剪区域左上角在原视频中的坐标,这里设置为 100 和 100。vf=f'crop={width}:{height}:{x}:{y}'这部分代码通过vf(视频滤镜)参数设置了crop滤镜,用于指定裁剪的尺寸和位置。crop滤镜的语法为crop=width:height:x:y,其中width和height是裁剪后的宽度和高度,x和y是裁剪区域左上角在原视频中的坐标。运行这段代码后,原视频将按照指定的尺寸和位置进行裁剪,生成一个新的视频文件cropped.mp4。

(三)音频世界的探索

在视频处理中,音频也是一个重要的组成部分。有时候,我们可能需要从视频中提取音频,用于音频分析、音乐制作或者其他用途;或者将音频转换为不同的格式,以适应不同的播放设备或应用场景。使用 FFmpeg - python,我们可以方便地进行音频相关的处理。

从视频中提取音频

从视频中提取音频是一项常见的操作,比如我们想要提取电影中的背景音乐,或者将一段视频中的语音内容提取出来进行文字转换。使用 FFmpeg - python,我们可以通过简单的代码实现这一功能。以下是从视频中提取音频并保存为 MP3 格式的代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'output.mp3'ffmpeg.input(input_file).output(output_file, vn=None, acodec='libmp3lame').run()

在这段代码中,input_file指定了输入的视频文件为input.mp4,output_file指定了输出的音频文件为output.mp3。vn=None参数表示不包含视频流,即只提取音频部分。acodec='libmp3lame'参数指定了音频编解码器为libmp3lame,这是一种常用的 MP3 编码方式,用于将提取的音频编码为 MP3 格式。通过这样的设置,ffmpeg.input(input_file).output(output_file, vn=None, acodec='libmp3lame')这部分代码实现了从视频中提取音频并将其编码为 MP3 格式的功能,最后run()方法执行整个操作。运行这段代码后,我们就会得到一个从原视频中提取出来的 MP3 格式音频文件output.mp3。

音频格式转换

除了从视频中提取音频,我们还可能需要将音频从一种格式转换为另一种格式。例如,将 WAV 格式的音频转换为 MP3 格式,以减小文件大小,方便存储和传输;或者将 MP3 格式转换为 FLAC 格式,以获得更高质量的音频。使用 FFmpeg - python,音频格式转换也非常简单。以下是将 WAV 格式音频转换为 MP3 格式的代码示例:

import ffmpeginput_file = 'input.wav'output_file = 'output.mp3'ffmpeg.input(input_file).output(output_file, acodec='libmp3lame').run()

在这段代码中,input_file指定输入的音频文件为input.wav,output_file指定输出的音频文件为output.mp3。acodec='libmp3lame'参数指定了音频编解码器为libmp3lame,用于将 WAV 格式的音频编码为 MP3 格式。通过ffmpeg.input(input_file).output(output_file, acodec='libmp3lame')这部分代码,实现了音频格式的转换,最后run()方法执行转换操作。运行代码后,我们就可以得到转换后的 MP3 格式音频文件output.mp3。

(四)视频合并大作战

在视频制作中,有时我们需要将多个视频片段合并成一个完整的视频,以实现视频内容的连贯性和完整性。比如制作一个视频教程,可能需要将多个讲解不同知识点的视频片段合并在一起;或者制作一个电影混剪,需要将多个电影的精彩片段拼接成一个新的视频。使用 FFmpeg - python,我们可以方便地实现视频合并的操作。

水平合并两个视频

水平合并两个视频,即将两个视频在水平方向上拼接在一起,形成一个更宽的视频画面。这在制作对比视频、画中画效果等场景中非常有用。以下是使用 FFmpeg - python 水平合并两个视频的代码示例:

import ffmpeginput_file1 = 'input1.mp4'input_file2 = 'input2.mp4'output_file = 'merged_horizontal.mp4'input1 = ffmpeg.input(input_file1)input2 = ffmpeg.input(input_file2)ffmpeg.concat(input1.video, input2.video, v=1, a=0, axis=0).output(output_file).run()

在这段代码中,input_file1和input_file2分别指定了要合并的两个视频文件的路径。input1 = ffmpeg.input(input_file1)和input2 = ffmpeg.input(input_file2)分别读取了这两个视频文件。ffmpeg.concat(input1.video, input2.video, v=1, a=0, axis=0)这部分代码使用concat函数进行视频合并。其中,input1.video和input2.video表示只合并两个视频的视频流部分,不合并音频流(a=0)。v=1表示输出一条视频流,axis=0表示在水平方向上进行合并,即将两个视频左右拼接在一起。最后,output(output_file)将合并后的视频输出到merged_horizontal.mp4文件中,run()方法执行合并操作。运行这段代码后,我们就会得到一个水平合并后的视频文件merged_horizontal.mp4。

垂直合并两个视频

垂直合并两个视频,即将两个视频在垂直方向上拼接在一起,形成一个更高的视频画面。这在一些需要展示不同视频内容上下排列的场景中会用到。以下是使用 FFmpeg - python 垂直合并两个视频的代码示例:

import ffmpeginput_file1 = 'input1.mp4'input_file2 = 'input2.mp4'output_file = 'merged_vertical.mp4'input1 = ffmpeg.input(input_file1)input2 = ffmpeg.input(input_file2)ffmpeg.concat(input1.video, input2.video, v=1, a=0, axis=1).output(output_file).run()

这段代码与水平合并的代码类似,不同之处在于axis=1,它表示在垂直方向上进行合并,即将两个视频上下拼接在一起。通过这样的设置,运行代码后,我们就可以得到一个垂直合并后的视频文件merged_vertical.mp4。在视频合并的过程中,需要注意两个视频的分辨率、帧率等参数最好保持一致,否则可能会出现合并后的视频画面或播放效果异常的情况。如果两个视频的参数不一致,可以在合并前先对视频进行预处理,使其参数统一。

四、FFmpeg - python 的高级变奏

(一)特效魔法秀

在视频处理中,添加特效可以让视频更加生动有趣,吸引观众的注意力。使用 FFmpeg - python,我们可以轻松地为视频添加各种特效,如添加水印和调整亮度对比度。

添加水印

在当今的数字媒体时代,为视频添加水印是保护视频版权和标识视频来源的重要手段。使用 FFmpeg - python,我们可以通过简单的代码将水印图像叠加到视频上。以下是添加水印的代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'watermarked.mp4'watermark_file = 'watermark.png'input_video = ffmpeg.input(input_file)watermark = ffmpeg.input(watermark_file)ffmpeg.output(input_video, watermark, vf=f'overlay=10:10', output_file).run()

在这段代码中,input_file指定了输入的视频文件为input.mp4,output_file指定了添加水印后的输出视频文件为watermarked.mp4,watermark_file指定了水印图像文件为watermark.png。input_video = ffmpeg.input(input_file)和watermark = ffmpeg.input(watermark_file)分别读取了视频文件和水印图像文件。ffmpeg.output(input_video, watermark, vf=f'overlay=10:10', output_file)这部分代码使用overlay滤镜将水印图像叠加到视频上。overlay滤镜的语法为overlay=x:y,其中x和y分别表示水印在视频中的横坐标和纵坐标位置,这里设置为10:10,表示水印位于视频左上角向右和向下各 10 个像素的位置。通过这样的设置,overlay函数实现了将水印图像按照指定位置叠加到视频上的功能,最后run()方法执行整个添加水印的操作。运行这段代码后,我们就会得到一个添加了水印的视频文件watermarked.mp4。

调整亮度对比度

调整视频的亮度和对比度可以改善视频的视觉效果,使其更加清晰、生动。使用 FFmpeg - python,我们可以通过eq滤镜来调整视频的亮度和对比度。以下是调整亮度对比度的代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'enhanced.mp4'ffmpeg.input(input_file).filter('eq', brightness=0.06, contrast=1.5).output(output_file).run()

在这段代码中,input_file指定了输入的视频文件为input.mp4,output_file指定了调整亮度对比度后的输出视频文件为enhanced.mp4。ffmpeg.input(input_file).filter('eq', brightness=0.06, contrast=1.5)这部分代码使用filter函数应用了eq滤镜,eq滤镜用于调整视频的各种视觉效果参数。其中,brightness=0.06表示将视频的亮度增加 0.06,contrast=1.5表示将视频的对比度增加到原来的 1.5 倍。通过这样的参数设置,eq滤镜实现了对视频亮度和对比度的调整,最后output(output_file).run()将调整后的视频输出到enhanced.mp4文件中并执行整个操作。运行代码后,我们可以看到调整亮度对比度后的视频enhanced.mp4在视觉效果上有了明显的变化,画面更加清晰、鲜艳,突出了视频的细节和层次感。

(二)性能优化之道

在处理大规模视频文件或进行实时视频处理时,性能优化显得尤为重要。合理的性能优化可以显著提高视频处理的速度和效率,减少处理时间,提升用户体验。以下是一些在使用 FFmpeg - python 进行视频处理时的性能优化方法。

多线程处理

利用多线程技术可以充分发挥多核 CPU 的优势,让 FFmpeg 同时处理多个视频任务,从而提高整体处理效率。在 Python 中,我们可以使用concurrent.futures库来实现多线程处理。以下是一个使用多线程进行视频格式转换的示例代码:

import osimport subprocessfrom concurrent.futures import ThreadPoolExecutordef convert_video(input_file, output_file):command = ['ffmpeg', '-i', input_file, output_file]subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)def process_videos(video_files, output_format):with ThreadPoolExecutor() as executor:futures = []for video_file in video_files:output_file = f"{os.path.splitext(video_file)[0]}.{output_format}"futures.append(executor.submit(convert_video, video_file, output_file))for future in futures:future.result()if __name__ == '__main__':video_files = ['video1.mp4', 'video2.avi', 'video3.mkv']output_format ='mov'process_videos(video_files, output_format)

在这段代码中,首先定义了convert_video函数,该函数使用subprocess.run调用 FFmpeg 命令行,实现单个视频文件的格式转换。然后,process_videos函数使用ThreadPoolExecutor创建一个线程池,遍历输入的视频文件列表,为每个视频文件提交一个格式转换任务到线程池中。submit方法会返回一个Future对象,将这些Future对象存储在futures列表中。最后,通过遍历futures列表,调用每个Future对象的result方法,等待所有线程任务完成。这样,多个视频文件的格式转换任务就可以在多线程的环境下并行执行,大大提高了处理效率。在实际应用中,如果有大量的视频文件需要处理,多线程处理可以显著缩短处理时间,提高工作效率。

硬件加速

FFmpeg 支持多种硬件加速技术,如 CUDA、QuickSync、VAAPI 等,这些技术可以利用 GPU、CPU 等硬件资源来加速视频处理过程。在 Python 中调用 FFmpeg 并使用硬件加速,需要根据具体的硬件和编码器来设置相应的参数。以使用 NVIDIA GPU 的 CUDA 硬件加速为例,以下是一个视频转码的示例代码:

import subprocessinput_file = "input.mp4"output_file = "output.mp4"cmd = f"ffmpeg -hwaccel cuvid -c:v h264_cuvid -i {input_file} -vf scale=1280:720 -c:v h264_nvenc {output_file}"subprocess.call(cmd, shell=True)

在这段代码中,-hwaccel cuvid表示启用 CUDA 硬件加速,-c:v h264_cuvid表示使用 CUDA 硬件解码器对视频进行解码,-c:v h264_nvenc表示使用 NVIDIA 的 NVENC 硬件编码器对视频进行编码。-vf scale=1280:720表示将视频尺寸缩放为 1280x720。通过这样的参数设置,FFmpeg 在处理视频时可以利用 NVIDIA GPU 的硬件加速功能,大大提高视频转码的速度。不同的硬件加速技术和编码器有不同的参数设置,需要根据实际情况进行调整和优化。例如,对于 Intel 的 QuickSync 硬件加速,可能需要使用-c:v h264_qsv等相关参数。在实际应用中,合理使用硬件加速可以显著提升视频处理的效率,特别是对于处理大规模视频文件或进行实时流媒体处理时,能够减少处理时间,提高系统的响应速度。

选择合适的文件格式和编码方式

不同的文件格式和编码方式对视频处理的性能和质量有很大影响。在选择文件格式和编码方式时,需要综合考虑视频的用途、目标平台、文件大小和处理效率等因素。例如,对于网络视频播放,MP4 格式和 H.264 编码是比较常用的选择,因为它们具有良好的兼容性和压缩比,可以在保证视频质量的前提下,减小文件大小,便于网络传输和播放。而对于需要高质量视频输出的场景,如电影制作、专业视频编辑等,可能会选择无损编码格式或更高质量的编码方式,如 ProRes 编码等,但这些格式通常会导致文件大小较大,处理时间较长。在使用 FFmpeg - python 进行视频处理时,可以通过设置output方法的参数来指定文件格式和编码方式。例如,将视频转换为 MP4 格式并使用 H.264 编码的代码如下:

import ffmpeginput_file = 'input.mp4'output_file = 'output.mp4'ffmpeg.input(input_file).output(output_file, vcodec='libx264').run()

在这段代码中,vcodec='libx264'参数指定了视频编码方式为libx264,这是一种常用的 H.264 编码库。通过选择合适的文件格式和编码方式,可以在满足视频质量要求的同时,提高视频处理的效率和性能。在实际应用中,需要根据具体的需求和场景,对不同的文件格式和编码方式进行测试和比较,选择最适合的方案。例如,如果需要在移动设备上播放视频,可能需要选择对移动设备兼容性更好的编码参数和文件格式;如果是用于视频存档,可能更注重视频的质量和长期保存性,可以选择更可靠的编码方式和文件格式。

五、FFmpeg - python 的实战应用

(一)短视频制作中的应用

在短视频制作领域,FFmpeg - python 展现出了强大的助力,为创作者们提供了高效且丰富的创作工具。

视频剪辑与拼接:短视频创作者常常需要从大量的原始素材中挑选出精彩片段,并将它们拼接成一个完整的视频。使用 FFmpeg - python,这一过程变得轻松而高效。例如,一位美食博主在制作烹饪教学短视频时,可能拍摄了多个步骤的视频片段,如食材准备、烹饪过程、成品展示等。通过 FFmpeg - python,博主可以精确地提取每个片段中最精彩的部分,并将它们按照教学逻辑顺序进行拼接。以下是一个简单的代码示例,展示如何将三个视频片段clip1.mp4、clip2.mp4和clip3.mp4拼接成一个新的视频combined.mp4:

import ffmpegclip1 = ffmpeg.input('clip1.mp4')clip2 = ffmpeg.input('clip2.mp4')clip3 = ffmpeg.input('clip3.mp4')ffmpeg.concat(clip1, clip2, clip3, v=1, a=1).output('combined.mp4').run()

在这段代码中,ffmpeg.concat(clip1, clip2, clip3, v=1, a=1)表示将三个视频片段在视频流(v=1)和音频流(a=1)上进行拼接。output('combined.mp4')指定了拼接后的输出文件为combined.mp4,最后run()方法执行整个拼接操作。通过这样的方式,美食博主能够快速地将多个视频片段整合在一起,制作出流畅的烹饪教学短视频。

添加特效与增强视觉效果:为了吸引观众的注意力,短视频往往需要添加各种炫酷的特效。FFmpeg - python 提供了丰富的特效处理功能,能够满足创作者们的创意需求。例如,在制作一个旅行短视频时,创作者可以使用 FFmpeg - python 为视频添加转场特效,使不同场景之间的切换更加自然流畅。以下是一个添加淡入淡出转场特效的代码示例:

import ffmpeginput_file = 'input.mp4'output_file = 'output.mp4'ffmpeg.input(input_file).filter('fade', type='in', start_time=0, duration=2).filter('fade', type='out', start_time=10, duration=2).output(output_file).run()

在这段代码中,filter('fade', type='in', start_time=0, duration=2)表示在视频开始的 0 秒处添加一个持续 2 秒的淡入特效,filter('fade', type='out', start_time=10, duration=2)表示在视频第 10 秒处添加一个持续 2 秒的淡出特效。通过这样的特效处理,旅行短视频在场景切换时会更加生动,给观众带来更好的视觉体验。

添加背景音乐与音频处理:合适的背景音乐能够为短视频营造出独特的氛围,增强视频的感染力。FFmpeg - python 可以方便地将背景音乐添加到视频中,并且还能对音频进行各种处理。比如,一个舞蹈短视频创作者想要为自己的作品添加一段充满活力的背景音乐,同时调整背景音乐的音量,使其与舞蹈动作的节奏相匹配。以下是实现这一操作的代码示例:

import ffmpegvideo_file = 'dance_video.mp4'music_file = 'background_music.mp3'output_file = 'final_video.mp4'video = ffmpeg.input(video_file)music = ffmpeg.input(music_file)ffmpeg.concat(video, music, v=1, a=1).output(output_file, vcodec='copy', acodec='aac', audio_bitrate='128k', af='volume=0.5').run()

在这段代码中,ffmpeg.concat(video, music, v=1, a=1)将视频和背景音乐进行合并,output(output_file, vcodec='copy', acodec='aac', audio_bitrate='128k', af='volume=0.5')指定了输出文件的相关参数。其中,vcodec='copy'表示视频编码直接复制,不进行重新编码,以提高处理速度;acodec='aac'指定音频编码为 AAC;audio_bitrate='128k'设置音频比特率为 128k;af='volume=0.5'表示将背景音乐的音量调整为原来的 0.5 倍,以避免背景音乐声音过大掩盖舞蹈动作的声音。通过这样的音频处理,舞蹈短视频的音乐和画面更加协调,能够更好地吸引观众的注意力。

(二)视频监控领域的应用

在视频监控系统中,FFmpeg - python 发挥着至关重要的作用,为视频录制、格式转换、分析预处理和存储管理等环节提供了高效的解决方案。

视频录制与格式转换:在视频监控场景中,需要持续地录制视频以获取监控画面。FFmpeg - python 可以方便地实现从摄像头或其他视频源进行视频录制,并将录制的视频保存为不同的格式。例如,在一个安防监控项目中,需要使用 USB 摄像头进行 24 小时不间断的视频录制,并将录制的视频保存为 MP4 格式,以便后续查看和分析。以下是使用 FFmpeg - python 实现这一功能的代码示例:

import subprocessoutput_file ='surveillance_video.mp4'command = ['ffmpeg', '-f', 'dshow', '-i', 'video="USB Camera"', '-c:v', 'libx264', '-preset', 'ultrafast', output_file]subprocess.run(command)

在这段代码中,-f dshow表示使用 DirectShow 设备进行视频捕获,-i video="USB Camera"指定输入设备为名为 “USB Camera” 的摄像头,-c:v libx264指定视频编码器为 H.264,-preset ultrafast设置编码速度为超快,以满足实时录制的需求。通过这样的设置,FFmpeg - python 能够从指定的摄像头持续录制视频,并将其保存为 MP4 格式的文件。同时,根据实际需求,还可以轻松地将录制的视频转换为其他格式,如 AVI、MKV 等,以适应不同的存储和播放要求。

视频分析预处理:在视频监控系统中,为了提高视频分析的准确性和效率,常常需要对视频进行预处理。FFmpeg - python 可以与其他视频分析库(如 OpenCV)结合使用,对视频进行裁剪、降噪、增强等预处理操作。例如,在一个交通监控场景中,需要对监控视频进行裁剪,只保留感兴趣的道路区域,以便后续对车辆行驶情况进行分析。以下是使用 FFmpeg - python 和 OpenCV 实现视频裁剪的代码示例:

import ffmpegimport cv2import numpy as npinput_file = 'traffic_surveillance.mp4'output_file = 'cropped_traffic_surveillance.mp4'# 使用FFmpeg获取视频信息probe = ffmpeg.probe(input_file)width = int(probe['streams'][0]['width'])height = int(probe['streams'][0]['height'])# 定义裁剪区域x = 100 # 裁剪区域左上角x坐标y = 100 # 裁剪区域左上角y坐标crop_width = 640 # 裁剪宽度crop_height = 480 # 裁剪高度# 使用FFmpeg进行视频裁剪(ffmpeg.input(input_file).filter('crop', crop_width, crop_height, x, y).output(output_file).run())# 使用OpenCV读取裁剪后的视频并进行进一步处理(示例:转换为灰度图)cap = cv2.VideoCapture(output_file)fourcc = cv2.VideoWriter_fourcc(*'mp4v')out = cv2.VideoWriter('gray_cropped_traffic_surveillance.mp4', fourcc, 25.0, (crop_width, crop_height), isColor=False)while True:ret, frame = cap.read()if not ret:breakgray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)out.write(gray_frame)cap.release()out.release()

在这段代码中,首先使用ffmpeg.probe获取输入视频的宽度和高度信息。然后定义了裁剪区域的参数,使用 FFmpeg 的crop滤镜对视频进行裁剪,并将裁剪后的视频保存为新的文件。接着,使用 OpenCV 读取裁剪后的视频,将每一帧转换为灰度图,并保存为新的视频文件。通过这样的预处理操作,可以去除视频中无关的背景信息,突出感兴趣的区域,为后续的视频分析提供更有效的数据。

视频存储管理:在视频监控系统中,大量的视频数据需要进行有效的存储和管理。FFmpeg - python 可以实现将视频按照一定的规则进行分片存储,并且可以对视频进行加密处理,以保护视频数据的安全性。例如,在一个企业监控系统中,为了便于存储和管理,需要将长时间的监控视频按照每小时一个文件的方式进行分片存储,同时对视频进行加密,防止视频数据被非法获取。以下是使用 FFmpeg - python 实现视频分片存储和加密的代码示例:

import subprocessinput_file = 'enterprise_surveillance.mp4'output_pattern = 'part_%03d.ts'key_file = 'encryption_key.key'# 视频分片存储command_split = ['ffmpeg', '-i', input_file, '-hls_time', '3600', '-hls_list_size', '0', '-hls_segment_filename', output_pattern, 'playlist.m3u8']subprocess.run(command_split)# 视频加密command_encrypt = ['ffmpeg', '-i', input_file, '-hls_time', '3600', '-hls_list_size', '0', '-hls_segment_filename', output_pattern, '-hls_key_info_file', key_file, 'encrypted_playlist.m3u8']subprocess.run(command_encrypt)

在这段代码中,-hls_time 3600表示每个分片的时长为 3600 秒(即 1 小时),-hls_list_size 0表示不限制播放列表中分片文件的数量,-hls_segment_filename output_pattern指定了分片文件的命名格式。通过playlist.m3u8文件可以索引到各个分片文件,实现视频的分片存储。在视频加密部分,-hls_key_info_file key_file指定了加密密钥文件,使用该密钥对视频进行加密,生成encrypted_playlist.m3u8文件,只有拥有正确密钥的用户才能解密和播放视频,从而提高了视频数据的安全性。

(三)在线教育平台的应用

在在线教育平台中,FFmpeg - python 扮演着重要的角色,为课程视频的处理提供了全面的解决方案,以满足不同用户的需求并保护课程版权。

格式转换与兼容性优化:在线教育平台上的课程视频需要适应不同的设备和网络环境,因此格式转换是必不可少的环节。FFmpeg - python 可以将课程视频转换为多种格式,如 MP4、FLV、WebM 等,以确保视频能够在各种设备上流畅播放。例如,为了让课程视频在手机、平板和电脑等设备上都能完美适配,平台开发者可以使用 FFmpeg - python 将原始的课程视频文件转换为多种分辨率和格式的版本。以下是将课程视频转换为适应手机屏幕的 MP4 格式(分辨率为 640x480)的代码示例:

import ffmpeginput_file = 'course_video.mp4'output_file ='mobile_course_video.mp4'ffmpeg.input(input_file).output(output_file, vcodec='libx264', acodec='aac', s='640x480').run()

在这段代码中,vcodec='libx264'指定视频编码为 H.264,这是一种广泛支持的视频编码格式,能够在保证视频质量的同时,有效减小文件大小,适合网络传输和移动设备播放。acodec='aac'指定音频编码为 AAC,这也是一种常用的音频编码格式,具有较高的音质和压缩比。s='640x480'设置输出视频的分辨率为 640x480,适应大多数手机屏幕的尺寸。通过这样的格式转换,课程视频可以在手机上流畅播放,为学生提供更好的学习体验。

剪辑拼接与内容优化:在线教育课程通常由多个章节或片段组成,需要对视频进行剪辑和拼接,以整合教学内容,提高教学效果。同时,还可能需要对视频进行一些内容优化,如去除冗余部分、添加片头片尾等。例如,一位在线编程课程的讲师录制了多个编程讲解视频片段,现在需要将这些片段按照课程顺序进行拼接,并添加一个统一的片头和片尾,以增强课程的整体性和专业性。以下是使用 FFmpeg - python 实现这一操作的代码示例:

import ffmpeg# 定义视频片段和片头片尾文件clip1 = ffmpeg.input('clip1.mp4')clip2 = ffmpeg.input('clip2.mp4')clip3 = ffmpeg.input('clip3.mp4')intro = ffmpeg.input('intro.mp4')outro = ffmpeg.input('outro.mp4')# 拼接视频片段并添加片头片尾(ffmpeg.concat(intro, clip1, clip2, clip3, outro, v=1, a=1).output('final_course_video.mp4').run())

在这段代码中,首先使用ffmpeg.input分别读取各个视频片段和片头片尾文件。然后通过ffmpeg.concat将它们按照顺序进行拼接,v=1和a=1表示同时拼接视频流和音频流。最后将拼接后的视频输出为final_course_video.mp4文件。通过这样的剪辑拼接操作,在线编程课程的各个片段被整合在一起,形成了一个完整的课程视频,并且添加的片头片尾能够提升课程的专业性和吸引力。

添加字幕与多语言支持:为了满足不同地区和语言背景学生的学习需求,在线教育平台通常需要为课程视频添加字幕,甚至提供多语言字幕。FFmpeg - python 可以方便地将字幕文件添加到视频中,实现字幕与视频的同步播放。例如,一个国际在线教育平台的课程需要提供英文和中文两种语言的字幕。以下是使用 FFmpeg - python 添加字幕的代码示例:

import ffmpeginput_file = 'course_video.mp4'output_file_en = 'course_video_en_subtitles.mp4'output_file_zh = 'course_video_zh_subtitles.mp4'subtitle_en ='subtitle_en.srt'subtitle_zh ='subtitle_zh.srt'# 添加英文字幕(ffmpeg.input(input_file).output(output_file_en, vf=f'subtitles={subtitle_en}').run())# 添加中文字幕(ffmpeg.input(input_file).output(output_file_zh, vf=f'subtitles={subtitle_zh}').run())

在这段代码中,vf=f'subtitles={subtitle_en}'和vf=f'subtitles={subtitle_zh}'分别表示将英文字幕文件subtitle_en.srt和中文字幕文件subtitle_zh.srt添加到视频中。通过这样的操作,学生可以根据自己的语言需求选择观看带有相应语言字幕的课程视频,提高学习效果。

加密处理与版权保护:在线教育平台的课程视频是平台的重要资产,为了防止课程视频被非法传播和盗用,需要对视频进行加密处理。FFmpeg - python 可以利用多种加密算法对视频进行加密,确保只有授权用户才能观看课程。例如,使用 AES - 128 加密算法对课程视频进行加密,以下是使用 FFmpeg - python 实现视频加密的代码示例:

import subprocessinput_file = 'course_video.mp4'output_file = 'encrypted_course_video.mp4'key_file = 'encryption_key.key'command = ['ffmpeg', '-i', input_file, '-c:v', 'copy', '-c:a', 'copy', '-encryption_scheme', 'cenc-aes-ctr', '-encryption_key', 'file:' + key_file, output_file]subprocess.run(command)

在这段代码中,-encryption_scheme cenc-aes-ctr指定了加密算法为 AES - CTR 模式,-encryption_key file: + key_file指定了加密密钥文件。通过这样的加密处理,课程视频被加密保存为encrypted_course_video.mp4文件,只有拥有正确密钥的用户才能解密并观看视频,从而有效地保护了课程的版权,防止课程视频被非法复制和传播。

六、FFmpeg - python 的社区与资源

在探索 FFmpeg - python 的旅程中,社区和丰富的学习资源是我们不可或缺的伙伴。FFmpeg - python 的开源项目在 GitHub 上活跃度颇高,截至目前,其仓库已收获了众多开发者的关注,拥有 9.3k 的 star 数 。这一数据不仅彰显了项目的受欢迎程度,更意味着有大量的开发者在使用和维护这个项目,为其持续发展贡献力量。

在 GitHub 仓库中,你能找到项目的完整源代码,这对于想要深入了解 FFmpeg - python 内部实现机制的开发者来说,是一个绝佳的学习资料。同时,详细的文档也为新手和有经验的开发者提供了清晰的使用指南,涵盖了从基础安装到高级应用的各个方面。开发者和用户们在这个社区中积极交流,分享自己的经验和技巧。如果你在使用过程中遇到问题,不妨到仓库的 issues 板块中搜索,也许就能找到其他人遇到过的类似问题及解决方案。若没有找到合适的答案,也可以勇敢地提出自己的问题,社区的小伙伴们会热情地帮助你。此外,如果你对项目有独特的见解或新的功能想法,还可以通过提交 pull request 的方式,将自己的代码贡献给项目,为 FFmpeg - python 的发展添砖加瓦。

除了 GitHub 社区,还有许多其他学习资源可以帮助你更深入地掌握 FFmpeg - python。官方文档无疑是最权威的学习资料,它详细介绍了库的各种功能、函数和参数,为你提供了全面而深入的学习指导。在线教程也是不错的选择,例如菜鸟教程等网站,提供了丰富的实例和讲解,能让你通过实际操作快速上手。一些技术论坛,如 Stack Overflow 和 CSDN 等,也是获取知识的宝库。在这些论坛上,你可以与其他开发者交流心得,提问解惑,从他们的经验中汲取养分。同时,也有一些相关的书籍,如《FFmpeg 从入门到精通》等,不仅涵盖了 FFmpeg 的基础知识,也会涉及到 FFmpeg - python 的应用,为你提供系统的学习路径。

通过积极参与 FFmpeg - python 的社区,充分利用各种学习资源,你将在视频处理的道路上不断进步,挖掘出 FFmpeg - python 更多的潜力,为自己的项目和创作带来更多的可能性。

七、展望 FFmpeg - python 的未来

FFmpeg - python 作为多媒体处理领域的强大工具,已经在众多应用场景中展现出了其卓越的能力。从基础的视频格式转换、剪辑,到高级的特效添加、性能优化,再到广泛的实战应用,如短视频制作、视频监控和在线教育平台等,它都发挥着不可或缺的作用。其简洁的 Python 接口,使得开发者能够轻松驾驭 FFmpeg 的强大功能,大大提高了多媒体处理的效率和灵活性。

展望未来,随着数字媒体技术的不断发展,FFmpeg - python 有望迎来更广阔的发展空间。在技术层面,随着硬件加速技术的不断进步,FFmpeg - python 对硬件加速的支持将更加完善和高效,能够进一步提升大规模视频处理和实时视频处理的速度和性能。同时,与人工智能和机器学习技术的融合也将成为趋势,例如自动识别视频内容进行智能剪辑、基于深度学习的视频特效添加等,这将为视频处理带来更多创新的应用和可能性。

在应用层面,随着短视频、在线教育、视频会议等领域的持续火爆,对视频处理的需求将不断增加。FFmpeg - python 凭借其强大的功能和易用性,将在这些领域发挥更大的作用,助力开发者打造出更加优质、丰富的视频应用。此外,在物联网、虚拟现实(VR)和增强现实(AR)等新兴领域,视频处理也是关键环节,FFmpeg - python 有望在这些领域拓展应用,为这些新兴技术的发展提供有力支持。

对于广大开发者和多媒体爱好者来说,FFmpeg - python 是一个充满潜力和魅力的工具。希望大家能够继续深入探索 FFmpeg - python 的更多功能和应用场景,在实践中不断积累经验,发挥自己的创造力,利用 FFmpeg - python 为多媒体世界带来更多精彩。相信在未来,FFmpeg - python 将在多媒体处理领域继续发光发热,成为推动数字媒体技术发展的重要力量。

http://www.lryc.cn/news/575352.html

相关文章:

  • GNSS位移监测站在大坝安全中的用处
  • Lynx vs React Native vs Flutter 全面对比:三大跨端框架实测分析
  • PAT A 1052 Linked List Sorting
  • 解决uniapp vue3版本封装组件后:deep()样式穿透不生效的问题
  • ZYNQ GP总线深度实战:智能灯光控制器的PS-PL交互艺术
  • Python 惰性求值实战:用生成器重构 Sentence 类
  • 从HTML4到HTML5+CSS3,如何快速掌握?(有老版HTML基础或经验)
  • Web基础关键_001_HTML(一)
  • QTextEdit、QTextBrowser右键菜单汉化显示
  • 数据结构大项目
  • 科技与人类贪欲
  • 医疗AI专科子模型联邦集成编程分析
  • 图像质量对比感悟
  • 【RESTful接口设计规范全解析】URL路径设计 + 动词名词区分 + 状态码 + 返回值结构 + 最佳实践 + 新手常见误区汇总
  • 2D 基准情况下贝叶斯优化应用的概率推理
  • centos 7 安装NVIDIA Container Toolkit
  • 云原生 Cloud Native
  • OBCP第三章 OceanBase SQL 引擎高级技术学习笔记
  • Rust 中的 HTTP 请求利器:reqwest
  • 【STM32】端口复用和重映射
  • 一次性登录令牌(Login Ticket)生成机制分析
  • 环境太多?不好管理怎么办?TakMll 工具帮你快速切换和管理多语言、多版本情况下的版本切换。
  • 【Actix Web】Rust Web开发实战:Actix Web框架全面指南
  • 从零到一训练一个 0.6B 的 MoE 大语言模型
  • 百面Bert
  • 《网络攻防技术》《数据分析与挖掘》《网络体系结构与安全防护》这三个研究领域就业如何?
  • ASP.NET Core Web API 实现 JWT 身份验证
  • list类的详细讲解
  • 基于 Python 的批量文件重命名软件设计与实现
  • 二叉树理论基础