【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解

这篇具有很好参考价值的文章主要介绍了【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

大家好,欢迎来到停止重构的频道。

本期我们讨论音视频文件转编码,如将视频H264转H265等。

内容中所提及的代码都会放在GitHub,感兴趣的小伙伴可以到GitHub下载。

我们按这样的顺序展开讨论:​

1、  编码的作用 

2、  转编码的工作原理

3、  编解码器安装 

4、  示例代码讲解 

编码的作用

在前面《音视频转码工作原理》中讨论过,一个视频文件实质上是分3层的,封装、编码、基础数据

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

编码的作用是为了压缩数据,限制最终文件的大小。

选择不同的编码格式,更多是为了节省更多的存储空间,或者为了扩大客户端的播放兼容性

这里值得一提的是,编码是需要区分音频和视频的,视频的编码器是不能压缩音频数据的,反之亦然。​

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享 

关于H264等视频编码格式的详细说明,可参考往期《H264》。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

 

关AAC等音频编码格式的详细说明,可参考往期《AAC》

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

转编码的工作原理 

整个转编码的过程是 解封装>>解码>>编码>>封装

将解封装后的数据块放到对应的解码器中,即可解压缩成原始的视频帧、音频帧。

将原始帧放入目标编码器中,即可压缩出对应编码格式的数据块。

其中一个数据块不一定是完整的一帧数据 一些封装格式,可能几个数据块才能组成完整的一帧数据。

整个过程是流式的,循环往复,直到处理完成。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

这里需要特别说明的是,编码器、解码器都是对应编码格式的,是特定的算法程序,是现成的

如h264转h265,则解码器使用h264的,编码器使用h265的。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

如果是直播的场景,可以选择在封装前加上时间间隔,请参考往期《重封装》, 本期不作赘述。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

补充说明一下,转编码实际上只是换了一种编码格式,可以对编码器设置诸如码率等影响压缩效率的参数,也可以设置诸如去除B帧等编码格式特有的参数

但是想要改变分辨率、帧率、采样率等参数的话,则需要对原始帧数据进行处理才行,关于这部分的详细说明,请关注下一期内容。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享 

编解码器安装

FFmpeg默认情况下会包含一些编解码器,可以使用命令查看FFmpeg支持的编解码器。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

如果需要对FFmpeg扩展编解码器的话,则需要先安装对应的编码器/解码器程序,然后修改FFmpeg编译配置,并重新编译安装即可。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

关于FFmpeg更详细的说明,可参考往期《FFmpeg》。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

 

示例代码讲解 

转编码的示例代码为trancode.cpp ,示例代码是H264转H265的。

原来转封装示例代码基础上,增加了初始、关闭编解码器,循环处理数据中加入了解码、编码过程

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

在设置解码器/编码器timebase时,FFmpeg推荐设置为帧率的倒数,但按我们的经验,这样会有很多问题,所以我们更推荐设置为统一的timebase

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

 

在转编码过程中,需要在解码前、编码后,做一下timebase转换 ,才能保证视频播放时不会过快或过慢。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

 

在编码/解码时,需要区分音频/视频,将数据放到对应的编解码器

另外,编码/解码实质上是异步的,所以程序需要判断是否取出数据再进行下一步。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

 

而且因为编解码异步处理的原因,且解编码是需要花费一定时间的,所以在读取完视频文件时 ,编解码器可能还存在未处理完的数据

所以在读出完视频文件后,还需要等待编解码器处理完所有的数据才算处理结束。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

总结

本期内容的代码已经上传Github,需要的朋友可以下载。

【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解,音视频处理,音视频处理,转编码,h264转h265,FFmpeg,代码分享

以上代码讲解只提及了重要的部分,代码中含有更详细的注释说明,里面有编译运行环境的搭建说明,也提供了做好的docker容器。文章来源地址https://www.toymoban.com/news/detail-668282.html

