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);
    }
}
相关推荐
程序员老陆5 小时前
说一说FFmpeg6在Linux平台的编译
linux·运维·服务器·ffmpeg
用户518186005666 小时前
FFmpeg 剪辑:为什么 `-c copy` 往往做不到帧准确剪切
ffmpeg
cpp_learner1 天前
FFmpeg 解复用全流程解析
ffmpeg
程序员老陆1 天前
FFmpeg时间基相关函数大杂烩
ffmpeg·时间基·timebase
程序员老陆2 天前
FFmpeg libswresample 模块的关键函数swr_convert 到底在干嘛?
ffmpeg·音视频·格式转换·音频重采样
海兰2 天前
ffmpeg-wasm 完整安装指南(Ubuntu 24.04)
ubuntu·ffmpeg·wasm
≮傷£≯√3 天前
QT配置FFmpeg
开发语言·qt·ffmpeg
Everbrilliant893 天前
Android FFmpeg 实战:从基础到播放器的完整技术解析
android·ffmpeg·ffmepg实战·音视频同步实现·ffmpegpractices·ffmpegpractice·opengl 视频渲染
苏灿烤鱼4 天前
从微信公众号内容到视频号视频:自动化视频生成的技术实现
人工智能·python·ffmpeg
桐桐桐4 天前
视频画面裁剪与尺寸压缩实战:ffmpeg crop/scale 用法与在线替代
ffmpeg·音视频·视频