Linux下的FFmpeg命令是一款功能强大的多媒体处理工具,它能够处理音频、视频、字幕等多种媒体格式,支持编解码、转码、流媒体传输、滤镜处理等多种操作,FFmpeg的命令行工具以其高效和灵活著称,广泛应用于视频剪辑、格式转换、流媒体推流等场景,本文将详细介绍FFmpeg的核心功能、常用参数及实际应用案例,帮助用户快速掌握这一工具。

FFmpeg基本结构与核心组件
FFmpeg主要由三个核心组件构成:ffmpeg(多媒体处理工具)、ffprobe(媒体分析工具)和ffplay(媒体播放工具),ffmpeg是命令行工具,用于执行编解码、转码等操作;ffprobe用于分析媒体文件的格式、编码信息等;ffplay则用于快速预览媒体文件,这三个组件协同工作,为用户提供了完整的媒体处理解决方案。
常用参数与选项
FFmpeg的命令行参数丰富且灵活,以下是一些常用参数及其功能说明:
| 参数 | 功能描述 |
|---|---|
-i |
输入文件,指定要处理的媒体文件路径 |
-c |
编解码器,用于指定视频或音频的编解码方式,如-c:v表示视频编解码器,-c:a表示音频编解码器 |
-b:v |
视频比特率,控制视频输出质量,如-b:v 1M表示比特率为1Mbps |
-r |
帧率,控制视频的每秒帧数,如-r 30表示帧率为30fps |
-s |
分辨率,设置视频的宽高,如-s 1920x1080 |
-ss |
开始时间,用于指定处理的起始时间点,如-ss 00:01:30 |
-t |
持续时间,指定处理的时长,如-t 10表示处理10秒 |
-vf |
视频滤镜,用于对视频应用滤镜效果,如-vf "scale=1280:720" |
-af |
音频滤镜,用于对音频应用滤镜效果,如-af "volume=2.0" |
-f |
输出格式,指定输出文件的格式,如-f mp4 |
-y |
覆盖输出文件,如果输出文件已存在则直接覆盖 |
实际应用案例
视频格式转换
将MP4视频转换为AVI格式,并指定视频编码为Xvid,音频编码为MP3:
ffmpeg -i input.mp4 -c:v libxvid -c:a mp3 output.avi
提取视频中的音频
从视频中提取音频并保存为MP3格式:

ffmpeg -i input.mp4 -vn -acodec mp3 output.mp3
-vn表示禁用视频轨道。
裁剪视频片段
从视频中裁剪出从00:01:30开始,时长为10秒的片段:
ffmpeg -ss 00:01:30 -i input.mp4 -t 10 -c copy output.mp4
-c copy表示直接复制流而不重新编码,以提高处理速度。
调整视频分辨率与帧率
将视频分辨率调整为1280x720,帧率调整为25fps:

ffmpeg -i input.mp4 -vf "scale=1280:720" -r 25 output.mp4
添加水印
在视频右下角添加文字水印:
ffmpeg -i input.mp4 -vf "drawtext=text='Watermark':fontfile=/path/to/font.ttf:x=w-tw:y=h-th:fontsize=24:fontcolor=white@0.8" output.mp4
w和h表示视频宽高,tw和th表示文本宽高。
推送RTMP流
将视频推送到RTMP服务器:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream_key
-re表示以真实时间速率读取输入文件,避免推流过快。
高级功能与技巧
FFmpeg还支持复杂的多媒体处理任务,如多轨道处理、流媒体转封装等,将视频和音频分别编码后合并为一个文件:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac output.mp4
FFmpeg的滤镜功能非常强大,可以结合多个滤镜实现复杂效果,如视频降噪、色彩调整等:
ffmpeg -i input.mp4 -vf "hqdn3d=rm=5:ls=5:cm=5:ct=5" output.mp4
该命令使用hqdn3d滤镜对视频进行降噪处理。
性能优化建议
在使用FFmpeg处理大文件时,可以通过以下方式优化性能:
- 硬件加速:使用
-hwaccel参数启用硬件加速,如-hwaccel cuda(NVIDIA GPU)或-hwaccel qsv(Intel QSV)。 - 多线程处理:通过
-threads参数指定线程数,如-threads 4。 - 避免重新编码:在格式转换或裁剪时,尽量使用
-c copy以减少处理时间。
相关问答FAQs
Q1: 如何使用FFmpeg合并多个视频文件?
A1: 可以使用FFmpeg的concat demuxer合并多个视频文件,首先创建一个文本文件(如filelist.txt),列出要合并的文件路径:
file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'
然后执行以下命令:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
注意:如果文件编码不同,可能需要重新编码。
Q2: FFmpeg处理视频时如何保留元数据?
A2: 默认情况下,FFmpeg会保留部分元数据,但某些元数据可能会丢失,可以使用-map_metadata参数显式保留元数据:
ffmpeg -i input.mp4 -map_metadata 0 -c copy output.mp4
-map_metadata 0表示从输入文件复制元数据到输出文件。
