学成在线_视频处理_视频转码不成功

问题

当我们用xxljob进行视频处理中的转码操作时会发现视频转码不成功。即程序会进入下图所示的if语句内。
在这里插入图片描述

问题原因

在进行视频转码时程序会调用Mp4VideoUtil类下的 generateMp4方法,而result接收的正是该方法的返回值。那么什么时候generateMp4方法的返回值会为"success"?答:转码后的视频时长与原视频时长一致时。我们进一步思考generateMp4方法是如何进行时长比较的呢?答:该方法会先分别计算原视频与转码后视频的时长,然后对两个时长进行一定的误差处理,最后比较两个时长是否相等。如:

  1. 计算得原视频时长为"00:00:05.17",转码后视频时长为"00:00:05.12"
  2. 误差处理:将小数点后的两位数字去掉得原视频与转码后视频时长都为“00:00:05”
  3. 比较这两个时间字符串,发现内容相同则返回“success”。
    虽然从上面这个例子看这样的误差处理方式没问题,但如果在第一步时程序计算得原视频时长为"00:00:05.97",转码后视频时长为"00:00:06.02",那么原本两个播放时长相同的视频也会被误判为不相同。也就是说generateMp4方法中对于视频时长的误差处理是不合理的。

解决方案

修改generateMp4方法中对于视频时长的误差处理。
新的误差处理方案为:只要两个时长的误差范围在正负1s内即认为两个时长相同。
由于generateMp4方法又调用了VideoUtil类中的check_video_time方法,所以最终的修改是在VideoUtil类中的check_video_time方法中进行。
修改后
在这里插入图片描述
修改后的check_video_time方法

//检查视频时间是否一致public Boolean check_video_time(String source,String target) {String source_time = get_video_time(source);//取出时分秒source_time = source_time.substring(0,source_time.lastIndexOf("."));String target_time = get_video_time(target);//取出时分秒target_time = target_time.substring(0,target_time.lastIndexOf("."));SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");String target_time1 = null;String target_time2 = null;try {Date date = formatter.parse(target_time);long time = date.getTime();target_time1 = formatter.format(time - 1000);target_time2 = formatter.format(time + 1000);} catch (ParseException e) {e.printStackTrace();}if(source_time == null || target_time == null){return false;}if(source_time.equals(target_time) || source_time.equals(target_time1) || source_time.equals(target_time2)){return true;}return false;}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个性化影片推荐系统|基于JSP技术+ Mysql+Java+ Tomcat的个性化影片推荐系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

html5cssjs代码 034 自定义字体

html5&css&js代码 034 自定义字体 一、代码二、解释 这是一个带有自定义字体的网页,设置了页面背景颜色、文字颜色以及全局样式。它定义了三种自定义字体并通过font-face规则引入外部字体文件,并通过CSS类(.f1, .f2, .f3)…

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点得指针next。通过节点之间的相互连接,最终串联成一个链表。 class Node:def __init…

SpringCloudGateway之高性能篇

SpringCloudGateway之高性能篇 背景 在公司的开放平台中,为了统一管理对外提供的接口、处理公共逻辑、实现安全防护及流量控制,确实需要一个API网关作为中间层。 场景 统一接入点: API网关作为所有对外服务的单一入口,简化客户端对内部系统…

《区块链技术:解锁数字时代的无限可能》

区块链技术作为近年来备受瞩目的创新技术,正以崭新的姿态改变着我们的世界。从技术进展到行业应用,再到面临的挑战与机遇,以及未来的发展趋势,本文将全面剖析区块链技术的发展现状和潜力。 区块链技术原理 区块链技术原理是指构成…

智慧公厕的系统构成与功能解析

智慧公厕系统是通过传感器和云平台相结合的创新技术,旨在提供更好的公厕管理与服务。智慧公厕从系统的构成来看,主要分为感知层(数据收集)、传输层(数据传输)、平台层(数据处理)和应…

Ubuntu学习笔记之Shell与APT下载工具

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu Shell操作 简单的说Shell 就是敲命令。国内把 Linux 下通过命令行输入命令叫…

4、类加载器

2.4.1 什么是类加载器 类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术&#xff0c;类加载器只参与加载过程中的字节码获取并加载到内存这一部分。 类加载器会通过二进制流的方式获取到字节码文件的内容&#xff0c…

【算法】数组-移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…

CentOS、windows与Server_u服务器之间加密传输

一、适用场景&#xff1a; 1、保护数据传输&#xff1a;使用FTPS&#xff08;FTP over SSL/TLS&#xff09;可以加密FTP会话中的所有数据&#xff0c;从而防止数据在网络中被监听或篡改。 2、符合安全标准&#xff1a;许多行业标准要求数据传输必须是加密的。 3、保护用户凭证…

阿里云云服务器ECS端口多个端口号开通教程

阿里云云服务器ECS端口多个端口号开通教程 1、登录到ECS云服务器管理控制台 2、左侧栏找到【实例与镜像】>>【实例】&#xff0c;找到目标ECS实例&#xff0c;点击实例ID进入到实例详情页 3、切换到【安全组】页面&#xff0c;点击右侧【配置规则】&#xff0c;如下图&…

电力变电站自动化控制钡铼R40工业路由器4G全网通

随着电力行业的快速发展和电力系统的规模不断扩大&#xff0c;电力变电站自动化控制系统的建设和运行管理变得尤为重要。在这种背景下&#xff0c;钡铼R40工业路由器作为一款高性能、稳定可靠的通信设备&#xff0c;通过4G全网通技术&#xff0c;可以有效解决电力变电站自动化控…