ffmpeg转码转封装小工具开发

news2024/11/18 8:26:11

如下图所示,是本人开发的一个转码转封装小工具
在这里插入图片描述

其中目标文件视频编码格式支持:H264,H265,VP8,VP9。
目标文件封装格式支持:mp4,mkv,avi,mov,flv。
目标文件音频编码格式支持两个,COPY和AAC,COPY就是原样复用音频,即-avcodec copy。AAC就是转码成AAC格式。
该工具支持只有一个视频通道的文件;和只有一路视频,一路音频的文件这两种情况。

该工具通过vs2017+qt5.9.6编写,其中ffmpeg依赖的库有libx264,libx265,vpx,opus,fontconfig,freetype,ass。
这里面有个视频帧数量统计,用于控制进度,比如总的视频帧数是3000,现在处理了300帧。则进度显示10%。

在此说明下,本人并没有通过下列方式获取视频帧数量:

m_iVideoFrameNum = m_pFormatCtx_File->streams[m_iVideoIndex]->nb_frames;

这种方式不准,原因有二:
1.对于mkv封装格式而言,该数量读取的数量为0
2.对于mp4封装格式而言,假设读到的nb_frames数量为1200,则最终只可能成功解码1199帧,有一帧未能成功解码,ffprobe工具读到的也是1199帧,这里读者可以参考我写的博客:ffmpeg关于AVStream中nb_frames变量数目不正确的问题分析

所以对于图片数量,本人参考了ffprobe的源码,只有成功解码出视频帧的才会计算在内,这块的代码实现位于函数GetVideoFrameCount内。

本人的成果物目录如下:
在这里插入图片描述
这里面总共有4个音视频文件,其中
1.39a8432afe2f70be3c0c2c951d63b868.mp4是只有视频,没有音频的文件,h264编码格式。

2.2022-01-08T22-32-58.mp4既有视频,也有音频,为1080P的分辨率,h264编码格式。

3.TAEYEON-Weekend.mkv既有视频,也有音频,为4K分辨率,VP9视频编码格式,OPUS音频编码格式。

4.2022-01-08T22-32-58.mp4_2023_02_11T15_55_37_H265是由2022-01-08T22-32-58.mp4转码为H265生成的文件,这个需要读者自己生成。

成果物里面有个配置文件FFmpegConvert.ini,内容如下:
在这里插入图片描述
其中open_console=true表示打开控制台。
如下所示:如果目标的视频编码格式设置为VP9,封装格式为flv,则控制台会显示报错信息,flv封装格式不支持VP9编码。
在这里插入图片描述

工程文件结构如下:注意是64位编译。
在这里插入图片描述

里面在视频处理的时候,添加了一个box的滤镜,如下所示:读者可以将其用null滤镜替代,就不会有box了。
在这里插入图片描述

最后,本人将成果物上传到百度网盘,地址如下:
链接:https://pan.baidu.com/s/1QbJfamPwRefcf5TguW_S2w?pwd=1234
提取码:1234

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞

1.应用场景 负载均衡作为现今解决web应用承载大流量访问问题的一种方案,在真实环境中得到广泛的部署。实现负载均衡的方式有很多种,比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 比如基于dns的负载均衡: 当然还有…

LTD212次升级 | 官网社区支持PC端展示 • 官网新增证件查询应用,支持条形码扫码查询

1、新增证件查询应用,支持条形码扫码查询; 2、新增用户社区PC端功能; 01证件查询应用 1、新增证件查询应用功能 支持证件信息录入、打印功能,支持条形码扫码识别。 后台管理操作路径:官微中心 - 应用 - 证件查询 …

这才是CSDN最系统完整的网络安全学习路线(建议收藏)

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…

linux head命令(head指令)(获取文件或管道输出结果前n行,默认前10行)与sed命令区别

head命令是一个在Linux系统中常用的命令,用于读取文件的前几行(默认读取前10行) 文章目录使用方法读取文件的前10行:head filename读取文件的前n行:head -n行数 filename读取多个文件的前几行:head -n 行数…

六、Java框架之SpringBoot

黑马课程 文章目录1. SpringBoot入门1.1 SpringBoot入门案例步骤1:创建SpringBoot项目高版本springboot常见错误步骤2:创建BookController步骤3:启动服务器并运行程序pom.xml示例1.2 官网创建SpringBoot1.3 SpringBoot工程快速启动问题导入打…

网络安全实验室6.解密关

6.解密关 1.以管理员身份登录系统 url:http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/index.php 进入网站点击忘记密码的链接,进入到重置密码的模块 输入aaa,点击抓包,发送到重放模块go 查看返回的链接…

VScode 结合clangd 构建linux源代码阅读环境

