什么是FFmpeg?
FFmpeg是一款免费、开源的跨平台多媒体处理工具,它支持几乎所有的视频格式和编码标准。FFmpeg包含了一系列的子项目和工具,如ffmpeg
命令行工具用于转码和处理视频和音频文件,ffplay
用于播放多媒体内容,而ffprobe
则用于分析多媒体流的信息。
如何安装FFmpeg?
Windows
- 下载最新版的FFmpeg:访问官方网站或github下载。
- 解压缩到指定目录,例如:
C:\FFmpeg
。 - 添加FFmpeg到系统环境变量,确保能在任何路径下调用FFmpeg。
如果在尝试运行ffprobe
时收到 “不是内部或外部命令,也不是可运行的程序或批处理文件。” 的错误,这通常意味着ffprobe
(随 FFmpeg 一起安装)没有被添加到你的系统环境变量
macOS
推荐使用Homebrew,一个macOS的包管理器,通过简单的命令brew install ffmpeg
即可完成安装。
Linux
大部分Linux发行版的包管理器都包含FFmpeg。以Ubuntu为例,使用sudo apt-get install ffmpeg
命令即可安装。
如何添加 FFmpeg 到环境变量?
在 Windows 上:
- 找到 FFmpeg 的安装路径:记录下你解压缩 FFmpeg 的文件夹路径,需要找到
bin
目录的路径,例如C:\ffmpeg\bin
。 - 编辑环境变量:
- 在搜索栏中搜索并打开“系统环境变量”或“编辑系统环境变量”。
- 点击“环境变量”按钮。
- 在“系统变量”区域找到并选择变量名为“Path”的变量,然后点击“编辑”。
- 在编辑环境变量窗口,点击“新建”,然后粘贴你的 FFmpeg
bin
目录路径(例如C:\ffmpeg\bin
)。 - 点击“确定”保存你的更改,并关闭所有剩余的系统属性窗口。
- 验证安装:打开一个新的命令提示符窗口,输入
ffprobe -version
,如果安装成功,你将看到 FFmpeg 的版本信息,如下图所示即为成功:
在 macOS 或 Linux 上,通常通过终端安装 FFmpeg,路径会自动添加到环境变量中。如果遇到路径问题,可以手动添加路径到您的 shell 配置文件(如 .bash_profile
, .bashrc
, .zshrc
等)中。
查看视频的编码信息(重要
)
最大的作用是用来分析视频的兼容性问题!
-
打开命令行界面:这可以是 Windows 的命令提示符、PowerShell,或者是 macOS/Linux 的终端。
-
运行 ffprobe 命令:使用以下命令格式来获取视频文件的详细信息:
ffprobe -v error -show_format -show_streams 路径+视频名称.格式
比如:ffprobe -v error -show_format -show_streams "C:\Users\lenovo\Desktop\红黑树\2.mp4"
这里,-v error
选项意味着只显示错误消息,-show_format
和 -show_streams
选项用于显示文件的格式和各个流的详细信息。你需要将 your_video_file.mp4
替换为你想要检查的视频文件的路径和文件名。
运行这个命令后,ffprobe
会输出该视频文件的一系列信息,包括每个流(视频、音频等)的编解码器类型、分辨率、帧率等详细信息。具体地,你可以在输出中查找以下信息:
-
视频流(Video stream):查找
codec_name
字段可以知道视频编码类型(如h264
、hevc
等),width
和height
字段显示视频分辨率,avg_frame_rate
或r_frame_rate
显示帧率。 -
音频流(Audio stream):同样地,
codec_name
字段表示音频编码类型(如aac
、mp3
等)。
这些信息对于理解为何某些视频文件无法在特定的播放器或浏览器中播放非常有用,因为它可以帮助你确认文件是否使用了不被支持的编码格式。如果发现问题,您可以使用 FFmpeg 将视频转码为更兼容的格式。
以下是一个示例视频的编码信息:
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_tag_string=[27][0][0][0]
codec_tag=0x001b
width=850
height=480
coded_width=850
coded_height=480
closed_captions=0
film_grain=0
has_b_frames=2
sample_aspect_ratio=256:255
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=30
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=progressive
refs=1
is_avc=false
nal_length_size=0
ts_id=1
ts_packetsize=188
id=0x100
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
start_pts=133200
start_time=1.480000
duration_ts=156337200
duration=1737.080000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
extradata_size=41
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
[/STREAM]
[STREAM]
index=1
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_tag_string=[15][0][0][0]
codec_tag=0x000f
sample_fmt=fltp
sample_rate=44100
channels=2
channel_layout=stereo
bits_per_sample=0
initial_padding=0
ts_id=1
ts_packetsize=188
id=0x101
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/90000
start_pts=129020
start_time=1.433556
duration_ts=156328910
duration=1736.987889
bit_rate=67783
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:non_diegetic=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:language=eng
[/STREAM]
[FORMAT]
filename=C:\Users\lenovo\Desktop\浠嶤++绾㈤粦鏍戣璧?涓嶅彲鎾斁\浠嶤++绾㈤粦鏍戣璧穃绗竴绔?1\璇炬椂1-浠嶤++绾㈤粦鏍戣璧?mp4
nb_streams=2
nb_programs=1
nb_stream_groups=0
format_name=mpegts
format_long_name=MPEG-TS (MPEG-2 Transport Stream)
start_time=1.433556
duration=1737.126444
size=41636080
bit_rate=191746
probe_score=50
[/FORMAT]
基础使用技巧
视频转码
转码是FFmpeg最常见的应用之一。例如,将MKV格式转换为MP4:
ffmpeg -i input.mkv -codec copy output.mp4
裁剪视频
FFmpeg可以根据时间裁剪视频,无需重新编码:
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:20 -c copy output.mp4
合并视频
FFmpeg可以合并同格式的视频文件:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
其中filelist.txt
包含了所有要合并视频文件的列表。
提取音频
从视频文件中提取音频轨道:
ffmpeg -i input.mp4 -vn -acodec copy output.aac
高级应用
批量处理
FFmpeg支持批量处理文件,结合Shell脚本可以大幅提高工作效率。
实时流处理
FFmpeg支持处理实时视频流,可以用于直播场景。通过RTMP或HLS等协议推流和拉流。
视频滤镜
FFmpeg拥有丰富的滤镜库,支持视频剪辑、色彩校正、字幕添加等高级编辑功能。
ffmpeg -i input.mp4 -vf "fps=25,scale=1280:-1:flags=lanczos" -c:v libx264 -preset fast -c:a aac output.mp4
学习资源推荐
- FFmpeg官方文档:深入理解FFmpeg的最好资源。
- GitHub:许多开源项目使用FFmpeg,从中学习实际应用。