【小白】linux安装ffmpeg | java转码 【超详细】

发布于:2025-07-05 ⋅ 阅读:(15) ⋅ 点赞:(0)

前言

        最近在开发过程中,发现当我们上传除了mp4以外的其他少见的格式,如 .flv .rmvb 格式的视频时,在前端在线播放的时候会播放不出来画面,所以  接下来,将要进行一个非常完美的工程,将视频格式转为.mp4

1.安装 ffmpeg

ffmpeg有很多强大的功能,如进行视频切边  分隔   转码 等功能 。大家可以理解为是一个.exe文件 只要安装好  找到执行路径  就可以进行视频的操作。 话不多说  直接开始

2.下载ffmpeg包

OK  已经给大家准备好了  ffmpeg-5.1.1-amd64-static.tar.xz
链接: https://pan.baidu.com/s/1CmL0NNXtB2GQc8JwjE5IBg?pwd=1234 提取码: 1234

3.安装启动 ffmpeg

来 将下载好的放入 linux中 随便放到一个文件夹下  我一般喜欢放在 opt下

  

3.1 解压文件

# 解压.xz
xz -d ffmpeg-5.1.1-amd64-static.tar.xz

# 解压 tar
tar -xvf ffmpeg-5.1.1-amd64-static.tar.xz

3.2 启动 ffmpeg

进入 解压好的文件夹下

 红框框 的 这两个 执行命令 很重要   使用java执行的时候 都是找到 ffmpeg 执行文件

# 进入解压好的文件夹
cd ffmpeg-5.1.1-amd64-static/

# 执行命令
./ffmpeg

   出现以下执行成功

 3.3 设置全局命令


# 进入 /usr/bin下
cd /usr/bin

      #  ln  -s  自己的目录所在                别名
ln -s /opt/ffmpeg-5.1.1-amd64-static/ffmpeg ffmpeg

#  ln  -s  自己的目录所在                     别名
ln -s /opt/ffmpeg-5.1.1-amd64-static/ffprobe ffprobe

 4.测试

 首先准备好一个随便格式的视频文件  我准备了一个 MP4的因为其他的也找不到 哈哈哈   

执行命令


# ffmpeg -i 文件名                                               转好后的文件路径  
ffmpeg -i input.mp4  -c:v libx264 -crf 19 -strict experimental  /opt/out.mp4

ok 测试通过 就可以  使用java代码 进行 执行拉

5.java执行ffmpeg

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class FFmpegVideoConverter {
    private final String ffmpegPath;

    /**
     * 构造函数,指定 FFmpeg 可执行文件路径
     */
    public FFmpegVideoConverter(String ffmpegPath) {
        this.ffmpegPath = ffmpegPath;
    }

    /**
     * 将视频转换为 MP4 格式
     * @param inputFilePath  输入视频文件路径
     * @param outputFilePath 输出 MP4 文件路径
     * @return 转换成功返回 true,失败返回 false
     */
    public boolean convertToMP4(String inputFilePath, String outputFilePath) {
        try {
            // 构建 FFmpeg 命令
            List<String> command = new ArrayList<>();
            // ffmpegPath 为在linux安装好的执行命令 我所在的位置为 /opt/ffmpeg-5.1.1-amd64-static/ffmpeg
            command.add(ffmpegPath);
            command.add("-i");
            // 源视频所在位置
            command.add(inputFilePath);
            command.add("-c:v");
            command.add("libx264");      // 使用 H.264 视频编码
            command.add("-preset");
            command.add("medium");       // 编码速度与压缩比平衡
            command.add("-crf");
            command.add("23");           // 视频质量,数值越小质量越高 (0-51)
            command.add("-c:a");
            command.add("aac");          // 使用 AAC 音频编码
            command.add("-strict");
            command.add("experimental"); // 允许使用实验性编解码器
            command.add("-b:a");
            command.add("128k");         // 音频比特率
            command.add("-movflags");
            command.add("faststart");    // 优化 MP4 文件以便网络播放
            command.add("-y");           // 覆盖已存在的文件
            // 新文件所在位置
            command.add(outputFilePath);

            // 执行命令
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            processBuilder.redirectErrorStream(true); // 合并标准输出和错误输出
            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); // 可替换为日志记录
            }

            // 等待命令执行完成
            int exitCode = process.waitFor();
            return exitCode == 0;
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
            return false;
        }
    }

    public static void main(String[] args) {
        // 设置 FFmpeg 路径(根据实际情况修改)
        String ffmpegPath = "/usr/bin/ffmpeg"; // Linux/Mac
        // String ffmpegPath = "C:\\ffmpeg\\bin\\ffmpeg.exe"; // Windows

        // 创建转换器实例
        FFmpegVideoConverter converter = new FFmpegVideoConverter(ffmpegPath);

        // 输入和输出文件路径
        String inputFile = "input.avi";    // 替换为实际输入文件
        String outputFile = "output.mp4";  // 替换为实际输出文件

        // 执行转换
        boolean success = converter.convertToMP4(inputFile, outputFile);

        // 输出结果
        if (success) {
            System.out.println("视频转换成功!");
        } else {
            System.out.println("视频转换失败!");
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到