FFmpeg学习

FFmpeg图标

FFmpeg学习笔记

针对音视频的几种情况

1、视频局部裁剪

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

2、 视频倒放

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

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

把视频的音频部分去除,只留下视频内容,没有声音
-an : audio no

ffmpeg -i input.mp4 -an -vcodec copy output.mp4

6、抽取视频的音频部分

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

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不做任何处理

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 输出的文件

ffmpeg -i input.mp4  -ss  00:00:00  -t 10s  out.mp4

2、音视频合并

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

file  '1.ts'
file  '2.ts'
ffmpeg -f concat -i inputs.txt   out.mov

图片/视频互转命令

1、视频转图片

-r 转化图片的帧率 -r 1 每秒钟转换出一张图片
-f 将文件转化成什么格式 -f image2图片
image-%3d.jpeg 转化出的图片名称

ffmpeg -i input.mp4 -r 1  -f image2 image2-%3.jepg

2、图片转视频

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

ffmpeg -i image2-%3.jepg   outVideo.mp4

直播推/拉流

1、直播推流

ffmpeg -re -i  output.mp4  -c copy -f flv rtmp://server/live/streamName

2、 直播拉流

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

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,他会自己计算,朝向我们不用干预,按照源朝向输出就好了:

720P1080P2k4K
分辨率1280*7201920*10802560*14404096*2160
画质高清全高清四倍高清超高清
宽高比例16:916:916:9约等于16:9(17:9)

-c:v 设置视频video的格式
-c:a 对于视频的音频audio部分不进行更改 copy

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 ;

ffmpeg -i input.mp4 -b:v 1M  output.mp4

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

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 文件中 ;

ffmpeg -i input.mp4 -r 40  output.mp4

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

-s 参数解析
在 ffmpeg 命令中 , -s 参数 的 作用是 设置 输出视频 的分辨率 , 单位是 像素 ;
-s 参数的 参数值 是 一个宽度和高度的值 , 中间用 x 分隔 , 如 : 如果输出视频的分辨率为 376x210 , 则可以使用 -s 376x210 参数设置 ;

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 输出文件中 ;

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 输出文件中 ;

ffmpeg -i input.mp4  -vcodec libx264 output.mp4

-vcodec 参数设置 libvpx-vp9 视频编码器:
命令 , 将 input.mp4 输入文件转换为 VP9 编码的视频 输出到 output.mp4 输出文件中 ;

ffmpeg -i input.mp4  -vcodec libvpx-vp9  output.mp4

设置视频滤镜 -vf 参数

-vf 参数解析
在 ffmpeg 命令中 , -vf 参数 的 作用是 设置 视频滤镜 , 可以对输入的视频流进行各种复杂的图像处理 ;
-vf 参数 的 参数值 通常是 单个滤镜 或 多个由逗号分隔的滤镜链 , 每个滤镜都可以对视频进行特定的变换效果 ;

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

ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4

获取音视频图片的宽高

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 input.mp4

打印结果为 宽,高

获取音视频的封面(取第一帧的图片)

ffmpeg -i testDemo.mp4 -ss 00:00:01.000 -vframes 1 -f image2 output_image.jpg
  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值