到了这里,关于【音视频处理】转编码H264 to H265,FFmpeg,代码分享讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • VCC-H266/X265/X264音视频编码开源实现的编译及测试

    VCC-H266/X265/X264音视频编码开源实现的编译及测试

    下载vs2019 下载链接 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 下载cmake【非必须,vs2019中带有cmake,但是没有界面】 下载链接 Download | CMake 设置环境变量Path 使用vs2019中内置的cmake,需要先找到C:Program Files (x86)Microsoft Visual Studio2019ProfessionalCommon7IDECommonExtensionsMic

    2024年02月07日
    浏览(8)
  • vue中使用EasyPlayer播放监控视频HLS,H265、H264

    vue中使用EasyPlayer播放监控视频HLS,H265、H264

    1.使用npm下载依赖 2.将EasyPlayer-lib.min.js文件、EasyPlayer.wasm文件、libDecoder.wasm文件放置到public下 3.创建components,html代码如下 4.使用props接收数据 5.在父组件中引入,传递props中的数据即可运行即可

    2024年02月03日
    浏览(10)
  • wireshark提取视频数据之RTP包中提取H264和H265

    wireshark提取视频数据之RTP包中提取H264和H265

    在流媒体相关问题分析时,抓包分析是非常重要的手段,比如播放有码流无图像、流媒体协议对接问题、码流花屏卡顿等问题,很多问题都可以通过抓包然后分析包数据来定位出问题,抓包最常用的工具是wireshark,其能从数据链路层、IP层、传输层、应用层等各层进行分析,

    2024年02月02日
    浏览(4)
  • 音视频知识:MPEG-4、H264、MP4、AAC之间的关系

    MPEG-4 一种编码标准。是国际标准化组织 (ISO) 主要针对消费类应用,已经针对运动图像压缩定义的标准。MPEG(Moving Picture Experts Group)标准包括 MPEG1、MPEG2与 MPEG4。 MPEG-4标准目前分为27个部分,统称为ISO/IEC14496国际标准。其中第10部分(ISO/IEC 14496-10)就是熟悉的高级视频编码

    2024年02月14日
    浏览(15)
  • Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

    Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

    默认自带的QWebEngine 因版权问题不支持音视频功能,需要自己编译源码以支持。 平台:Linux(UOS V20 1050) Qt:5.15.2 下载 Qt 5.15.2 对应版本源码,使用镜像网站或者Qt Maintenance Tool工具下载。 配置 Qt 环境变量 将以下内容追加到bashrc文件后 刷新使其生效 这个阶段可以预先安装所

    2024年02月05日
    浏览(24)
  • 音视频八股文(9)-- flv的h264六层结构和aac六层结构

    音视频八股文(9)-- flv的h264六层结构和aac六层结构

    FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩、封装简单等特点,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)和 ⽂件体(file Body)组成。其中,FLV

    2024年02月01日
    浏览(9)
  • SkeyeRTMPClient扩展支持HEVC(H.265)解决方案之兼容H264和H265帧数据解析详解

    SkeyeRTMPClient扩展支持HEVC(H.265)解决方案之兼容H264和H265帧数据解析详解

    在之前两篇关于SkeyeRTMPClient扩展支持HEVC(H.265)解决方案的文章中,我们已经完成了对H265的支持,本文主要阐述将H26和H265支持兼容起来,实现不同视频编码格式的自适应兼容适配。 1. 根据CodecId判断数据编码类型 根据视频编码ID判断视频编码类型,如果视频编码ID==FlvCodeId_Hevc(

    2023年04月08日
    浏览(5)
  • 微信小程序支持h5实现webrtc h264 h265低延迟传输渲染

    微信小程序支持h5实现webrtc h264 h265低延迟传输渲染

    微信小程序自成体系,自身也带了很强的rtc音视频能力,但是他捆绑了他自己的服务,开发也相对受限于他的api。基于以前的了解可以采webview的方式内嵌h5网址来实现自定义的webrtc.但实践起来并不轻松,主要是小程序的严格限制,各平台的兼容,不得不使出吃奶的力气来实现

    2024年02月04日
    浏览(9)
  • 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如 FMS , Red5 , crtmpserver 等。RTMP协议可用于实现直播、点播应用,通过 FMLE(Flash Media Live Encoder) 推送音

    2023年04月08日
    浏览(16)
  • Qt/C++音视频开发69-保存监控pcm音频数据到mp4文件/监控录像/录像存储和回放/264/265/aac/pcm等

    用ffmpeg做音视频保存到mp4文件,都会遇到一个问题,尤其是在视频监控行业,就是监控摄像头设置的音频是PCM/G711A/G711U,解码后对应的格式是pcm_s16be/pcm_alaw/pcm_mulaw,将这个原始的音频流保存到mp4文件是会报错的,在调用avformat_write_header写文件头的时候提示(-22) Invalid argument,

    2024年04月11日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包