FFmpeg是一个开源的跨平台音视频处理工具,拥有强大的音视频编解码能力和丰富的处理功能。它支持包括视频、音频在内的多媒体数据的转换、编辑、播放等操作,被广泛应用于音视频领域的编解码、转码、流媒体处理等方面。
以下是FFmpeg的一些主要特点和功能:
- 丰富的格式支持:FFmpeg支持几乎所有常见的音视频格式,包括但不限于MPEG, AVI, WMV, FLV, MP4, MOV, MP3, AAC等。
- 强大的编解码能力:FFmpeg支持多种音视频编解码器,可以对各种格式的音视频进行高效的转换和处理。
- 视频处理功能:包括裁剪、旋转、缩放、添加水印、合并、分割等。
- 音频处理功能:包括音频剪辑、混音、转换、音频增益调节等。
- 流媒体处理:支持流媒体的采集、编码、转发和播放。
- 跨平台性:FFmpeg支持Windows、Mac OS和Linux等多个操作系统平台,且提供了相应的命令行工具和API接口,方便集成到各种应用程序中。
FFmpeg可以通过命令行工具进行操作,也可以通过其提供的库文件集成到其他应用程序中。由于其强大的功能和灵活的配置,FFmpeg被广泛应用于视频网站、流媒体平台、多媒体应用程序等领域。
下载ffmpeg: https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-full.7z
注意: 要把ffmpeg-7.0-full_build\bin 路径加入到系统PATH变量中;
使用gdigrab作为输入设备,捕获整个桌面的画面,并对其进行裁剪、编码和压缩。最终输出的视频时长为10秒
import subprocess
import os
output_file = "output.mp4"
# 如果文件已经存在,删除它
if os.path.exists(output_file):
os.remove(output_file)
# 设置ffmpeg命令
ffmpeg_cmd = [
'ffmpeg',
"-f", "gdigrab", # 使用 gdigrab 作为输入 指定输入设备为 GDI 屏幕抓取。
"-framerate", "30", # 设置帧率为 30
"-i", "desktop", # 捕获整个桌面
"-vf", "crop=800:600:100:100", # 裁剪视频,宽 800,高 600,起点 (10, 10)
"-c:v", "libx264", # 使用 libx264 编码
"-preset", "medium", # 使用预设以加快编码速度
"-crf", "20", # 设置质量参数,数值越低质量越高
'-t', '10', # 录制时长,这里设置为10秒
output_file # 输出文件名
]
# 调用ffmpeg命令
subprocess.run(ffmpeg_cmd)
# 选择合适的预设需要权衡编码速度和输出质量。以下是一些常见的预设选项,以及它们在编码速度和输出质量之间的权衡:
# 1. **ultrafast**:极快的编码速度,但输出质量可能受到影响。
# 2. **superfast**:非常快的编码速度,对输出质量的影响比 ultrafast 小一些。
# 3. **veryfast**:非常快的编码速度,输出质量较好。
# 4. **faster**:更快的编码速度,输出质量较好。
# 5. **fast**:快速的编码速度,输出质量较好。
# 6. **medium**:中等的编码速度和输出质量。
# 7. **slow**:慢速的编码速度,高质量的输出。
# 8. **slower**:更慢的编码速度,更高质量的输出。
# 9. **veryslow**:非常慢的编码速度,最高质量的输出。
# 根据你的需求,可以根据时间和质量的权衡来选择合适的预设。如果你需要尽快完成编码并且对输出质量要求不是特别高,可以选择速度更快的预设。
# 如果输出质量对你来说更为重要,那么可以选择输出质量更高的预设,尽管编码速度会相应降低。
下面是对命令行参数的解释:
-f gdigrab
:指定输入设备为GDI屏幕抓取,用于捕获桌面画面。-framerate 30
:设置帧率为30,即每秒捕获和处理30帧画面。-i desktop
:指定要捕获的输入源为整个桌面。-vf crop=800:600:100:100
:使用视频滤镜进行裁剪,将画面裁剪为宽度800、高度600,并且起点坐标为(100, 100)。-c:v libx264
:指定使用libx264编码器对视频进行编码。-preset medium
:设置编码预设为medium,以平衡编码速度和输出视频质量。-crf 20
:设置输出视频的质量参数,数值越低表示质量越高。这里设置为20。-t 10
:设置录制时长为10秒,即只录制10秒的视频。output_file
:指定输出文件名。
注意:请确保在运行命令之前,您已经定义了output_file
变量并将其替换为您想要保存视频的文件路径和名称。
-----------------
在设置 FFmpeg 命令参数时,参数的顺序会影响命令的执行效果。
通常来说,FFmpeg 命令的参数顺序是很重要的,因为它们决定了 FFmpeg 如何处理输入和输出。
一般情况下,FFmpeg 命令的基本结构是这样的: ffmpeg [输入参数] -i input_source [输出参数] output_file
[输入参数]:这些参数用于指定输入源的格式、帧率等信息。
-i input_source:指定输入源,可以是文件、摄像头、屏幕录制等。
[输出参数]:这些参数用于指定输出的格式、质量等信息。
output_file:指定输出文件的路径。
在设置参数时,确保将输入参数放在 -i input_source 之前,输出参数放在输出文件之前。
这样可以确保 FFmpeg 正确地解析参数并按照你的期望进行处理。
在实际应用中,如果你确定要覆盖输出文件,可以将 -y 参数放在最前面,以确保在运行命令时不会因为文件存在而出现中断或等待用户输入的情况。
当使用 FFmpeg 时,常见的输入参数和输出参数如下:
### 输入参数:
1. `-i input_source`:指定输入源,可以是文件、摄像头、屏幕录制等。
2. `-f format`:指定输入文件的格式。例如 `-f gdigrab`(Windows)、`-f avfoundation`(macOS)、`-f x11grab`(Linux)。
3. `-r framerate`:指定输入视频的帧率。
4. `-s resolution`:指定输入视频的分辨率。
5. `-c:v codec`:指定视频编解码器。
6. `-c:a codec`:指定音频编解码器。
7. `-t duration`:指定输入文件的持续时间。
8. `-ss position`:从输入文件的指定位置开始处理。
### 输出参数:
1. 输出文件路径:最后一个参数通常是输出文件的路径。
2. `-f format`:指定输出文件的格式。例如 `-f mp4`、`-f avi`。
3. `-r framerate`:指定输出视频的帧率。
4. `-s resolution`:指定输出视频的分辨率。
5. `-c:v codec`:指定视频编码器。
6. `-c:a codec`:指定音频编码器。
7. `-b:v bitrate`:指定视频比特率。
8. `-b:a bitrate`:指定音频比特率。
9. `-q:v quality`:指定输出视频的质量。
10. `-q:a quality`:指定输出音频的质量。
11. `-preset preset`:指定编码速度和质量的预设值。
12. `-crf crf_value`:指定视频的恒定质量参数。
13. `-pix_fmt pixel_format`:指定输出视频的像素格式。
14. `-ac audio_channels`:指定输出音频的声道数。
15. `-ar audio_sample_rate`:指定输出音频的采样率。
这些是常见的 FFmpeg 输入和输出参数,根据具体需求,你可以选择适当的参数来控制输入和输出的视频或音频文件的属性和质量。
--------------------
FFmpeg是一个跨平台的开源多媒体处理工具,它支持音频、视频等多种格式的转换、编码、解码和处理。下面是一些常见的FFmpeg命令参数的归纳:
- **输入/输出参数**:
- `-i <inputfile>`:指定输入文件。
- `-y`:覆盖输出文件而无需确认。
- `-c:v <codec>`:指定视频编解码器。
- `-c:a <codec>`:指定音频编解码器。
- `-s <size>`:指定输出视频的尺寸。
- `-b:v <bitrate>`:指定输出视频的比特率。
- `-b:a <bitrate>`:指定输出音频的比特率。
- `-r <framerate>`:指定输出视频的帧率。
- `-f <format>`:指定输出文件的格式。
- **视频参数**:
- `-vf <filtergraph>`:应用视频过滤器。
- `-vframes <number>`:限制输出帧数。
- `-ss <time>`:从指定时间开始处理。
- `-t <duration>`:设置输出持续时间。
- **音频参数**:
- `-af <filtergraph>`:应用音频过滤器。
- `-ar <rate>`:指定输出音频的采样率。
- `-ac <channels>`:指定输出音频的通道数。
- **编码器/解码器参数**:
- `-encoders`:列出可用的编码器。
- `-decoders`:列出可用的解码器。
- `-icodec <codec>`:指定输入流的解码器。
- `-vcodec <codec>`:指定视频流的编码器。
- `-acodec <codec>`:指定音频流的编码器。
- **其他参数**:
- `-hide_banner`:隐藏版本和版权信息。
- `-stats`:显示处理统计信息。
- `-loglevel <level>`:设置日志级别。
- `-h`:显示帮助信息。
这只是一些常见的FFmpeg命令参数,实际上还有很多其他参数可以探索和使用。你可以通过查阅官方文档或运行 `ffmpeg -h` 命令获取更详细的信息。