Home FFmpeg基本使用
Post
Cancel

FFmpeg基本使用

关于FFmpeg

FFmpeg是一种开源的跨平台多媒体处理工具套件,它由一组用C语言编写命令行工具组成。 FFmpeg可以用于处理视频、音频和其他多媒体数据,包括转换、编辑、编解码、解码、流媒体传输等。

以下是FFmpeg的主要特点和功能:

  1. 跨平台:FFmpeg可在多种操作系统上运行,如Windows、macOS、Linux以及其他一些嵌入式系统。

  2. 视频编解码:FFmpeg支持众多视频编解码器,包括H.264、H.265、VP9、MPEG-2、AV1等,使得你可以转换视频格式、压缩视频、解码视频等。

  3. 音频编解码:FFmpeg支持多种音频编解码器,如AAC、MP3、Opus、FLAC等,允许你转换音频格式、压缩音频、解码音频等。

  4. 视频滤镜:FFmpeg内置了丰富的视频滤镜,如裁剪、缩放、旋转、色彩调整等,可以用于视频编辑和后期处理。

  5. 音频滤镜:类似于视频滤镜,FFmpeg提供了音频滤镜,允许你应用均衡器、混响、降噪等效果。

  6. 媒体格式转换:FFmpeg支持几乎所有常见的音视频容器格式,如MP4、AVI、MKV、MOV等,可进行互相转换。

  7. 视频流处理:FFmpeg具备处理网络流媒体的能力,可以实现直播流的捕捉、转发和接收。

  8. 音视频录制:FFmpeg支持从摄像头、麦克风等设备进行音视频录制。

  9. 高度灵活:FFmpeg可以通过命令行进行使用,也可以嵌入到其他应用程序中,让开发者能够根据需要进行自定义处理。

  10. 开源自由:FFmpeg是一个开源项目,遵循LGPL(GNU Lesser General Public License)协议,因此允许用户自由使用和修改。

由于FFmpeg拥有强大的功能和广泛的应用领域,许多视频播放器、转换工具、编辑软件和流媒体平台都在其基础上构建了自己的解决方案。 然而,由于其复杂性和命令行界面,FFmpeg对于不熟悉命令行操作的用户来说可能有一定的学习曲线。因此,也有一些基于FFmpeg的图形界面应用程序,使得使用更加友好和便捷。

获取FFmpeg

可从网站获取FFmpeg的源代码,或者软件包,可执行文件等。地址:https://ffmpeg.org/download.html

官方文档

FFmpeg的文档内容很多,包括命令行工具,库文件使用说明,API文档,组件文档,通用文档等。

https://ffmpeg.org/documentation.html

这里记录一些命令行工具的使用。

FFmpeg基础命令行

FFmpeg的命令行工具主要是3个。可以查看其man手册,不过内容较多。

  1. ffmpeg: 这是FFmpeg的核心工具,用于处理视频和音频文件。它支持多种输入格式和编解码器,并可以进行转换、编辑、编码、解码等操作。

  2. ffprobe: 这个工具用于分析媒体文件的详细信息,包括视频和音频流的参数、码率、分辨率等。可以通过该命令获取媒体文件的技术信息。

  3. ffplay: 这是FFmpeg提供的简易媒体播放器,可以播放音视频文件,是一个用于测试和预览的工具。

安装

可以从官网下载编译后的二进制包,名称即为ffmpeg,不过该软件包依赖的包太多了,(有一些是ffmpeg的库的软件包),好在可以从软件仓库中直接安装,自动处安装依赖的软件包。这里就使用apt工具安装了。系统为Debian10。 可以先查看一下该软件包的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ apt show ffmpeg
Package: ffmpeg
Version: 7:4.1.11-0+deb10u1
Priority: optional
Section: video
Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Installed-Size: 2,016 kB
Depends: libavcodec58 (= 7:4.1.11-0+deb10u1), libavdevice58 (= 7:4.1.11-0+deb10u1), 
libavfilter7 (= 7:4.1.11-0+deb10u1), libavformat58 (= 7:4.1.11-0+deb10u1), 
libavresample4 (= 7:4.1.11-0+deb10u1), libavutil56 (= 7:4.1.11-0+deb10u1), 
libc6 (>= 2.14), libpostproc55 (= 7:4.1.11-0+deb10u1), libsdl2-2.0-0 (>= 2.0.9), 
libswresample3 (= 7:4.1.11-0+deb10u1), libswscale5 (= 7:4.1.11-0+deb10u1)
Suggests: ffmpeg-doc
Breaks: libav-tools (<< 6:12~~), qt-faststart (<< 7:2.7.1-3~), winff (<< 1.5.5-5~)
Replaces: libav-tools (<< 6:12~~), qt-faststart (<< 7:2.7.1-3~)
Homepage: https://ffmpeg.org/
Download-Size: 1,444 kB
APT-Sources: http://mirrors.ustc.edu.cn/debian-security buster/updates/main amd64 Packages
Description: Tools for transcoding, streaming and playing of multimedia files
 FFmpeg is the leading multimedia framework, able to decode, encode, transcode,
 mux, demux, stream, filter and play pretty much anything that humans and
 machines have created. It supports the most obscure ancient formats up to the
 cutting edge.
 .
 This package contains:
  * ffmpeg: a command line tool to convert multimedia files between formats
  * ffplay: a simple media player based on SDL and the FFmpeg libraries
  * ffprobe: a simple multimedia stream analyzer
  * qt-faststart: a utility to rearrange Quicktime files

