【ffmpeg基础】ffmpeg视频编码

一、ffmpeg编码H264

输入为YUV输出为H264

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 BlowingBubbles_416x240_50.h264

通过-s来指定输入yuv的分辨率(需要先指定分辨率);

通过-pix_fmt来指定输入yuv的像素格式;

通过-i来指定输入yuv的路径和名称;

通过-r 来指定要编码的帧率;

通过-vcodec来指定视频编码的编码器为libx264

输入为YUV输出为MP4(h264)

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 BlowingBubbles_416x240_50.mp4

输入为MP4(包含音频)输出为MP4(H264)去掉音频

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

通过-an参数来去掉输入input.mp4中的音频,并通过-vcodec libx264将输入的视频进行h264重新编码。

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

通过-an参数来去掉输入input.mp4(h264)中的音频,并通过-vcodec copy将输入的视频复制到out.mp4中,视频编码类型和大小不会变化。

H264编码参数设置[I帧间隔、B帧个数(B帧决策类型)、crf、码率配置等]

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 -x264-params "scenecut=0:keyint=50:b-adapt=0:bframes=3:bitrate=500" BlowingBubbles_416x240_50.h264

通过-x264-params来设置libx264编码器参数;编码参数通过= :的形式,=是给具体编码参数赋值,而:是表示下一个参数;参数需要是libx264支持的参数。scenecut=0表示场景切换关闭;keyint=50表示I帧间隔为50(即gop为50);b-adapt=0表示b帧类型决策关闭,采用固定b帧个数;bframes=3表示b帧个数为3;bitrate=500表示编码码率为500k。-x264-params中的部分参数也可以在写在外面,比如bframes=3可以使用-nb 3;bitrate=500可以使用-vb=500k。如下:

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 -vb 500k -bf 3 -x264-params "scenecut=0:keyint=53:b-adapt=0" BlowingBubbles_416x240_50.h264

上面的命令实际上配置的是libx264的平均码率模式(ABR(Average Bit Rate)),即-vb 500k 配置了编码平均码率为500k。此外可以配置libx264的“固定码率”模式(CBR(Constant Bit Rate)),如下命令;-minrate 500k表示编码最小码率为 500k;-maxrate 500k 表示编码最大码率为 500k -bufsize 400k表示编码器的vbvbuff大小为500k(某一时刻的瞬时码率的最大值);通过-vb(平均码率)、-minrate(最小码率),maxrate(最大码率),bufsize(瞬时码率最大值)设置相同值可以模拟CBR。 bufsize参数越大码率波动越大,但是越能得到较高的画质,如果不是极其严格要求码率固定,可以将bufsize的大小设置比maxrate大一点。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 -vb 500k -minrate 500k -maxrate 500k -bufsize 500k -bf 3 -x264-params "scenecut=0:keyint=53:b-adapt=0" BlowingBubbles_416x240_50.h264

通过 -x264-params也能配置libx264的“固定码率”模式(CBR(Constant Bit Rate)),如下命令。在-x264-params中添加bitrate=500:vbv-maxrate=500:vbv-bufsize=500参数

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264  -bf 3 -x264-params "scenecut=0:keyint=53:b-adapt=0:bitrate=500:vbv-maxrate=500:vbv-bufsize=500" BlowingBubbles_416x240_50.h264

libx264编码编码模式常用的有ABR、CBR外还有CRF模式,如下命令;-crf的范围为0-51和QP的范围一致,在编码器内部crf参数其实会影响编码的QP值。crf值从低到高编码出来的视频画质是逐渐降低的,也就是说crf的值越低编码画质越高,同时编码出的码率也是越高的,crf的值越高编码画质越低,同时编码出的码率也是越低的,这个特性和QP是一样的。通常crf设置为18-31是比较均衡的一个范围,即画质和码率能得到较好的均衡。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 -crf 26 -x264-params "scenecut=0:keyint=53:b-adapt=0:bframes=3" BlowingBubbles_416x240_50_1.h264

libx264编码时候可以选择不同的档次来加快编码速度;档次可以通过-preset参数来设置支持的档次有10种,如下;其中medium为默认档次;从左往右编码速度是越来越慢;-preset不仅影响编码速度也会影响编码质量,从左往右编码质量是越来越高,也就是说-preset是调节编码速度和编码质量的一个参数。

"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo"

-preset的使用示例如下[-preset faster]。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx264 -crf 26 -preset faster -x264-params "scenecut=0:keyint=53:b-adapt=0:bframes=3" BlowingBubbles_416x240_50_1.h264

二、ffmpeg编码H265

输入为YUV输出为H265

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 BlowingBubbles_416x240_50.h265

通过-s来指定输入yuv的分辨率(需要先指定分辨率);

通过-pix_fmt来指定输入yuv的像素格式;

通过-i来指定输入yuv的路径和名称;

通过-r 来指定要编码的帧率;

通过-vcodec来指定视频编码的编码器为libx265

输入为YUV输出为MP4(h265)

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 BlowingBubbles_416x240_50.mp4

注意编码h265并封装输出为mp4,则建议在ffmpeg命令行中添加-vtag hvc1这个参数,如果不加这个参数编码出的h265的mp4文件在有些播放器上无法播放(mac平台上的QuickTime Player就无法播放)。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 -vtag hvc1 BlowingBubbles_416x240_50.mp4

输入为MP4(包含音频)输出为MP4(H265)去掉音频

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

通过-an参数来去掉输入input.mp4中的音频,并通过-vcodec libx265将输入的视频进行h265重新编码。

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

通过-an参数来去掉输入input.mp4(h265)中的音频,并通过-vcodec copy将输入的视频复制到out.mp4中,视频编码类型和大小不会变化。

H265编码参数设置[I帧间隔、B帧个数(B帧决策类型)、crf、码率配置等]

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 -x265-params "scenecut=0:keyint=50:b-adapt=0:bframes=3:bitrate=500" BlowingBubbles_416x240_50.h265

通过-x265-params来设置libx265编码器参数;编码参数通过= :的形式,=是给具体编码参数赋值,而:是表示下一个参数;参数需要是libx265支持的参数。scenecut=0表示场景切换关闭;keyint=50表示I帧间隔为50(即gop为50);b-adapt=0表示b帧类型决策关闭,采用固定b帧个数;bframes=3表示b帧个数为3;bitrate=500表示编码码率为500k。-x265-params中的部分参数也可以在写在外面,比如bframes=3可以使用-nb 3;bitrate=500可以使用-vb=500k。如下:

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 -vb 500k -bf 3 -x265-params "scenecut=0:keyint=53:b-adapt=0" BlowingBubbles_416x240_50.h265

libx265编码器和libx264一样有ABR、CBR以及CRF模式,甚至参数都一样;如下是libx265编码下CRF配置。

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 -crf 26 -x265-params "scenecut=0:keyint=53:b-adapt=0:bframes=3" BlowingBubbles_416x240_50_1.h265

libx265也支持-preset参数来设置编码速度和编码质量的调节。和libx264一样libx265的-preset参数也有10种档次,如下所示。

"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo"

libx265也支持-preset设置编码命令如下;

ffmpeg -s 416x240 -pix_fmt yuv420p -i BlowingBubbles_416x240_50.yuv -r 50 -vcodec libx265 -crf 26 -preset faster -x265-params "scenecut=0:keyint=53:b-adapt=0:bframes=3" BlowingBubbles_416x240_50.h265

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值