一、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

【ffmpeg基础】ffmpeg视频编码相关推荐

  1. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  2. 音视频基础+ffmpeg原理(视频编码)

    H264: H264压缩比 条件:1.YUV格式YUV420        2.分辨率:640x480        3.帧率15 源码流:640x480x1.5x15,建议码流:500kpbs, 结 ...

  3. 使用FFmpeg库实现视频编码

    1.FFmpeg进行视频编解码所需要的结构 .AVCodec :AVCodec结构保存了一个编解码器的实例,实现实际的编码功能.通常我们在程序中定义一个指向AVCodec               ...

  4. FFmpeg基础:音视频同步播放

    文章目录 定义全局数据类 定义数据队列 定义SDL库初始化操作 定义音视频流解析函数 定义解封装线程和视频解码线程 定义音视频的解码函数 主函数事件响应 视频文件解复用之后视频流和音频流是独立的,也是 ...

  5. 视频教程-FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-C/C++

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟 ...

  6. FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-夏曹俊-专题视频课程...

    FFmpeg音视频编码实战屏幕录像机视频课程-基于QT5和FFMpegSDK-3798人已学习 课程介绍         本课程讲解的是基于流行的直播技术 FFMpeg3.3音视频处理框架,和应用广的 ...

  7. 又一篇关于各种音视频编码的

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  8. 视频编码中为什么须要进行变换编码?

    绝大多数图像都有一个共同的特征:平坦区域和内容缓慢变化区域占领一幅图像的大部分,而细节区域和内容突变区域则占小部分.也能够说,图像中直流和低频区占大部分,高频区占小部分.这样,空间域的图像变换到频域或 ...

  9. 使用FFMPEG——4.2.2版本实现提取视频编码解码文件,ffmpeg基础学习。

    FFMPEG基础学习 视频解码,并且输出到文件. 我通过雷霄骅的博客学习FFMPEG,在学习过程中发现"雷神"的代码由于版本的问题,很多代码已经无法在FFMPEG--4.2.2版本 ...

  10. FFmpeg基础:获取音视频的各种编码参数

    文章目录 获取视频编码参数 获取音频编码参数 上一篇文章中介绍了音视频的各种编码参数的概念,这里介绍一下如何通过ffmpeg库获取一个视频文件的各种音视频编码参数.在对视频文件进行处理和转码的时候这些 ...

最新文章

  1. 《人类简史》八、融合统一(下)——宗教的法则、历史的混沌
  2. Linux上实现ssh免密码登陆远程服务器
  3. CZoneSoft出品: 音频视频在线录制系列之 AV留言本 简介
  4. 在Mac OS X macOS Sierra上进行VirtualBox和GNS3链接
  5. VDI序曲二 RemotoAPP晋级篇
  6. linux gcc编译c文件头文件,使用GCC编译器编译C语言
  7. 看完这篇,你也是字符编码大神!
  8. yii2 html ul,yii2导航小部件子菜单类
  9. python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...
  10. 数据分发服务器管理系统,地图差分数据分发系统、地图差分数据分发装置、地图数据保有装置、更新管理服务器、以及地图差分提取服务器...
  11. gitlab两种连接方式:ssh和http配置介绍
  12. gof 设计模式 java_javaSE中的GOF设计模式
  13. zynq-7000系列基于zynq-zed的vivado初步设计之linux下控制PL扩展的GPIO
  14. 【flash】 水果忍者
  15. Ubuntu 18.04刷机问题汇总
  16. 做好黑客入侵防护,你需要了解这些入侵工具
  17. JavaScript 杨辉三角 杨辉三角 II
  18. DBA所需要具备技能
  19. Solid Sphere Inc.:智能手机原创恶搞App“Takeshobo Quest - POP TEAM EPIC ASSAULTS”
  20. OC----id 类型

热门文章

  1. 因程序员开发速度太慢,公司索赔90万败诉后不服申请再审,法院判了
  2. 什么是AEP(Automated Error Prevention)
  3. Jupyter notebook基础
  4. DBCP连接池配置详解
  5. 数据结构严蔚敏--第七章--图
  6. 二分法 matlab应用,MATLAB算法の二分法
  7. HarmonyOS3.0点赞事件
  8. Confluence 包含页面(Include Page)宏
  9. 基于SSM实现的物流管理系统|快递管理系统
  10. 蔡崇信:我为什么敢放弃580万年薪 拿月薪500跟马云