java ffmpeg获取视频时长

news/2024/7/10 21:41:13 标签: java, ffmpeg, 音视频

nacos里面配置的ffmpegPath,如果不用这个,也可以自己写一个ffmpegPath的地址

java">    @NacosValue(value = "${data.ffmpegPath}", autoRefreshed = true)
    private String ffmpegPath;

代码

java">public  Float getVideoSeconds(String remoteVideoURL){
        try {
            // 定义远程视频的URL
            // 构建FFmpeg命令


            ProcessBuilder processBuilder = new ProcessBuilder(ffmpegPath, "-i",remoteVideoURL);



            // 读取FFmpeg的输出信息


            // 创建ProcessBuilder并执行命令

            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();

            // 读取FFmpeg命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;

            String durationInSeconds = null;
            while ((line = reader.readLine()) != null) {
                if (line.contains("Duration:")) {
// 获取包含视频时长信息的行
                    String durationLine = line.split("Duration:")[1].split(",")[0].trim();
                    String[] durationParts = durationLine.split(":");
                    int hours = Integer.parseInt(durationParts[0].trim());
                    int minutes = Integer.parseInt(durationParts[1].trim());
                    double seconds = Double.parseDouble(durationParts[2].trim());

                    // 计算总秒数
                    double totalSeconds = hours * 3600 + minutes * 60 + seconds;
                    durationInSeconds = String.valueOf(totalSeconds);
                }
            }

            reader.close();

            // 打印视频时长
            if (durationInSeconds != null) {
                System.out.println("视频时长:" + durationInSeconds);
                return Float.valueOf(durationInSeconds);
            } else {
                System.out.println("无法获取视频时长。");
                return null;
            }
        } catch (IOException e) {

            e.printStackTrace();
            return null;
        }
    }


http://www.niftyadmin.cn/n/5042962.html

相关文章

qt creator创建项目和添加图片资源

目录 一、创建项目 二、放上需要的图片 三、再次打开项目 四、运行项目 一、创建项目 二、放上需要的图片 在创建的项目里新建一个文件夹,里面放上需要的图片 右击项目点击add new 去第一步加的图片的文件夹,把所有图片都加载进来 然后去ui文件里就可…

Python 与 Qt c++ 程序共享内存,传递图片

python 代码 这里Python 使用 shared_memory QT 使用 QSharedMemory 简单协议: 前面4个字节是 图片with,height,0,0 后面是图片数据 import sys import struct def is_little_endian():x0x12345678y struct.pack(I,x)return y[0]0x78print(f"is_little_end…

【机组】计算机系统组成课程笔记 第二章 计算机中的信息表示

2.1 无符号数和有符号数 2.1.1 无符号数 没有符号的数,其实就是非负数。在计算机中用字节码表示,目前最常用的是八位和十六位的。 2.1.2 有符号数 将正负符号数字化,0代表 ,1代表 - ,并把代表符号的数字放在有效数…

华为全联接大会2023 | 周子明:销服一体云转型,共创客户服务价值

2023年9月22日,华为全联接大会2023(HUAWEI CONNECT 2023)在上海举办的第三天,上海恒驰信息系统有限公司创始人&CEO 周子明 亮相《共筑数智根基,共建数智生态》主题演讲,继华为云全球生态部总裁 康宁 演…

DS相关题目

DS相关题目 题目一:消失的数字 拿到这道题目之后,首先可以想到的一个解题方法就是,我们可以先排序,排完序之后,这个数组其实就是一个有序的数组了,那只用比较数组中的每一个元素和他对应的下标是不是相等的…

PHP 反序列化漏洞:序列化与反序列化

文章目录 参考环境约定数据结构与数据格式 正反序列化操作有何意义?封装包裹意义 正反序列化操作序列化操作序列化文本 反序列化操作 特殊的类与对象可有可无的方法必须存在的类定义__PHP_Incomplete_Class 对象 随意增添的属性不可缺少的默认属性 参考 项目描述搜…

代码随想录算法训练营第55天|392. 判断子序列,115.不同的子序列

链接: 392. 判断子序列 链接: 115.不同的子序列 392. 判断子序列 lass Solution {public boolean isSubsequence(String s, String t) {if(t.length() < s.length()) return false; // 因为是判断 S 是否为 T 的子序列//所以 T 的长度必须大于等于 S 的长度int len1 s.le…

UOS服务器操作系统搭建离线yum仓库

UOS服务器操作系统搭建离线yum仓库 1050e版本操作系统&#xff08;适用ARM64和AMD64&#xff09;1、挂载everything镜像并同步2、配置本地仓库3、配置nginx发布离线源 1050e版本操作系统&#xff08;适用ARM64和AMD64&#xff09; 首先需要有everything镜像文件 服务端操作流…