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
相关推荐
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
infiniteWei2 小时前
【Lucene】原理学习路线
学习·搜索引擎·全文检索·lucene
follycat2 小时前
[极客大挑战 2019]PHP 1
开发语言·学习·网络安全·php
hunandede2 小时前
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习
c++·ffmpeg·音视频
橘子味的茶二2 小时前
SDL读取PCM音频
ffmpeg·音视频·pcm
并不会6 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
龙鸣丿6 小时前
Linux基础学习笔记
linux·笔记·学习
Nu11PointerException8 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
@小博的博客12 小时前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
南宫生12 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法