FFmpeg学习

FFmpeg学习笔记

针对音视频的几种情况

1、视频局部裁剪

cmd 复制代码
ffmpeg -i  input.mp4  -b:v 2048k -vf crop=828:462:0:665  -ss 1.00 -t 10.00  output.mp4

2、 视频倒放

cmd 复制代码
ffmpeg -i input.mp4  -b:v 2048k  -vf  reverse  output.mp4
3、视频插入图片
cmd 复制代码
ffmpeg -i input.mp4  -b:v 2048k  -strict  -2 -vf 
4、 音视频转化格式
cmd 复制代码
ffmpeg -i  input.mp3   -vcodec copy -acodec copy  output.wav

ffmpeg -i input.mp4 -vcodex copy  acodec copy output.mov
5、 抽取视频的画面

把视频的音频部分去除,只留下视频内容,没有声音

-an : audio no

cmd 复制代码
ffmpeg -i input.mp4 -an -vcodec copy output.mp4

6、抽取视频的音频部分

把视频的音频部分提取出来,生成新的视频, 没有画面,完整,但是提取音频格式会导致音频内容不全

-vn : video no

cmd 复制代码
ffmpeg -i input.mp4 -vn -acodec copy output.mp4

滤镜

-vf 视频 -af 音频

in_w-300 宽度裁减300

in_h-200 高度裁减200

crop 格式 crop=out_w:out_h❌y

-c:v 视频

-c:a copy audio不做任何处理

cmd 复制代码
ffmpeg -i input.mp4  -vf crop=in_w-300:in_h-200  -c:v libx264  -c:a copy output.mp4

裁减与合并命令

1、音视频裁减

-i input.mp4 裁减的文件input.mp4

-ss 裁减的开始时间

-t 裁减的时长为多少秒

out.mp4 输出的文件

cmd 复制代码
ffmpeg -i input.mp4  -ss  00:00:00  -t 10s  out.mp4
2、音视频合并

inputs.txt 合并的所有文件整合 内容格式 file filename
建议将视频均转化为ts 文件 再合并导出MP4文件

举例 : inputs.txt

txt 复制代码
file  '1.ts'
file  '2.ts'
cmd 复制代码
ffmpeg -f concat -i inputs.txt   out.mov

图片/视频互转命令

1、视频转图片

-r 转化图片的帧率 -r 1 每秒钟转换出一张图片

-f 将文件转化成什么格式 -f image2图片

image-%3d.jpeg 转化出的图片名称

cmd 复制代码
ffmpeg -i input.mp4 -r 1  -f image2 image2-%3.jepg

2、图片转视频

图片转视频 要求图片的名称开头都要一致,格式一致

cmd 复制代码
ffmpeg -i image2-%3.jepg   outVideo.mp4

直播推/拉流

1、直播推流

cmd 复制代码
ffmpeg -re -i  output.mp4  -c copy -f flv rtmp://server/live/streamName

2、 直播拉流

拉流生成的文件数据格式 根据流的格式来进行确定

cmd 复制代码
ffmpeg -i rtmp://server/live/streamName   -c copy dump.flv

示例:
ffmpeg -i http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8 -c copy Apple.m3u8

3、修改视频输出的分辨率

视频编码中一般都会使用常用的几个分辨率:手机拍出来的也都是这几个,他的分辨率宽 > 高,衡量是横竖的就只有 方向这个属性,其他比较骚的方式就不考虑了

所以我们在压缩视频时候拿到分辨率就看它的宽度就好了:

比如我们的目标分辨率为: 1280720,源视频分辨率 19201080,如果视频宽度大于 1280,我们就按照宽度1280进行压缩,高度-1,他会自己计算,朝向我们不用干预,按照源朝向输出就好了:

720P 1080P 2k 4K
分辨率 1280*720 1920*1080 2560*1440 4096*2160
画质 高清 全高清 四倍高清 超高清
宽高比例 16:9 16:9 16:9 约等于16:9(17:9)

-c:v 设置视频video的格式

-c:a 对于视频的音频audio部分不进行更改 copy

cmd 复制代码
ffmpeg -i input.mp4  -c:v libx264 -vf scale=1080:-1  -c:a copy  output.mp4

设置视频码率

-b:v /-b 参数解析

在 ffmpeg 命令中 , -b:v 参数 和 -b 参数 的 作用 都是 设置 视频码率 ,

推荐使用 -b:v 参数 设置视频码率 , 参数中的 b 代表 码率 ( bitrate ) , :v 表示该码率参数是针对 视频流 ( Vedio Stream ) 设置的 ;

不推荐使用 -b 参数 , 该参数命令设置不明确 , -b 参数 同时可以用于设置 音频码率 和 视频码率 , 但是通常情况下 默认 设置的是 视频码率 ;

-b:v / -b 参数 值 是 要设置的 输出文件 的 视频 码率值 , 如 : -b:v 1M 参数的作用是 将 视频码率设置为 1 Mbps , Mbps 代表兆比特每秒 ( Megabits per second ) ;

命令 , 将 输入文件 input.mp4 以 1M 的视频码率 输出到 输出文件 output.mp4 中 :

