FFmpeg — 应用程序中强大的视频音频助手

AI算法与图像处理

共 6983字,需浏览 14分钟

 ·

2021-09-23 19:18

点击下方AI算法与图像处理”,一起进步!

重磅干货,第一时间送达

目录
  1. 什么是FFmpeg?
  2. 人们为什么使用 FFmpeg?
  3. 如何在 Windows、Ubuntu 和 macOS 中设置 FFmpeg。
  4. FFmpeg 中提供了用于媒体操作的库。
  5. FFmpeg 为命令行应用程序提供的工具。
  6. FFprobe 和 FFplay 的用法和示例。

什么是FFmpeg?

这个名字的灵感来自 MPEG,意思是运动图像专家组。FF 的意思是快进。
MPEG 组是制定当今许多基本视频标准(包括我们都熟悉的 MP4 格式)背后的工作组联盟。

人们为什么使用 FFmpeg?

它通常被称为媒体转码或流媒体的瑞士军刀。我们可以使用 FFmpeg 来执行很多功能。代码是用 C 语言编写的,并针对最佳性能进行了优化。它的命令很容易运行。一旦你熟悉了这些概念,就可以非常灵活地使用所有过滤器和选项来满足你的需求。
FFmpeg 支持广泛的代码、格式、设备和协议,这使其成为转码引擎的理想选择。与许多已停产的项目不同,20 多年来它仍在积极开发 。有一个庞大的开发人员、用户和贡献者社区,他们不断开发新功能和修复程序。
FFmpeg 已被用于 YouTube 和 iTunes 等视频平台的核心处理。我们大多数人都使用像 VLC 这样的媒体播放器来播放视频文件。VLC 使用 FFmpeg 库作为其核心。一些视频编辑器和移动应用程序也在幕后使用 FFmpeg。

在 Windows、Ubuntu 和 macOS 中设置 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 安装成功。

Windows

与 Ubuntu 上的 APT 和 macOS 上的 Homebrew 不同,Windows 上没有可以用来快速安装 FFmpeg的包管理器。
对于 Windows,你需要手动关闭并设置它。
可以在此处(https://www.gyan.dev/ffmpeg/builds/)找到 4 个 Windows FFmpeg 构建变体:
  1. git full – 从具有大量库的主分支构建。
  2. git essentials – 从带有常用库的主分支构建。
  3. release full – 从具有大量库的最新版本分支构建。
  4. release essentials – 使用常用库从最新版本分支构建。
在我们的案例中,我们将使用 FFmpeg 发布版。
  • 在此处下载 FFmpeg 发布版:https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip
  • 将文件解压缩到将来要使用它们的地方。就我而言,我将它们放在我的 E盘中。
  • 里面的bin文件夹包含这些可执行文件。
  • bin文件夹添加到Windows环境路径变量中,这样我们就可以运行这个工具而不必每次都指定完整路径。在搜索栏中搜索环境变量,然后单击环境变量。
  • 单击用户变量中的路径,单击新建,并粘贴bin的完整路径文件夹。
  • 打开命令提示符并键入ffmpeg -version. 如果你看到打印出 FFmpeg 版本,则表示 FFmpeg 安装成功。我们还可以检查ffprob -versionffplay -version

FFmpeg 库

FFmpeg 有几个有价值的库,你可以直接从你的应用程序代码中使用它们。每个库都包含与特定区域相关的不同功能。
一些著名的库是:
  1. libavcodec — 包含 FFmpeg 支持的所有编码器和解码器。
  2. libavformat — 拥有处理各种容器格式的所有复用器和解复用器。
  3. libavfilter — 由许多过滤器组成,你可以根据需要使用它们来修改音频或视频。
  4. libavdevice——支持多种不同的输入和输出设备。
  5. libavutil — 辅助便携式多媒体编程。
  6. libswscale — 执行高度优化的图像缩放以及色彩空间和像素格式转换操作。
  7. libswresample — 执行高度优化的音频重采样、重新混合和样本格式转换操作。

FFmpeg 工具

除了可以从其他应用程序使用的库之外,FFmpeg 包本身还包含一些工具。
其中一些工具是:
  1. FFmpeg — 主要转码引擎。它通常从命令行或其他进程调用。
  2. ffplay — 播放音频或视频的最小工具。
  3. ffprobe — 快速检查媒体以提取有价值的信息,例如媒体中有多少流、视频的帧速率等。

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
努力分享优质的计算机视觉相关内容,欢迎关注:

交流群


欢迎加入公众号读者群一起和同行交流,目前有美颜、三维视觉计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群


个人微信(如果没有备注不拉群!
请注明:地区+学校/企业+研究方向+昵称



下载1:何恺明顶会分享


AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析


下载2:终身受益的编程指南:Google编程风格指南


AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!



下载3 CVPR2021

AI算法与图像处公众号后台回复:CVPR即可下载1467篇CVPR 2020论文 和 CVPR 2021 最新论文

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报