下载地址:Releases · BtbN/FFmpeg-Builds (github.com)
1. 获取视频信息
使用FFmpeg获取视频信息是最基本的操作之一。你可以使用-i
选项指定输入文件,然后使用FFmpeg内置的分析器来获取视频的各种信息,包括视频编解码器、音频编解码器、分辨率、帧率、码率等。
ffmpeg -i input.mp4
结果:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isomavc1
creation_time : 2024-03-12T03:09:36.000000Z
Duration: 00:00:22.93, start: 0.000000, bitrate: 24425 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 3840x2160, 24422 kb/s, 30 fps, 30 tbr, 30 tbn (default)
Metadata:
creation_time : 2024-03-12T03:09:36.000000Z
handler_name : Vimeo Artax Video Handler
vendor_id : [0][0][0][0]
encoder : AVC Coding
- 文件类型:mov, mp4, m4a, 3gp, 3g2, mj2 (这些都是 MPEG-4 媒体容器格式)
- 创建时间:2024年3月12日,03:09:36
- 持续时间:00:00:22.93
- 视频流信息:
- 编解码器:h264 (High),也就是 AVC (Advanced Video Coding),通常称为 H.264
- 视频像素格式:yuv420p,色彩空间为 YUV,采样结构为 4:2:0,色度信息被降采样
- 视频分辨率:3840x2160,即 4K 分辨率
- 比特率:24422 kb/s
- 帧率:30 帧每秒 (fps)
- 时间基:30 tbr (帧率)、30 tbn
- 其他元数据信息:包括创建时间、处理程序名称、供应商 ID、编码器等
2. 音视频分离
音视频分离是指将视频文件中的视频流和音频流分别提取出来。你可以使用FFmpeg的-vn
(禁用视频流)和-an
(禁用音频流)选项来实现这一功能。
# 提取视频流
ffmpeg -i input.mp4 -vn output_audio.mp3
# 提取视频流
ffmpeg -i input.mp4 -an output_video.mp4
将test.mp4和tmp.mp3音视频合并
# 确保音频流就是mp3的才可以这么干
ffmpeg -i "test.mp4" -vn -c:a copy "tmp.mp3"
3. 转换音视频格式
FFmpeg支持将音视频文件转换为各种常见的格式,如MP4、FLV、AVI、MOV等。你可以使用-f
选项指定输出格式,使用-vcodec
和-acodec
选项分别指定视频编解码器和音频编解码器。
MP4转FLV
ffmpeg -i input.mp4 -codec copy output.flv
MP4转AVI
ffmpeg -i input.mp4 output.avi
MP4转MOV
ffmpeg -i input.mp4 output.mov
4. 视频裁剪与拼接
FFmpeg提供了强大的视频裁剪和拼接功能。你可以使用-ss
选项指定裁剪的起始时间,使用-t
选项指定裁剪的持续时间,使用-to
选项指定裁剪的结束时间。对于视频拼接,你可以使用多个输入文件,并指定输出文件。
裁剪视频(从第10秒开始,持续10秒)
ffmpeg -i input.mp4 -ss 00:00:10 -t 10 output.mp4
视频拼接(将两个视频文件拼接成一个)
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
5. 视频转码
视频转码是指将视频文件转换为不同的编解码器或分辨率。你可以使用-vcodec
选项指定视频编解码器,使用-vf
选项指定视频滤镜来调整分辨率、帧率等参数。
将MP4视频转码为H.264编码的MKV文件:
ffmpeg -i input.mp4 -vcodec libx264 output.mkv
调整视频分辨率:
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
6. 音频处理
除了视频处理外,FFmpeg还提供了丰富的音频处理功能,包括音频转码、音频提取、音频剪辑等。你可以使用-acodec
选项指定音频编解码器,使用-af
选项指定音频滤镜来处理音频数据。
提取视频中的音频并转码为MP3格式
ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3
音频剪辑(从第30秒开始,持续10秒)
ffmpeg -i input.mp3 -ss 00:00:30 -t 10 output.mp3
7 调整视频大小
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
8 视频截图
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 screenshot.jpg
9 音频转码
ffmpeg -i input.wav -b:a 192K output.mp3
10 合并视频
原视频包含音频和视频信息情况下:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4
单独合并视频信息:
去掉a,直接对v进行合并
ffmpeg -i input.mp4 -i output.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1[outv]" -map "[outv]" output2.mp4
11 m3u8生成
ffmpeg -i input.mp4 -c:v copy -c:a copy -f hls -hls_time 10 output.m3u8
-c:v copy
和 -c:a copy
参数表示视频和音频流不进行重新编码
-hls_time
控制每个TS文件的时长,-hls_list_size
控制M3U8文件中最多保留的TS文件数目
指定为每一个ts指定baseurl
ffmpeg -i input.mp4 -c:v copy -c:a copy -f hls -hls_time 10 -hls_base_url http://example.com/videos/ output.m3u8
生成内容:
12 m3u8转音频视频
视频:
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i input.m3u8 -c copy output.mp4
-protocol_whitelist
参数允许FFmpeg使用指定的协议(在这里是 "file", "http", "https", "tcp", "tls")来下载TS文件。 -c copy
参数表示不对视频进行重新编码,只是直接将输入流复制到输出文件中。
音频:
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i input.m3u8 -map 0:a -c copy output.mp3
-map 0:a
参数用于选择第一个输入文件(M3U8文件)的所有音频流。-c copy
参数表示不对音频进行重新编码
13 m3u8生成指定时间的音频视频
# 提取视频
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -ss 00:01:30 -i input.m3u8 -t 60 -c:v copy -c:a copy output_video.mp4
# 提取音频
ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -ss 00:01:30 -i input.m3u8 -t 60 -vn -c:a copy output_audio.mp3
测试越多越感觉ffmpeg功能好强大,简直能满足对音视频的大多需求
参数说明
选项 | 说明 |
---|---|
-h | 显示基本选项。 |
-h long | 显示更多选项。 |
-h full | 显示所有选项(包括所有格式和编解码器特定选项,非常长)。 |
-h type=name | 显示指定解码器/编码器/解封装器/封装器/过滤器/比特流过滤器/协议的所有选项。 |
-L | 显示许可证信息。 |
-version | 显示版本信息。 |
-muxers | 显示可用的封装器。 |
-demuxers | 显示可用的解封装器。 |
-devices | 显示可用设备。 |
-decoders | 显示可用的解码器。 |
-encoders | 显示可用的编码器。 |
-filters | 显示可用的过滤器。 |
-pix_fmts | 显示可用的像素格式。 |
-layouts | 显示标准声道布局。 |
-sample_fmts | 显示可用的音频采样格式。 |
-v <loglevel> | 设置日志级别。 |
-y | 覆盖输出文件。 |
-n | 永不覆盖输出文件。 |
-stats | 在编码过程中打印进度报告。 |
-f <fmt> | 强制指定容器格式(否则自动检测)。 |
-t <duration> | 在指定持续时间后停止转码。 |
-to <time_stop> | 在达到指定时间后停止转码。 |
-ss <time_off> | 从指定时间开始转码。 |
-metadata | 添加元数据。 |
-r | 重写输入帧速率/转换为指定输出帧速率。 |
-aspect | 设置宽高比。 |
-vn | 禁用视频。 |
-vcodec | 选择视频流的编码器/解码器。 |
-vf | 应用视频流的指定滤镜。 |
-b | 视频比特率。 |
-aq | 设置音频质量(特定于编解码器)。 |
-ar | 设置音频采样率。 |
-ac | 设置音频通道数。 |
-an | 禁用音频。 |
-acodec | 选择音频流的编码器/解码器。 |
-ab | 音频比特率。 |
-af | 应用音频流的指定滤镜。 |
-sn | 禁用字幕。 |
-scodec | 选择字幕流的编码器/解码器。 |
HLS M3U8参数:
参数 | 说明 |
---|---|
-hls_time <duration> | 指定每个TS文件的时长。例如,-hls_time 10 表示每个TS文件的时长为10秒。 |
-hls_list_size <number> | 指定M3U8播放列表中最多包含的TS文件数目。当生成的TS文件数量超过这个值时,旧的TS文件将被删除。例如,-hls_list_size 5 表示M3U8播放列表最多包含5个TS文件。 |
-hls_segment_filename <pattern> | 指定TS文件的命名模式。默认情况下,FFmpeg会根据输入文件的名称生成TS文件,但您也可以使用这个选项来自定义TS文件的命名。例如,-hls_segment_filename file_%03d.ts 将生成形如 file_001.ts 、file_002.ts 等命名的TS文件。 |
-hls_base_url <url> | 指定TS文件在服务器上的基本URL。当客户端请求TS文件时,会使用这个URL与TS文件名拼接成完整的URL。例如,-hls_base_url http://example.com/videos/ 将使用 http://example.com/videos/ 作为TS文件的基本URL。 |
-hls_flags <flags> | 指定一些HLS相关的标志。常见的标志包括: split_by_time 、omit_endlist 等。 |