“`markdown
FFmpeg视频处理:学习如何裁剪和编辑
FFmpeg 是一个功能强大的开源命令行工具,用于处理、转换、编辑和流式传输音频和视频文件。它支持多种格式和编解码器,是多媒体工作人员必不可少的工具。
本教程将指导您完成安装 FFmpeg 并使用其命令行界面执行常见的视频编辑任务。
1. 安装
在使用 FFmpeg 之前,您需要在您的系统上安装它。
Windows
- 下载: 访问 FFmpeg 官方网站 (ffmpeg.org) 或推荐的 Windows 版本构建网站,如
gyan.dev。下载ffmpeg-release-full.7z文件以获得完整功能集。 - 解压: 将下载的
.7z文件内容解压到目录中,例如C:\FFmpeg。 - 添加到 PATH: 将 FFmpeg 目录中的
bin文件夹路径(例如C:\FFmpeg\bin)添加到系统的 PATH 环境变量中。这允许您从命令提示符中的任何目录运行 FFmpeg 命令。 - 验证: 打开新的命令提示符或 PowerShell 窗口,然后键入
ffmpeg -version。如果安装正确,您将看到 FFmpeg 版本信息。
macOS
- 安装 Homebrew: 如果您没有 Homebrew,请打开终端并按照 Homebrew 官方网站上的说明进行安装。
- 安装 FFmpeg: 安装 Homebrew 后,打开终端并运行:
bash
brew install ffmpeg - 验证: 在终端中,键入
ffmpeg -version。您应该会看到 FFmpeg 版本信息。
Linux (Ubuntu/Debian)
- 更新软件包存储库: 打开终端并运行:
bash
sudo apt update - 安装 FFmpeg: 使用您的软件包管理器安装 FFmpeg:
bash
sudo apt install ffmpeg - 验证: 在终端中,键入
ffmpeg -version。您应该会看到 FFmpeg 版本信息。
2. 基本视频编辑操作
以下是您可以使用 FFmpeg 执行的一些常见视频编辑任务。
2.1. 转换视频格式
要将视频从一种格式转换为另一种格式,请指定输入和输出文件。FFmpeg 将根据输出文件扩展名自动选择适当的编解码器。
bash
ffmpeg -i input.mp4 output.avi
* -i input.mp4: 指定 input.mp4 为输入文件。
* output.avi: 指定 output.avi 为输出文件。
2.2. 裁剪/剪切视频
您可以通过指定开始时间 (-ss) 和结束时间 (-to) 或持续时间 (-t) 来裁剪视频。
按开始时间和持续时间裁剪
这种方法通常更快,因为它使用“输入搜索”(在 -i 之前放置 -ss),在处理之前搜索到指定的开始时间。
bash
ffmpeg -ss 00:01:00 -i input.mp4 -t 00:00:30 -c copy output.mp4
* -ss 00:01:00: 从 1 分钟开始裁剪(HH:MM:SS 格式)。
* -i input.mp4: 您的输入视频。
* -t 00:00:30: 指定输出视频的持续时间为 30 秒。
* -c copy: 复制视频和音频流而不重新编码,这样速度非常快并能保持质量。
按开始和结束时间裁剪
您还可以使用 -to 指定确切的结束时间。
bash
ffmpeg -ss 00:01:00 -i input.mp4 -to 00:01:30 -c copy output.mp4
* -to 00:01:30: 在 1 分 30 秒处结束裁剪。
2.3. 调整视频大小/缩放
使用 scale 视频滤镜 (-vf scale) 更改视频的分辨率。
缩放到特定尺寸(保持宽高比)
要在保持宽高比的同时调整大小,请设置一个维度,另一个使用 -1。FFmpeg 将自动计算正确的值。
bash
ffmpeg -i input.mp4 -vf "scale=1280:-1" output_1280w.mp4
* scale=1280:-1: 将宽度设置为 1280 像素,并自动计算高度以保持宽高比。
缩放到特定尺寸(不保持宽高比,可能会失真)
如果您明确指定宽度和高度,FFmpeg 将拉伸或压缩视频以适应,可能会导致失真。
bash
ffmpeg -i input.mp4 -vf "scale=640:480" output_640x480.mp4
* scale=640:480: 将视频大小调整为 640×480 像素。
2.4. 添加水印
您可以向视频中添加图像和文本水印。
添加图像水印
使用 overlay 滤镜将图像(例如徽标)添加为水印。
bash
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermarked.mp4
* -i watermark.png: 指定水印图像文件。
* -filter_complex "overlay=10:10": 应用 overlay 滤镜,将水印放置在距左边缘 10 像素和上边缘 10 像素的位置。
* 您可以使用 main_w、main_h、overlay_w、overlay_h 等变量进行动态定位(例如,overlay=main_w-overlay_w-10:main_h-overlay_h-10 表示右下角)。
添加文本水印
使用 drawtext 滤镜直接在视频上添加文本。
bash
ffmpeg -i input.mp4 -vf "drawtext=text='Your Watermark':fontfile=/path/to/font.ttf:fontsize=24:fontcolor=white:x=10:y=H-th-10" output_text_watermarked.mp4
* drawtext=text='Your Watermark': 设置文本内容。
* fontfile=/path/to/font.ttf: 指定字体文件(可选,但建议用于特定字体)。
* fontsize=24: 设置字体大小。
* fontcolor=white: 设置文本颜色。
* x=10:y=H-th-10: 将文本放置在距左边缘 10 像素和下边缘 10 像素的位置(H-th-10 表示视频高度减去文本高度再减去 10 像素)。
2.5. 连接视频
要将多个视频剪辑合并为一个,特别是如果它们具有相同的编解码器、分辨率和帧率,concat 分离器是高效的,因为它避免了重新编码。
- 创建文本文件 (例如,
mylist.txt),列出您的视频文件,每行一个,如下所示:
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4' - 运行 FFmpeg 命令:
bash
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output_concatenated.mp4-f concat: 告诉 FFmpeg 使用concat分离器。-safe 0: 禁用文件路径检查,如果您的路径包含特殊字符或空格,则很有用。-i mylist.txt: 指定包含视频列表的文本文件。-c copy: 复制流而不重新编码,以提高速度和保持质量。
2.6. 提取帧/缩略图
您可以从视频中提取单个帧或一系列帧。
在特定时间提取单个帧
bash
ffmpeg -ss 00:00:05 -i input.mp4 -frames:v 1 thumbnail.jpg
* -ss 00:00:05: 搜索到 5 秒标记。
* -frames:v 1: 告诉 FFmpeg 只提取一个视频帧。
* thumbnail.jpg: 输出图像文件。
定期提取帧(例如,每秒一帧)
bash
ffmpeg -i input.mp4 -vf "fps=1" frame_%04d.png
* -vf "fps=1": 每秒提取一帧。
* frame_%04d.png: 指定输出文件名模式(例如 frame_0001.png、frame_0002.png)。
2.7. 从视频中提取音频
要从视频文件中提取音轨,请使用 -vn 选项(无视频)。
bash
ffmpeg -i input.mp4 -vn audio.mp3
* -vn: 禁用视频录制,只提取音频。
* audio.mp3: 输出音频文件。
2.8. 从视频中删除音频
要创建静音视频,请使用 -an 选项(无音频)。
bash
ffmpeg -i input.mp4 -an -c:v copy output_silent.mp4
* -an: 禁用音频录制,删除所有音轨。
* -c:v copy: 复制视频流而不重新编码。
2.9. 向视频中添加音频
您可以向视频添加外部音轨。
bash
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -map 0:v -map 1:a -shortest output_with_audio.mp4
* -i video.mp4: 输入视频文件。
* -i audio.mp3: 输入音频文件。
* -c:v copy: 复制视频流而不重新编码。
* -map 0:v: 选择第一个输入(video.mp4)的视频流。
* -map 1:a: 选择第二个输入(audio.mp3)的音频流。
* -shortest: 确保输出持续时间与最短的输入流(视频或音频)匹配。
2.10. 应用滤镜
FFmpeg 的滤镜功能非常广泛。您可以使用 -vf(视频滤镜)或 -af(音频滤镜)应用单个滤镜,或使用 -filter_complex 组合多个滤镜。
示例:调整亮度(视频滤镜)
bash
ffmpeg -i input.mp4 -vf "eq=brightness=0.1" output_brighter.mp4
* eq=brightness=0.1: 将亮度增加 0.1。
示例:多个滤镜(视频滤镜链)
您可以用逗号链接多个视频滤镜。
bash
ffmpeg -i input.mp4 -vf "scale=640:-1,eq=contrast=1.5" output_scaled_contrast.mp4
* scale=640:-1: 将视频大小调整为 640px 宽度,保持宽高比。
* eq=contrast=1.5: 增加对比度。
本教程涵盖了一些最常见的 FFmpeg 视频编辑命令。FFmpeg 的文档非常庞大,当您对基础知识更加熟悉后,可以探索更多高级功能和滤镜。
“`