Ffmpeg安装
下载并解压
进入官网 (https://ffmpeg.org/download.html),选择 Window
然后再打开的页面中下滑找到 release builds,点击 zip 文件下载
环境变量配置
下载好之后解压,找到 bin 文件夹,里面有3个 .exe 文件
然后复制这个 bin 目录地址
然后再环境变量中的 Path 中添加保存即可
测试运行
打开cmd,输入 ffmpeg -version 测试
mp4转ts文件
命令
ffmpeg -y -i 你的视频地址.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb ts文件输出地址.ts
参数解释
ffmpeg
:- 命令行工具的名称,用于处理多媒体文件。
-y
:- 这个选项告诉
ffmpeg
在输出文件已存在时,无需提示直接覆盖目标文件。
- 这个选项告诉
-i 你的视频地址.mp4
:-i
表示输入文件。你的视频地址.mp4
是输入视频文件的路径或文件名。
-vcodec copy
:-vcodec
或-c:v
指定视频编解码器。copy
表示直接复制视频流而不重新编码。
-acodec copy
:-acodec
或-c:a
指定音频编解码器。copy
表示直接复制音频流而不重新编码。
-bsf:v h264_mp4toannexb
:-bsf:v
表示对视频流应用位流过滤器(Bitstream Filter)。h264_mp4toannexb
是具体的位流过滤器,作用是将 H.264 内容从 MP4 的格式转换为 TS 中使用的 Annex B 格式。这是因为 MP4 中 H.264 使用的是一种不同的封装格式,不适合直接存储在 TS 容器中。
ts文件输出地址.ts
:- 指定输出文件的路径或文件名,这里是一个 TS 格式文件。
示例
ffmpeg -y -i D:\javaLogs\filePan\files\114\大屏视频.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb D:\javaLogs\filePan\files\114\大屏视频.ts
运行结果
生成索引文件.m3u8和切片.ts
在处理视频在线播放时可以将一个大的ts视频文件切成多个小的ts文件,并生成一个m3u8索引文件
命令
ffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_list list.m3u8 -segment_time 60 output_dir/output_%04d.ts
input.mp4
: 输入文件。-c copy
: 对视频和音频流进行无损复制。-map 0
: 映射所有流。-f segment
: 使用segment
多路复用器。-segment_list list.m3u8
: 生成包含所有片段文件名的播放列表文件,这里用 m3u8 格式。-segment_time 60
: 每个片段的时长为 60 秒。output_dir/output_%04d.ts
: 输出的片段文件(存放在output_dir
目录,命名为output_0000.ts
,output_0001.ts
等)。
示例
mkdir D:\javaLogs\filePan\files\114\大屏视频
ffmpeg -i D:\javaLogs\filePan\files\114\大屏视频.mp4 -c copy -map 0 -f segment -segment_list D:\javaLogs\filePan\files\114\大屏视频\index.m3u8 -segment_time 60 D:\javaLogs\filePan\files\114\大屏视频\output_%04d.ts
输出的内容
生成视频缩略图
使用 ffmpeg
生成视频缩略图是一项常见任务。在下面的例子中,我将向你展示如何从视频中生成一张或多张缩略图。
生成单个缩略图
假设你希望从视频的特定时间帧生成一张缩略图,例如在视频的第 30 秒生成缩略图,命令如下:
ffmpeg -i 你的视频地址.mp4 -ss 00:00:30 -vframes 1 -q:v 2 缩略图输出路径.jpg
参数解释
-i 你的视频地址.mp4
: 输入视频文件。-ss 00:00:30
: 定位到视频的第 30 秒。也可以使用更精确的时间格式,比如00:01:30.500
表示 1 分 30 秒之后的第 500 毫秒。-vframes 1
: 指定只输出一帧图片。-q:v 2
: 设置输出图片的质量。数值范围为 1-31,数值越小质量越高,2 是一个常用的高质量值。缩略图输出路径.jpg
: 输出图片的路径和文件名。
生成多张缩略图
如果你希望从视频中定时生成多张缩略图,例如每隔 10 秒生成一张,命令如下:
ffmpeg -i 你的视频地址.mp4 -vf "fps=1/10" 缩略图输出路径_%03d.jpg
参数解释
-i 你的视频地址.mp4
: 输入视频文件。-vf "fps=1/10"
: 使用视频过滤器,每 10 秒生成一帧图片(1/10
表示每 1/10 秒生成一帧)。缩略图输出路径_%03d.jpg
: 输出图片的路径和文件名,%03d
会被替换为当前帧号,生成一系列的图片如缩略图输出路径_001.jpg
、缩略图输出路径_002.jpg
等。
示例
以下是示例命令:
生成单个缩略图
ffmpeg -i video.mp4 -ss 00:00:30 -vframes 1 -q:v 2 thumbnail.jpg
生成多张缩略图,每30秒生成一张
ffmpeg -i video.mp4 -vf "fps=1/30" thumbnails_%03d.jpg
视频压缩
使用 ffmpeg
压缩视频是一项常见任务,尤其是在需要减小文件大小以便于存储或传输时。以下是几个基本的例子,涵盖常见的压缩场景。
- 使用 H.264 编码器压缩视频
H.264 是一种常用的高效视频压缩标准。你可以使用如下命令将视频压缩为 H.264 格式:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium output.mp4
参数解释
-i input.mp4
: 输入视频文件。-vcodec libx264
: 使用 H.264 编码器。-crf 23
: 恒定质量因子,范围为 0(无损)到 51(最差),默认值是 23。数值越小,质量越好,文件越大。数值越大,文件越小,质量越低。-preset medium
: 预设参数,决定编码速度与压缩率之间的平衡。常用预设有ultrafast
、superfast
、veryfast
、faster
、fast
、medium
、slow
、slower
、veryslow
。medium
是默认值。
- 压缩视频并降低分辨率
如果你不仅想要压缩视频文件大小,还希望降低分辨率,可以使用下面的命令:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -vf scale=1280:720 output.mp4
参数解释
-vf scale=1280:720
: 调整视频分辨率为 1280x720。你可以根据需要设置其他分辨率。
- 压缩视频并降低比特率
如果你希望控制视频的比特率,可以使用如下命令:
ffmpeg -i input.mp4 -b:v 1000k -vcodec libx264 -preset medium output.mp4
参数解释
-b:v 1000k
: 设置视频比特率为 1000 kbps。你可以根据需要调整这个值。
- 压缩视频音频
如果你希望同时压缩视频和音频,可以添加音频参数:
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
参数解释
-acodec aac
: 使用 AAC 音频编码器。-b:a 128k
: 设置音频比特率为 128 kbps。
示例命令
使用 H.264 编码压缩视频
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium output.mp4
压缩视频并降低分辨率
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -vf scale=1280:720 output.mp4
压缩视频并设置比特率
ffmpeg -i input.mp4 -b:v 1000k -vcodec libx264 -preset medium output.mp4
同时压缩视频和音频
ffmpeg -i input.mp4 -vcodec libx264 -crf 23 -preset medium -acodec aac -b:a 128k output.mp4
运行这些命令时,请确保输入文件路径正确,并且你有输出目录的写入权限
图片生成缩略图
使用ffmpeg生成缩略图
以下是使用ffmpeg生成128x128像素缩略图的命令:
ffmpeg -i input.jpg -vf "thumbnail,scale=128:128" -frames:v 1 output_thumbnail.jpg
参数解释
-i input.jpg
:输入图片文件。-vf "thumbnail,scale=128:128"
:使用缩略图滤镜和缩放滤镜,将图片缩放至128x128像素。-frames:v 1
:仅输出一帧图像。output_thumbnail.jpg
:生成的缩略图文件名。
示例
ffmpeg -i ./大屏视频.jpg -vf "thumbnail,scale=128:128" -frames:v 1 output_thumbnail.jpg
更多其他用法
可参考:https://blog.csdn.net/m0_37624402/article/details/125123818
官方文档:https://ffmpeg.org/ffmpeg.html#Options