Windows 下ffmpeg安装及实践

Windows 下ffmpeg安装及实践

背景

最近负责音频文件处理相关的业务,涉及到 ffmpeg 对一些音频文件格式的校验,记录一下安装过程及踩坑过程。

安装

  1. 如图1所示,进入官网,在windows下任选一个文件:https://ffmpeg.org/download.html#build-windows
  1. 这里笔者选择第一个文件 **Windows builds from gyan.dev,跳到到如图2的界面 release builds **模块选择对应的下载文件,这里笔者选择 ffmpeg-release-essentials.7z
  1. 解压压缩包后文件目录如下所示。
  1. 这里复制 bin 目录路径把它添加到环境变量 Path 路径中。右击我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 选择 Path 变量(新建或者编辑 )-> 添加 bin目录。这样在 windows 下任意命令可以使用 ffmpeg 命令。


  1. 这里可以输入 ffmpeg.exe -version 检验是否安装成功

实践

  1. 校验音频格式,例如这个音频是 wav 后缀,但本质上是 mp3 格式:
java 复制代码
ffprobe.exe uwiyhluhhjpjjhnohlunhwhmypphihhh.wav
  • 这里表示音频时长4秒17毫秒,start 表示开始时间,Bitrate (比特率),这里为 31 kb/s

比特率:表示文件的比特率,即每秒传输的比特数。

java 复制代码
 Duration: 00:00:04.17, start: 0.000000, bitrate: 31 kb/s
  
  • 第二行 Audio (媒体类型),这里为 mp3 类型,采样率为 16000 Hz,指每秒钟从音频信号中获取的样本数,mono (声道数),表示音频是单声道,即单声道音频。如果是立体声,则会显示为 "stereo"。fltp (样本格式),表示音频样本是浮点型。其他常见的样本格式包括 **s16(16位整数)和 s32(32位整数)**等。接着,31 kb/s (比特率) 表示音频流的比特率为31千比特每秒(kb/s),表示音频压缩质量和文件大小的一个指标。
java 复制代码
Stream #0:0: Audio: mp3, 16000 Hz, mono, fltp, 31 kb/s
  1. 将 mp3 格式转为 wav 格式

ffmpeg.exe -i uwiyhluhhjpjjhnohlunhwhmypphihhh.mp3 -acodec pcm_s16le -ar 44100 1.wav

  • -i: 指定输入文件,这里是 MP3 文件的路径。
  • -acodec pcm_s16le: 指定音频编解码器为 16 位线性脉冲编码(PCM)。这是 WAV 文件的标准编码格式。
  • -ar 44100: 指定采样率为 44100 Hz。这是标准的 CD 质量音频采样率。
  • 1.wav: 指定输出文件,这里是 WAV 文件的路径。
  1. 使用代码转换音频格式,ffmpegCommand
java 复制代码
public static void main(String[] args) {
        String inputFilePath = "C:\\Users\\user\\Downloads\\uwiyhluhhjpjjhnohlunhwhmypphihhh.wav";
        String outputFilePath = "C:\\Users\\user\\Downloads\\2.wav";

        // 构建 FFmpeg 命令
        String ffmpegCommand = "C:\\ffmpeg-6.1.1-essentials_build\\bin\\ffmpeg.exe -i " + inputFilePath + " -acodec pcm_s16le -ar 44100 " + outputFilePath;

        try {
            // 执行 FFmpeg 命令
            ProcessBuilder processBuilder = new ProcessBuilder(ffmpegCommand.split(" "));
            Process process = processBuilder.start();

            // 获取输出信息(可选)
            // InputStream inputStream = process.getInputStream();
            // BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            // String line;
            // while ((line = reader.readLine()) != null) {
            //     System.out.println(line);
            // }

            // 等待 FFmpeg 执行完毕
            int exitCode = process.waitFor();

            if (exitCode == 0) {
                System.out.println("转码成功!");
            } else {
                System.out.println("转码失败。");
            }

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

其他

FFmpeg Documentation

相关推荐
爱敲键盘的猴子1 分钟前
深入理解 Java HashMap
java·hashmap
霸道流氓气质1 分钟前
Java开发者AI编程常用MCP、Skills、Rules全景汇总
java·开发语言·ai编程
天涯醉青楼13 分钟前
Spring Boot 接口返回 Bean 时字段名“变形”的深度剖析与解决方案
java
步行cgn31 分钟前
MyBatis 高级映射与延迟加载完全指南
java·tomcat·mybatis
thefool11226631 分钟前
从中序与后序遍历序列构造二叉树
java
吴声子夜歌43 分钟前
Java面试题——JVM(二)
java·开发语言·jvm
CRMEB1 小时前
商城大促活动策划全流程:从定目标到复盘四阶段
java·开发语言·人工智能·ai·开源·php
denglinqings1 小时前
Java开发从入门到精通所有课程
java·开发语言
星空1 小时前
maven镜像
java·maven
IT小盘1 小时前
17-AI应用防止越权访问知识库
服务器·网络·windows