ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

利用ffmpeg 转码hevc到h264 ,以及 保存h265 h264流

2020-07-07 17:03:47  阅读:1491  来源: 互联网

标签:hevc ffmpeg h264 ctx 编译 文件夹 exit x264


下载ffmpeg,并且将libx264编译进去

1.下载gas-preprocessor文件

2. 下载x264源码:

3. 下载x264编译脚本:

4. 将源码与脚本放在一起

  • 新建一个文件夹,将编译脚本build-x264.sh与x264源码文件夹放入这个新建文件夹中,并将x264文件夹(x264-snapshot-xxxx)改名为"x264"

5. 修改权限、执行脚本

  • sudo chmod u+x build-x264.sh
  • sudo ./build-x264.sh
  • 编译过程中会生成scratch-x264文件夹与thin-x264文件夹
  • 编译完成最终会生成"x264-iOS"文件夹
    x264-iOS

编译FFmpeg + x264

1. 下载FFmpeg 编译脚本:

2. 编译FFmpeg

  • 终端运行 ./build-ffmpeg.sh arm64,因为我的代码只需要arm64
  • 编译完成之后,目录生成
    FFmpeg-ios

创建转码项目Test264

1. 创建fftools,命令行方式

  • 导入文件

cmdutils_common_opts.h

cmdutils.c

cmdutils.h

config.h

ffmpeg_filter.c

ffmpeg_opt.c

ffmpeg_videotoolbox.c

ffmpeg.c

ffmpeg.h

ffprobe.c

  • 设置Header Search Paths
  • 改bitcode为NO
  • 修改 ffmpeg.c中main函数为 ffmpeg_main
  • cmdutils.c修改 exit_program

`

int exit_program(int ret)

{

//    if (program_exit)

//        program_exit(ret);

//

//    exit(ret);

return ret;
}

`

  • ffmpeg.c文件中,计数器置零, 在 term_exit(); 前面将5个参数置零(修复多次调用可能引起crash

`

nb_filtergraphs=0;

nb_output_files=0;

nb_output_streams=0;

nb_input_files=0;

nb_input_streams=0;


term_exit();

ffmpeg_exited = 1;

`

  • 项目还需要添加系统库

AudioToolbox.framework

CoreMedia.framework

VideoToolbox.framework

libiconv.tdb

libbz2.tdb

libz.tdb

2. 使用代码转码

  • 加入另一个转码 transcoding.c,这个是examples里获取的,目录地址根据不同版本的ffmpeg可能不一样,搜索全文件夹就行了,这里我只讲,我修改了transcoding.c的位置
  • 第一个我是 强制转化为h264,所以在open_output_file 处修改转出的格式

`

if (dec_ctx->codec_type == AVMEDIA_TYPE_VIDEO) {

            encoder = avcodec_find_encoder(AV_CODEC_ID_H264); //视频强制为h264
	
        }
    
        else{
    
            encoder = avcodec_find_encoder(AV_CODEC_ID_AAC); //声波转为aac
	
        }

`

  • 为了能够去掉 broken ffmpeg default settings detected 错误

`

		   enc_ctx->me_range = 16; 
	  
           enc_ctx->max_qdiff = 4;
       
           enc_ctx->qmin = 10; 
       
           enc_ctx->qmax = 51; 
      
           enc_ctx->qcompress = 0.6;

`

  • 视频质量跟码率有关,稍微提高点码率
  • 提示 application dts 190>16 ,是因为 av_interleaved_write_frame 返回了-22 ,这里我屏蔽掉这个错误,直接编写

3. h265编码

  • ffmpeg 后面的版本都不支持 AVCodecContext 设置参数了,而是改为AVCodecContext.codecpar 去修改参数
  • 我这里是为了适应iphone 的hevc视频,fourcc设置为hvc1,只有设置了这个才可以在iphone上预览,我使用ffmpeg 3.3.3版本,fourcc支持mov容器,而不支持mp4容器

源代码地址: https://github.com/Noying/transcode_hevc2h264


标签:hevc,ffmpeg,h264,ctx,编译,文件夹,exit,x264
来源: https://www.cnblogs.com/RoysPhoneBlog/p/13261895.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有