N: There is 1 additional record. Please use the '-a' switch to see it

直接安装即可

1
sudo apt install ffmpeg ffmpeg-doc

ffplay 工具

安装了FFmpeg后,可以通过ffplay命令在终端中使用简易媒体播放器。ffplay工具可以播放视频和音频文件,并且支持常见的媒体格式。 它可能不像图形界面播放器那样拥有丰富的功能和控制选项,主要是用于快速预览和简单的播放需求。

ffplay工具的基本使用方式(不添加任何选项参数):

播放视频文件:

1
ffplay /path/to/your/video/file.mp4

播放音频文件,可以输入类似的命令:

1
ffplay /path/to/your/audio/file.mp3

ffplay工具支持网络流媒体的播放,只需在线视频的URL,例如,播放一个在线视频:

1
ffplay http://example.com/path/to/your/video/stream.mp4

ffplay支持常见的快捷键来控制播放:

ffprobe 工具

安装了FFmpeg后,ffprobe是一个非常有用的工具,用于分析媒体文件的详细信息。可以获取视频和音频文件的技术参数、码率、分辨率等信息,以便更好地了解和处理媒体文件。

ffprobe工具的基本使用方式:(和ffplay类似)

1
2
3
4
5
6
7
8
# 分析视频文件:
ffprobe /path/to/your/video/file.mp4

#分析音频文件
ffprobe /path/to/your/audio/file.mp3

# 基于网络地址分析流媒体文件信息
ffprobe http://example.com/path/to/your/video/stream.mp4

默认情况下,ffprobe将显示媒体文件的详细信息,包括格式、码率、时长、分辨率、音频/视频流信息等。 如果只想获取部分信息,可以使用一些选项来过滤输出。例如,使用-show_format选项来仅显示格式信息,使用-show_streams选项来仅显示媒体流信息。

ffmpeg 工具

安装了FFmpeg后,ffmpeg是一个非常强大的工具,用于处理音视频文件。 它支持提取音视频、转换、编辑、编解码、解码、滤镜应用等多种功能,是一个非常灵活的多媒体处理工具。

以下是ffmpeg工具的基本的简单使用示例:具体用法太多,可以参考官方文档https://ffmpeg.org/ffmpeg.html

转换视频格式

1
ffmpeg -i input.mp4 output.avi

-i 指定输入文件,最后参数为输出文件名。这将把名为input.mp4的视频文件转换为output.avi的AVI格式。

转换音频格式

1
ffmpeg -i input.mp3 output.ogg

这将把名为input.mp3的音频文件转换为output.ogg的Ogg格式。

调整视频尺寸

1
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4

这将把名为input.mp4的视频文件调整为640x480的分辨率,并输出为output.mp4

视频画面裁剪

1
ffmpeg -i input.mp4 -vf "crop=480:320:100:100" output.mp4

这里的裁剪不是时间上截取一部分,而是画面上的裁剪,即裁剪出一个当前流媒体文件的子集,画面是原来画面上的部分,“挖取”一部分出来。 crop参数为crop=w:h:x:y:分别是裁剪的宽高和裁剪的位置。从源视频的(x,y)处,做一个宽为w,高为h的矩形,把从源视频里减出来。 这里是把名为input.mp4的视频文件从(100, 100)起点坐标,裁剪出一个480x320的区域,并输出为output.mp4

截取视频片段

1
ffmpeg -i input.mp4 -ss 00:00:20 -t 00:00:40 -c copy output.mp4

这里是截取视频的一个片段,这里精确到秒。 -ss 指定截取视频的开始时间,-t指定截取长度。-c copy:表示直接拷贝视频流和音频流, 避免重新编码,加快处理速度。

提取音频

1
2
3
ffmpeg -i input.mp4 -vn  -c:a copy output_audio.mp3
## 或者
ffmpeg -i input.mp4 -vn  -c:a libmp3lame -b:a 320k output_audio.mp3

注意:先使用ffprobe查看流媒体文件中的音频文件格式,保存的音频文件格式需要是一致的,mp3->mp3 ,aac->aac,这样,然后可以再转。

第二个是使用320k比特率编码为mp3格式。

提取视频

1
ffmpeg -i input.mp4 -an -c:v copy output_video.mp4

合并音视频

1
ffmpeg -i input_video.mp4 -i input_audio.mp3 -c:v copy -c:a copy output.mp4

这将把名为input_video.mp4的视频文件和名为input_audio.mp3的音频文件合并,并输出为output.mp4,采用原始的视频和音频编码。

添加水印

1
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4

这将在名为input.mp4的视频文件上添加名为watermark.png的水印,水印位置为(10, 10),并输出为output.mp4

这些只是ffmpeg工具的一小部分功能示例,它的功能非常丰富,可以根据不同的需求进行灵活的多媒体处理。

参考文档

FFmpeg Documentation

FFMPEG命令入门到提高

This post is licensed under CC BY 4.0 by the author.

PCIe RC设备树

linux桌面环境简单了解