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

相关推荐
快乐就好ya33 分钟前
Java多线程
java·开发语言
IT学长编程38 分钟前
计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·毕业设计·课程设计·毕业论文·计算机毕业设计选题·二手图书交易系统
CS_GaoMing1 小时前
Centos7 JDK 多版本管理与 Maven 构建问题和注意!
java·开发语言·maven·centos7·java多版本
艾伦~耶格尔2 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
man20172 小时前
基于spring boot的篮球论坛系统
java·spring boot·后端
2401_858120532 小时前
Spring Boot框架下的大学生就业招聘平台
java·开发语言
S hh2 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
Java探秘者2 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
攸攸太上2 小时前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
2301_786964362 小时前
3、练习常用的HBase Shell命令+HBase 常用的Java API 及应用实例
java·大数据·数据库·分布式·hbase