一、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种档次,如下所示。文章来源:https://www.toymoban.com/news/detail-621419.html
"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo"
libx265也支持-preset设置编码命令如下;文章来源地址https://www.toymoban.com/news/detail-621419.html
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
到了这里,关于【ffmpeg基础】ffmpeg视频编码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!