简介:利用drawtext filter给视频加字幕,忽略音频,只处理一个视频。

流程:openinput->openout->readpacket->decode->push into filter->pull out ->encode->writefile

重点看下CPenWordIntoPic里面如何初始化filter的,工程在底部的链接里。

贴一下初始化filter的代码:

bool CPenWordIntoPic::SetSubTitile(const char* subTitile, AVCodecContext * codecContext)
{m_codecContext = codecContext;if (!codecContext){return false;}m_ConverImg = new CConvertImg(codecContext->width, codecContext->height, codecContext->width, codecContext->height, codecContext->pix_fmt, codecContext->pix_fmt);std::string tmpStr = subTitile;char tmpChar[128] = {0};sprintf(tmpChar, "fontsize=%d:x=0:y=0:text=", 100);std::string strFontAndPos = tmpChar;m_filters_descr ="drawtext=fontfile=msyh.ttf:fontcolor=red:" + strFontAndPos + tmpStr;if(0 != InitFilter(codecContext))return false;return true;
}
int CPenWordIntoPic::InitFilter(AVCodecContext * codecContext)
{char args[512];int ret = 0;   AVFilter *buffersrc  = avfilter_get_by_name("buffer");AVFilter *buffersink = avfilter_get_by_name("buffersink");AVFilterInOut *outputs = avfilter_inout_alloc();AVFilterInOut *inputs  = avfilter_inout_alloc();enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P};m_filter_graph = avfilter_graph_alloc();if (!outputs || !inputs || !m_filter_graph) {ret = AVERROR(ENOMEM);goto end;}/* buffer video source: the decoded frames from the decoder will be inserted here. */sprintf(args,"video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",codecContext->width, codecContext->height, codecContext->pix_fmt,codecContext->time_base.num, codecContext->time_base.den,codecContext->sample_aspect_ratio.num, codecContext->sample_aspect_ratio.den);ret = avfilter_graph_create_filter(&m_buffersrc_ctx, buffersrc, "in",args, NULL, m_filter_graph);if (ret < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");goto end;}/* buffer video sink: to terminate the filter chain. */ret = avfilter_graph_create_filter(&m_buffersink_ctx, buffersink, "out",NULL, NULL, m_filter_graph);if (ret < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");goto end;}ret = av_opt_set_int_list(m_buffersink_ctx, "pix_fmts", pix_fmts,AV_PIX_FMT_YUV420P, AV_OPT_SEARCH_CHILDREN);if (ret < 0) {av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");goto end;}/* Endpoints for the filter graph. */outputs->name       = av_strdup("in");outputs->filter_ctx = m_buffersrc_ctx;outputs->pad_idx    = 0;outputs->next       = NULL;inputs->name       = av_strdup("out");inputs->filter_ctx = m_buffersink_ctx;inputs->pad_idx    = 0;inputs->next       = NULL;   if ((ret = avfilter_graph_parse_ptr(m_filter_graph, m_filters_descr.c_str(),&inputs, &outputs, NULL)) < 0)goto end;if ((ret = avfilter_graph_config(m_filter_graph, NULL)) < 0)goto end;return ret;
end:avfilter_inout_free(&inputs);avfilter_inout_free(&outputs);return ret;
}

工程地址:

https://download.csdn.net/download/dancing_night/10452188

