CentOS FFmpeg命令大全与实用案例
引言
FFmpeg 是一套领先的开源多媒体框架,能够对音频、视频、字幕及其他多媒体内容进行录制、转换、流化等多种处理。无论您是需要进行简单的格式转换,还是复杂的视频编辑和流媒体推送,FFmpeg 都是一个功能极其强大且灵活的命令行工具。本文将详细介绍如何在 CentOS 系统上安装 FFmpeg,并提供一系列从基础到高级的命令大全和实用案例。
在 CentOS 上安装 FFmpeg
由于许可证原因,FFmpeg 通常不包含在 CentOS 的官方核心仓库中。我们需要借助 EPEL (Extra Packages for Enterprise Linux) 和 RPM Fusion 这两个第三方仓库来完成安装。
适用于 CentOS 7
-
安装 EPEL 和 RPM Fusion 仓库:
“`bash
# 安装 EPEL
sudo yum install -y epel-release安装 RPM Fusion
sudo yum localinstall –nogpgcheck -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
“` -
安装 FFmpeg:
bash
sudo yum install -y ffmpeg ffmpeg-devel -
验证安装:
bash
ffmpeg -version
适用于 CentOS 8/9 Stream
-
安装 EPEL 和 RPM Fusion 仓库:
“`bash
# 启用 CRB (CodeReady Builder) / powertools
sudo dnf config-manager –set-enabled crb
# for CentOS 8 Stream, use ‘powertools’
# sudo dnf config-manager –set-enabled powertools安装 EPEL
sudo dnf install -y epel-release
安装 RPM Fusion
sudo dnf install –nogpgcheck -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
“` -
安装 FFmpeg:
bash
sudo dnf install -y ffmpeg ffmpeg-devel -
验证安装:
bash
ffmpeg -version
FFmpeg 基础命令语法
FFmpeg 的命令结构非常灵活,其基本格式如下:
ffmpeg [全局选项] [输入文件选项] -i [输入文件] [输出文件选项] [输出文件]
-i: 指定输入文件。-c: 指定编解码器,如-c:v(视频编码器) 和-c:a(音频编码器)。-vf: 视频滤镜,用于处理视频帧。-af: 音频滤镜,用于处理音频样本。-ss: 指定开始时间(例如00:01:23.000或83(秒))。-t: 指定持续时间。-to: 指定结束时间。
命令大全与实用案例
1. 信息查询与格式转换
查看媒体文件信息
在进行任何操作之前,首先查看文件的详细信息(编码格式、分辨率、比特率等)是一个好习惯。
bash
ffmpeg -i input.mp4
视频格式转换
这是 FFmpeg 最常见的用途之一。FFmpeg 会根据输出文件的扩展名自动选择合适的封装格式。
“`bash
将 MP4 转换为 WebM
ffmpeg -i input.mp4 output.webm
将 MOV 转换为 MP4,同时指定视频编码为 H.264,音频编码为 AAC
ffmpeg -i source.mov -c:v libx264 -c:a aac output.mp4
“`
音频格式转换
“`bash
将 MP3 转换为 OGG
ffmpeg -i audio.mp3 audio.ogg
从视频中提取音频并保存为 MP3
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
“`
-vn: 表示忽略视频流。-q:a 2: 设置 MP3 的可变比特率质量(0-9,值越低质量越高)。
2. 视频编辑与处理
剪辑视频
“`bash
从第 10 秒开始,剪辑 15 秒时长的视频
ffmpeg -i input.mp4 -ss 10 -t 15 output.mp4
指定开始和结束时间点进行剪辑
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
“`
-c copy: 如果输入和输出格式相同,此选项会直接复制流,不进行重新编码,速度极快且无质量损失。
合并多个视频
如果视频的编码格式、分辨率等参数都相同,可以使用 concat demuxer 来快速合并。
-
创建一个名为
filelist.txt的文本文件,内容如下:
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4' -
执行合并命令:
bash
ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_video.mp4
调整视频尺寸(缩放)
“`bash
将视频分辨率缩放为 1280×720
ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4
保持宽高比,只指定宽度
ffmpeg -i input.mp4 -vf scale=640:-1 output_640w.mp4
“`
改变视频播放速度
“`bash
将视频播放速度加倍
ffmpeg -i input.mp4 -vf “setpts=0.5*PTS” fast_video.mp4
将视频播放速度减半
ffmpeg -i input.mp4 -vf “setpts=2.0*PTS” slow_video.mp4
“`
3. 音视频流处理
移除音频或视频
“`bash
移除视频中的音频(静音视频)
ffmpeg -i input.mp4 -an mute_video.mp4
从视频中移除视频,只保留音频
ffmpeg -i input.mp4 -vn audio_only.aac
“`
-an: (Audio No) 禁用音频。
添加/替换音频
“`bash
将一个独立的音轨合并到视频中
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest final_video.mp4
“`
-shortest: 使输出文件的时长与最短的输入流对齐。
4. 图像处理与生成
从视频中提取图片
“`bash
每秒提取一帧图片
ffmpeg -i input.mp4 -r 1 frame_%04d.png
在指定时间点精确提取单帧图片
ffmpeg -i input.mp4 -ss 00:00:05.500 -vframes 1 single_frame.jpg
“`
-%04d: 表示输出文件名将以4位数字序列命名(如frame_0001.png)。
将图片序列合成为视频
假设你有一系列名为 img001.jpg, img002.jpg, img003.jpg… 的图片。
“`bash
以每秒 24 帧的速度将图片序列合成为视频
ffmpeg -framerate 24 -i img%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
“`
-pix_fmt yuv420p: 指定像素格式,以确保在大多数播放器上的兼容性。
5. 高级实用案例
视频压缩
在保持可接受画质的前提下减小文件大小。CRF (Constant Rate Factor) 是最推荐的方式。
“`bash
使用 H.264 编码进行压缩,CRF 值范围为 0-51,值越小质量越高,文件越大。23 是一个很好的默认值。
ffmpeg -i input.mp4 -c:v libx264 -crf 25 compressed_video.mp4
“`
添加水印
“`bash
在视频右上角添加图片水印
ffmpeg -i input.mp4 -i watermark.png -filter_complex “overlay=main_w-overlay_w-10:10” watermarked_video.mp4
“`
overlay=main_w-overlay_w-10:10:main_w是主视频宽度,overlay_w是水印宽度。W-w-10计算出x坐标(右边距10px),10是y坐标(上边距10px)。
创建 GIF 动图
“`bash
从视频的第 3 秒开始,截取 5 秒内容制作高质量 GIF
ffmpeg -i input.mp4 -ss 3 -t 5 -vf “fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse” animation.gif
“`
这条命令比较复杂,它首先生成一个优化的调色板,然后用它来创建色彩更丰富的 GIF。
结论
FFmpeg 是一个功能深不可测的工具箱。本文仅仅涵盖了其众多功能中的冰山一角。掌握 FFmpeg 的关键在于理解其语法结构和丰富的滤镜系统。当您遇到特定的多媒体处理需求时,查阅其官方文档(ffmpeg -h 或 ffmpeg -h full)或在线社区,几乎总能找到解决方案。希望这篇指南能为您在 CentOS 上使用 FFmpeg 提供一个坚实的起点。