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

问题

当我们用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;
    }

相关推荐

  1. 视频

    2024-03-19 11:24:02       58 阅读
  2. python教程——把视频gif

    2024-03-19 11:24:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 11:24:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 11:24:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 11:24:02       82 阅读
  4. Python语言-面向对象

    2024-03-19 11:24:02       91 阅读

热门阅读

  1. IOS面试题object-c 136-140

    2024-03-19 11:24:02       31 阅读
  2. axios的安装和引用

    2024-03-19 11:24:02       42 阅读
  3. Jenkins环境搭建与使用

    2024-03-19 11:24:02       41 阅读
  4. WPF意外无法启动?try-catch也无法捕捉?0xc0000409?

    2024-03-19 11:24:02       49 阅读
  5. Docker 是什么,Docker 常用命令,怎么写Dockerfile

    2024-03-19 11:24:02       44 阅读
  6. CentOS yum安装MongoDB的详细教程

    2024-03-19 11:24:02       42 阅读
  7. 大模型-Prompt-API介绍

    2024-03-19 11:24:02       48 阅读
  8. 动态规划 Leetcode 322 零钱兑换

    2024-03-19 11:24:02       194 阅读