ffmpeg用drawtext filter 给视频加字幕,代码实现相关推荐

  1. mac自动给视频加字幕(ffmpeg,autosub)

    mac python3.8 自动给视频加字幕(ffmpeg,autosub实现) 安装ffmpeg 安装autosub 网课没字幕听起来不习惯,所以尝试给mp4视频文件加上字幕,内容参考了不同教程进行 ...

  2. 给视频加字幕HTML代码,一键添加字幕的软件推荐,几分钟学会给短视频加字幕,自媒体人都在用...

    很多人觉得给短视频加字幕很辛苦? 今天给大家介绍几款给短视频添加字幕用到的软件. 1.字幕通: 字幕通是一款全新模式的智能视频翻译软件,将繁琐的视频字幕翻译制作工作最大程度的便捷化,成功实现从切分时间 ...

  3. html+视频添加字幕,给视频加滚动字幕,给视频加字幕制作mv 录制的视频配背景音乐...

    给视频添加滚动字幕方法其实很简单,像我们下载的电影,歌曲,用手机录制的视频都可以加字幕,或者滚动字幕,也可以加背景音乐或其它声音,给视频开头或结尾加一张图片或多张图片等等都是可以实现的,而这一切都是那 ...

  4. android视频添加字幕,视频加字幕手机app

    视频加字幕手机app是一款为用户朋友们打造的视频制作神器,这款视频加字幕手机能够帮助用户朋友们剪辑视频,同时它还支持很多的视频编辑功能,使用起来很简单,用户朋友们快来下载使用吧! 视频加字幕手机app ...

  5. html给字添加音频,如何给视频加字幕并与语音同步?方法用得好就是这么简单!...

    原标题:如何给视频加字幕并与语音同步?方法用得好就是这么简单! 大家好,今天要分享的内容是:如何用爱剪辑给视频加字幕并与语音同步. 在电影.电视剧和一些短视频中,字幕和语音都是同时出现同时消失的.那么 ...

  6. 新手给视频加字幕 包括制作字幕文件

    本人新手,一时头脑发热,想给自己录的视频加点字幕处理下什么的.感觉现在市场上相关软件很多,根据个人经验,觉得以下方式不错. 1.使用人人影视的时间机器 (TIME MACHINE)软件制作字幕文件,再 ...

  7. 什么软件可以给视频加字幕?这些软件值得收藏

    不知道是不是有小伙伴们和我一样,平时喜欢拍摄一些视频来记录自己的生活,在剪辑视频的时候,我们通常还会为视频加上一些字幕,这样可以方便视频的观看.不过现在可能还有一部分小伙伴没有给视频加过字幕或者是不知 ...

  8. 教你如何用绘声绘影给视频加字幕

    昨天负责视频制作的Ben给我们讲了非常生动有趣的一堂课,主题就是用绘声绘影软件来给视频加字幕. 之前也有过给视频加字幕的经验,但那个软件更适合给专业人士来用,因为功能巨多,每一个细节都会很详细地进行再 ...

  9. 如何给MP4视频加字幕

    最近接了一个任务,需要给一批MP4格式的视频加字幕,刚开始百度了一些方法,使用SrtSubMaster 制作字幕文件,然后用会声会影 X8 ,导入字幕文件,转换成最终的视频,制作了一个Demo没问题, ...

最新文章

  1. 了解你所不知道的SMON功能(一):清理临时段
  2. 编译Bitcoin BCH configure: error: libdb_cxx headers missing ,终于解决了
  3. Nacos源码NacosServiceRegistryAutoConfiguration
  4. linux耳机检测,Audio Jack 的耳机检测和按键检测
  5. 基于 xilinx vivado 的PCIE ip核设置与例程代码详解
  6. 编写一个汇编语言程序,将字符串Hello World中的全部小写字母转换为大写字母,并存放回原地址处。
  7. python中acosh_acosh()函数以及C ++中的示例
  8. GOF之结构型模式Ⅰ(重点)
  9. 干掉勒索病毒的22岁程序员自曝黑历史:中学是电脑白痴
  10. Android应用程序组件Content Provider简要介绍和学习计划 .
  11. 符合功能安全要求的动态测试工具-TESSY
  12. Linux中将4块10T新硬盘合并成一个,挂载到Resource目录下
  13. 排序算法之直接插入法
  14. django 框架模型之models常用的Field,这些Field的参数、及常见错误原因及处理方案。
  15. java 三维旋转立方体_java - 如何通过旋转来计算立方体的所有方向,而不重复方向? - SO中文参考 - www.soinside.com...
  16. MySQL innodb引擎,事务提交 commit 异常,但数据提交成功
  17. ubuntu 环境搭建问题归纳
  18. 系列文章-大数阶算之计算从入门到精通(序)
  19. 5.4 Residual diagnostics
  20. 最强免费的Python IDE: 可视化的集成开发调试环境PyCharm

热门文章

  1. 如何区分IO密集型、CPU密集型任务?
  2. My97时间插件使用、My97设置日期控件日期格式
  3. mysql查询学生姓名_查询全体学生的姓名及其出生年份 (数据库)
  4. 知识工作效率八段锦 【51PPT】
  5. Kubernetes之(二十)Helm程序包管理器
  6. 常用校验算法(累加和、异或和)
  7. 基于ARM板s3c2440---wifi网卡
  8. 用js计算12个月的社保缴纳总额-企业信息公示
  9. hive_Decimal64ColumnVector cannot be cast to org.apache.hadoop.hive.ql.exec.vector.DecimalColumnVect
  10. 【每日笔记】:layui表单checkbox设为必选