目录
什么是FFmpeg?
人们为什么使用 FFmpeg?
如何在 Windows、Ubuntu 和 macOS 中设置 FFmpeg。
FFmpeg 中提供了用于媒体操作的库。
FFmpeg 为命令行应用程序提供的工具。
FFprobe 和 FFplay 的用法和示例。
这个名字的灵感来自 MPEG,意思是运动图像专家组。FF 的意思是快进。
MPEG 组是制定当今许多基本视频标准(包括我们都熟悉的 MP4 格式)背后的工作组联盟。
它通常被称为媒体转码或流媒体的瑞士军刀。我们可以使用 FFmpeg 来执行很多功能。代码是用 C 语言编写的,并针对最佳性能进行了优化。它的命令很容易运行。一旦你熟悉了这些概念,就可以非常灵活地使用所有过滤器和选项来满足你的需求。
FFmpeg 支持广泛的代码、格式、设备和协议,这使其成为转码引擎的理想选择。与许多已停产的项目不同,20 多年来它仍在积极开发 。有一个庞大的开发人员、用户和贡献者社区,他们不断开发新功能和修复程序。
FFmpeg 已被用于 YouTube 和 iTunes 等视频平台的核心处理。我们大多数人都使用像 VLC 这样的媒体播放器来播放视频文件。VLC 使用 FFmpeg 库作为其核心。一些视频编辑器和移动应用程序也在幕后使用 FFmpeg。
在设置 FFmpeg 之前,你需要了解一些事项。没有任何操作系统的官方版本。但它是一个开源项目,你可以从互联网上获取 FFmpeg 源代码。因此,你可以选择从源代码自己构建它。
你可以在此处(https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2)下载当前源代码的快照,或者从他们的git 存储库中(https://github.com/FFmpeg/FFmpeg.git)获取并按照说明将其编译到你的机器上。这可能有点复杂和耗时,并且可能需要你了解和选择一些配置选项。首先可能还需要安装额外的工具和编译器。因此,除非你有充分的理由自己构建它,否则你可能不想走这条路。
相反,你可以选择为你的操作系统下载并安装预构建的 FFmpeg 包。有两种方法可以设置这些预构建二进制文件。如果你有像 Ubuntu 中的 APT 和 macOS 中的 Homebrew 这样的包管理器,它会更容易使用,因为它负责下载 FFmpeg 及其依赖项。
让我们选择最简单的开始方式。以下过程显示了如何使用预构建包进行设置。
在 macOS 上,安装 FFmpeg 的最简单方法是使用 Homebrew。
确保你在 macOS 中安装了 Homebrew,或者你可以按照有关如何安装 Homebrew 的教程进行操作:https://brew.sh/
在这种情况下,我们使用的是 macOS 11.4。
打开终端并输入brew — version
。如果 Homebrew 安装成功,你应该会在终端中看到 brew 版本。
macOS 中的 brew 版本
对于 x86 架构的 macOS,请使用命令brew install ffmpeg
,而对于 M1,请使用命令aarch arm64 brew install ffmpeg
。
下载并安装必要的依赖项
安装完成后,你可以在终端输入ffmpeg -version
。如果打印出 FFmpeg 版本,则表示 FFmpeg 安装成功。
与 Ubuntu 上的 APT 和 macOS 上的 Homebrew 不同,Windows 上没有可以用来快速安装 FFmpeg的包管理器。
对于 Windows,你需要手动关闭并设置它。
可以在此处(https://www.gyan.dev/ffmpeg/builds/)找到 4 个 Windows FFmpeg 构建变体:
git full
– 从具有大量库的主分支构建。
git essentials
– 从带有常用库的主分支构建。
release full
– 从具有大量库的最新版本分支构建。
release essentials
– 使用常用库从最新版本分支构建。
在我们的案例中,我们将使用 FFmpeg 发布版。
在此处下载 FFmpeg 发布版:https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip
将文件解压缩到将来要使用它们的地方。就我而言,我将它们放在我的 E盘中。
里面的bin文件夹包含这些可执行文件。
将bin文件夹添加到Windows环境路径变量中,这样我们就可以运行这个工具而不必每次都指定完整路径。在搜索栏中搜索环境变量,然后单击环境变量。
单击用户变量中的路径,单击新建,并粘贴bin的完整路径文件夹。
打开命令提示符并键入ffmpeg -version
. 如果你看到打印出 FFmpeg 版本,则表示 FFmpeg 安装成功。我们还可以检查ffprob -version
和ffplay -version
。
FFmpeg 有几个有价值的库,你可以直接从你的应用程序代码中使用它们。每个库都包含与特定区域相关的不同功能。
一些著名的库是:
libavcodec — 包含 FFmpeg 支持的所有编码器和解码器。
libavformat — 拥有处理各种容器格式的所有复用器和解复用器。
libavfilter — 由许多过滤器组成,你可以根据需要使用它们来修改音频或视频。
libavdevice——支持多种不同的输入和输出设备。
libavutil — 辅助便携式多媒体编程。
libswscale — 执行高度优化的图像缩放以及色彩空间和像素格式转换操作。
libswresample — 执行高度优化的音频重采样、重新混合和样本格式转换操作。
除了可以从其他应用程序使用的库之外,FFmpeg 包本身还包含一些工具。
其中一些工具是:
FFmpeg — 主要转码引擎。它通常从命令行或其他进程调用。
ffplay — 播放音频或视频的最小工具。
ffprobe — 快速检查媒体以提取有价值的信息,例如媒体中有多少流、视频的帧速率等。
ffprobe [OPTIONS] [INPUT_FILE]
man ffplay
— 请参阅手册。
ffplay -h
— 显示帮助。
-v error
— 除非出现错误,否则隐藏日志。
-show_format
— 使用标签显示格式化的视频元数据。
show_streams
— 显示文件中的所有流(视频和音频)。
-print_format
— 以特定格式(CSV/XML/JSON)打印元数据。
select_streams
-show_entries stream
= 仅显示特定实体及其嵌套依赖项。
-show_entries stream= default-noprint_wrappers=1
— 仅显示特定实体。
显示所有视频元数据。
$ ffprobe -v error -show_format -show_streams input.mp4
Output:
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1/50
codec_tag_string=avc1
codec_tag=0x31637661
width=320
height=240
has_b_frames=2
sample_aspect_ratio=1:1
display_aspect_ratio=4:3
pix_fmt=yuv420p
level=13
color_range=N/A
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
timecode=N/A
refs=4
is_avc=1
nal_length_size=4
id=N/A
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/12800
start_pts=0
start_time=0.000000
duration_ts=384000
duration=30.000000
bit_rate=34761
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=750
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:language=und
TAG:handler_name=VideoHandler
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_time_base=1/44100
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=fltp
sample_rate=44100
channels=1
channel_layout=mono
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/44100
start_pts=-1024
start_time=-0.023220
duration_ts=1324024
duration=30.023220
bit_rate=56517
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1293
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:language=und
TAG:handler_name=SoundHandler
[/STREAM]
[FORMAT]
filename=input.mp4
nb_streams=2
nb_programs=0
format_name=mov,mp4,m4a,3gp,3g2,mj2
format_long_name=QuickTime / MOV
start_time=-0.023220
duration=30.024000
size=368644
bit_rate=98226
probe_score=100
TAG:major_brand=isom
TAG:minor_version=512
TAG:compatible_brands=isomiso2avc1mp41
TAG:title=FFprobe Tips
TAG:encoder=Lavf56.15.101
[/FORMAT]
根据上面的示例,如果你只希望持续时间=30.024000。
$ ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1 input.mp4
Output: size=368644
如果你只想要没有键的值。
$ ffprobe -v error -show_entries format=size -of default=noprint_wrappers=1:nokey=1 input.mp4
Output: 368644
正在获取视频的宽度和高度(分辨率)
$ ffprobe -v error -select_streams v:0 -show_entries stream=height,width -of csv=s=x:p=0 input.mp4
Output: 1280x720
FFplay用法和示例
用法
ffplay [OPTIONS] [INPUT_FILE]
man ffplay
— 参考手册。
ffplay -h
— 显示帮助。
ffplay
— 全屏播放视频。
-x -y
—播放具有特定高度和宽度的视频,在中间弹出窗口大小。如果弹出窗口和视频的纵横比不同,它将自动填充视频区域和窗口区域之间的额外空间。
-noborder
—在弹出窗口中播放视频时隐藏标题栏。
-[top/left/bottom/right]
— 在特定坐标中创建弹出窗口。默认情况下,它会在屏幕中央弹出。
你可以在这里找到更多的FFplay用法:https://ffmpeg.org/ffplay-all.html
全屏播放名为video.mp4的视频文件。
$ ffplay video.mp4
在弹出窗口中播放视频文件,大小为600宽,600高,没有标题栏。
$ ffplay video.mp4 -x 600 -y 600 -noborder
在左上角的弹出窗口中播放视频文件。
$ ffplay video.mp4 -x 600 -y 600 -noborder -top 0 -left 0
本文已经涵盖了FFmpeg中的所有基础知识。
https://ffmpeg.org/documentation.html
https://trac.ffmpeg.org/wiki/FFprobeTips
https://ffmpeg.org/ffplay-all.html
https://ffmpeg.org/ffprobe.html
FFmpeg Complete Guide by Syed Andaleeb Roomy
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