输入文件 input.mp4 的 视频码率为 1580 kb/s , 输出文件 output.mp4 的 视频码率为 1000 kb/s , 视频大小 由 13.1MB 变为 8.16MB ;

cmd 复制代码
ffmpeg -i input.mp4 -b:v 1M  output.mp4

命令 , 将 输入文件 input.mp4 以 1M 的视频码率 输出到 输出文件 output.mp4 中 ;

cmd 复制代码
ffmpeg -i input.mp4 -b 1M  output.mp4

设置输出视频帧率 -r 参数

在 ffmpeg 命令中 , -r 参数 的 作用是 设置 输出视频 的 帧率 Frame Rate , 帧率是指每秒钟显示的图像帧数 , 单位是 FPS , Frame Per Second ;

通过 -r 参数 可以 控制 输出视频的 播放速度 和 平滑度 , 帧率越高 , 视频越平滑流畅 , 帧率越低 , 视频越卡顿 ;

-r 参数 的 参数值 是 一个具体的帧率值 , 是一个数字 , 一般情况下 取值 0 ~ 120 , 设置 -r 60 参数 , 表示 输出视频的帧率为 60 帧每秒 ;

注意 : -r 参数 设置的是 输出视频的帧率 , 输入视频的帧率是固定的 , 如果 输入视频的帧率 与 该 -r 参数 设置的 输出视频帧率不同 ,

如果 输入视频帧率 > 输出视频帧率 : 通过 丢弃视频帧 来调整输出视频的帧率。

如果 输入视频帧率 < 输出视频帧率 : 通过 增加重复帧 来调整输出视频的帧率。

命令 , 将输入文件 input.mp4 的 视频流 重新编码为 帧率为 60 帧每秒 , 并将结果保存到 output.mp4 文件中 ;

cmd 复制代码
ffmpeg -i input.mp4 -r 40  output.mp4

设置视频画面宽高 -s 参数

-s 参数解析

在 ffmpeg 命令中 , -s 参数 的 作用是 设置 输出视频 的分辨率 , 单位是 像素 ;

-s 参数的 参数值 是 一个宽度和高度的值 , 中间用 x 分隔 , 如 : 如果输出视频的分辨率为 376x210 , 则可以使用 -s 376x210 参数设置 ;

cmd 复制代码
ffmpeg -i input.mp4 -s 1980*1080  output.mp4

设置视频画面宽高比 -aspect 参数

-aspect 参数解析

在 ffmpeg 命令中 , -aspect 参数 的作用是 设置视频画面的宽高比 ;

使用 -aspect 参数时 , 设置的参数值是 一个宽高比的值 , 这个参数值可以是一个

浮点数 : 表示宽度与高度的比值 , 如 : -aspect 0.5 ;

以冒号分隔的两个整数 : 表示宽和高的具体数值 , 如 : -aspect 1:2 ;

命令 , 将输入文件 input.mp4 的 视频流 重新编码为 1:1 的宽高比 , 并将输出结果保存到 output.mp4 输出文件中 ;

cmd 复制代码
ffmpeg -i input.mp4 -aspect 1:1 output.mp4

设置视频编解码器 -vcodec 参数

在 ffmpeg 命令中 , -vcodec 参数 的 作用是 指定 视频编解码器 ;

视频编解码器 是用于 对 视频数据 进行 压缩编码 和 解压缩解码 的算法 , 使用 不同的 编解码器 获得的 视频文件 的 画面质量 / 文件大小 / 兼容性 不同 ;

-acodec 后面的 参数值 是 编解码器的名称 ;

常见的 视频编解码器 包括

libx264 : 用于 H.264 格式的视频编码 ;

libvpx : 用于 VP8 编码 ;

libvpx-vp9 : 用于 VP9 编码 ;

copy : 用于直接复制原始视频流而不进行重新编码 ;

-vcodec 参数设置 libx264 视频编码器:

命令 , 将 input.mp4 输入文件转换为 H.264 编码的视频 输出到 output.mp4 输出文件中 ;

cmd 复制代码
ffmpeg -i input.mp4  -vcodec libx264 output.mp4

-vcodec 参数设置 libvpx-vp9 视频编码器:

命令 , 将 input.mp4 输入文件转换为 VP9 编码的视频 输出到 output.mp4 输出文件中 ;

cmd 复制代码
ffmpeg -i input.mp4  -vcodec libvpx-vp9  output.mp4

设置视频滤镜 -vf 参数

-vf 参数解析

在 ffmpeg 命令中 , -vf 参数 的 作用是 设置 视频滤镜 , 可以对输入的视频流进行各种复杂的图像处理 ;

-vf 参数 的 参数值 通常是 单个滤镜 或 多个由逗号分隔的滤镜链 , 每个滤镜都可以对视频进行特定的变换效果 ;

命令 , 将输入视频 input.mp4 的尺寸调整为 1280x720 像素 , 并输出到 output.mp4 输出文件中

cmd 复制代码
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
im_AMBER4 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J4 天前
从“Hello World“ 开始 C++
c语言·c++·学习