1、背景介绍上一篇文章:VScode 结合Global构建linux源代码阅读环境 ,介绍了在VS Code工具中通过remote-ssh远程登陆到Linux远程服务器,使用Global构建linux源代码阅读环境,对linux kernel代码进行解析,实现全局搜索、自…

Vue2创建移动端项目

一、Vscode Vscode 下载安装以及常用的插件 1、Vscode 下载 下载地址:Vscode 中文语言插件 搜索 chinese 主题 Atom 主题 文件图标主题 搜索 icon 源代码管理插件GitLens 搜索 GitLens Live Server _本地服务器 搜索 Live Server Prettier - Code formatt…

405 Method Not Allowed,CORS跨域,来也自动化OCR接口报错,Nginx处理OPTIONS请求

在使用来也的OCR接口时,请求报错了,提示CORS跨域。POST请求,请求url:http://mage.uibot.com.cn/v1/mage/ocr/bills,官方文档:请求与响应:预检请求OPTIONS正式请求错误信息看控制台和网络栏位内容…

【沁恒WCH CH32V307V-R1开发板输出DAC实验】

【沁恒WCH CH32V307V-R1开发板输出DAC实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. DAC项目测试3.1 打开DAC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 数字/模拟转换模块(DAC),包含 2 个可配置 8/12 位数字输入…

自己动手做一个mini-chatgpt

开场最近chatgpt已经火爆了,几乎是家喻户晓老少皆知啊,公测推出60天后就已经是UV人数过亿,日访问量号称也是过亿。投资chatgpt研发团队的微软也是2个月内迅速推出自己的chatgpt的bing搜索,股票下载量都是暴增啊。前面文章已经介绍…

计算机网络自定向下 -- 浅谈可靠性之rdt协议

可靠性数据传输原理 可靠指数据在传输过程中不错,不丢,不乱 运输层要为应用层提供一种服务:数据可以通过一条可靠的信道进行传输,在该信道中传输的数据不会受到损坏或者丢失, 实现这种服务的是可靠数据传输协议。 要实现这种服…

python的opencv操作记录11——阈值分割

文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…

Java爬虫Selenium+Java+ChromeDriver

一、爬虫工具 selenium 是一个模拟浏览器操作的工具,背后有google 维护源代码,支持全部主流浏览器,支持主流的编程语言,包括:java,Python,C#,PHP,Ruby,等,在本项目上使用的Java语言。 官网:https://www.sel…

【Vue】参数传递:如何同时传递 DTO 和 file 文件

日常开发时,如果遇到较为复杂的 DTO 对象的参数传递时,通常前端使用的请求头为:application/json(JSON 格式的数据);而后端可以使用 RequestBody 接收一个 DTO 对象。但当需要在一个界面上同时传递 DTO 和附…

Java集合中的Map

MapMap接口键 值 对存储键不能重复&#xff0c;值可以重复Map三个实现类的存储结构HashMap&#xff1a;Hash表链表红黑树结构 线程不安全TreeMap&#xff1a; 底层红黑树实现HashTable&#xff1a;hash表链表红黑树 线程安全HashMapHashMap常用方法HashMap<String,String>…

[测开篇]设计测试用例的方法如何正确描述Bug

​ 文章目录为什么测试人员要写测试用例&#xff1f;怎样设计测试用例&#xff1f;&#xff08;总的方面&#xff09;1.基于需求设计测试用例&#xff08;总的方面&#xff09; 2.页面&#xff08;总的方面&#xff09; 3.非功能性测试&#xff08;具体方面&#xff09; 4.1 等…

「Python|环境安装|Windows」如何在Windows上安装Python环境?

本文主要介绍如何在Windows上安装Python&#xff0c;帮助初学者或者非程序员伙伴快速搭建可以运行python代码的环境。 文章目录安装python做一点小配置验证python如何安装指定版本的python编程语言的环境搭建一直是学习编程的第一道门槛。 对于如何在Linux系统上安装指定版本的…

谷歌蜘蛛池怎么搭建?Google蜘蛛池可以帮助谷歌排名吗?

本文主要分享关于谷歌蜘蛛池的搭建疑问&#xff0c;以及Google对谷歌排名的影响到底有多大。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 谷歌蜘蛛池怎么搭建&#xff1f; 答案是&#xff1a;需要一个内链外链体系复杂的站群系统…

154、【动态规划】leetcode ——494. 目标和:回溯法+动态规划(C++版本)

题目描述 原题链接&#xff1a;494. 目标和 解题思路 &#xff08;1&#xff09;回溯法 本题的特点是nums中每个元素只能使用一次&#xff0c;分别试探加上nums[index]和减去nums[index]&#xff0c;然后递归的遍历下一个元素index 1。 class Solution { public:int res …