ffmpeg下载和实战获取音视频时长

目录

一、介绍和下载

(1)介绍

(2)下载

二、实战演示

(1)通过ffmpeg获取音视频的时长

[1. 命令行方式:](#1. 命令行方式:)

[2. java代码实现:](#2. java代码实现:)


一、介绍和下载

(1)介绍

FFmpeg 是一个​​跨平台的开源音视频处理解决方案​​,它包含了庞大的库集合和命令行工具,用于处理多媒体内容(音频、视频、字幕等)。

(2)下载

Download FFmpeghttps://ffmpeg.org/download.html

二、实战演示

(1)通过ffmpeg获取音视频的时长

1. 命令行方式:

复制代码
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 D:\\Desktop\\测试音频\\119.mp3
  • -v error:只显示错误信息,避免多余输出。
  • -show_entries format=duration:仅显示时长信息。
  • -of default=noprint_wrappers=1:nokey=1:简化输出格式,只返回数值(单位:秒)。

2. java代码实现:

复制代码
package com.grmdcxy;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class FFmpegDuration {
    public static void main(String[] args) {
        String mediaPath = "D:\\Desktop\\教程视频\\框架讲解\\旋转骰子效果.mp4";
        double duration = getMediaDuration(mediaPath);
        System.out.println("音视频时长(秒): " + duration);
        System.out.println("音视频时长(HH:MM:SS): " + secondsToTime(duration));
    }

    /**
     * 调用 ffprobe 获取音视频时长(秒)
     */
    public static double getMediaDuration(String filePath) {
        try {
            // 构建 ffprobe 命令
            String[] cmd = {
                "ffprobe",
                "-v", "error",
                "-show_entries", "format=duration",
                "-of", "default=noprint_wrappers=1:nokey=1",
                filePath
            };

            // 执行命令并读取输出
            Process process = Runtime.getRuntime().exec(cmd);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = reader.readLine();

            if (line != null) {
                return Double.parseDouble(line);
            }
        } catch (IOException | NumberFormatException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 将秒数转换为 HH:MM:SS 格式
     */
    public static String secondsToTime(double seconds) {
        int hours = (int) (seconds / 3600);
        int minutes = (int) ((seconds % 3600) / 60);
        int secs = (int) (seconds % 60);
        return String.format("%02d:%02d:%02d", hours, minutes, secs);
    }
}
相关推荐
mortimer1 天前
一键实现人声伴奏分离:基于 `uv`, `FFmpeg` 和 `audio-separator` 的高效解决方案
python·ffmpeg·音视频开发
筏.k3 天前
WebRTC 项目中捕获 FFmpeg 底层源码日志(av_log)的完整方案
ffmpeg·webrtc
学习_学习_再学习3 天前
ffmpeg学习记录
学习·ffmpeg
我科绝伦(Huanhuan Zhou)3 天前
Oracle AWR管理与快照操作完整指南
数据库·oracle·ffmpeg
梵尔纳多3 天前
ffmpeg 使用滤镜实现播放倍速
c++·qt·ffmpeg
无敌最俊朗@5 天前
音视频播放的核心处理流程
ffmpeg
mortimer6 天前
搞懂FFmpeg中2个桀骜不驯的参数:CRF 与 Preset
ffmpeg·音视频开发·视频编码
2401_841495647 天前
Windows 系统中ffmpeg安装问题的彻底解决
windows·python·ffmpeg·bug·语音识别·下载·安装步骤
八月的雨季 最後的冰吻7 天前
FFmpeg --15-视频解码: AVIO内存输入模式分析
ffmpeg·音视频
aqi007 天前
FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV
android·ffmpeg·音视频·直播·流媒体