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

前言

最近在开发过程中,发现当我们上传除了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 解压文件

Haskell 复制代码
# 解压.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 执行文件

Haskell 复制代码
# 进入解压好的文件夹
cd ffmpeg-5.1.1-amd64-static/

# 执行命令
./ffmpeg

出现以下执行成功

3.3 设置全局命令

Haskell 复制代码
# 进入 /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的因为其他的也找不到 哈哈哈

执行命令

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

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

5.java执行ffmpeg

java 复制代码
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("视频转换失败!");
        }
    }
}
相关推荐
超級二蓋茨18 小时前
在 CentOS 上安装 FFmpeg
linux·ffmpeg·centos
云霄IT1 天前
python之使用ffmpeg下载直播推流视频rtmp、m3u8协议实时获取时间进度
python·ffmpeg·音视频
_祝你今天愉快1 天前
在安卓中使用 FFmpegKit 剪切视频并添加文字水印
android·ffmpeg
qing222222222 天前
FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题
ffmpeg·黑屏、绿屏
bubiyoushang8883 天前
CentOS安装ffmpeg并转码视频为mp4
ffmpeg·centos·音视频
weiwei228443 天前
ffmpeg使用入门
ffmpeg·vcpkg
云霄IT3 天前
python使用ffmpeg录制rtmp/m3u8推流视频并按ctrl+c实现优雅退出
python·ffmpeg·音视频
rjszcb4 天前
通过v4l2,采集视频,FFmpeg编码压缩封装视频(三)
ffmpeg·音视频
老谢不老4 天前
ffmpeg-7.1.1 下载安装 windows 版,MP4 转 m3u8 切片,遇到报错 Unrecognized option ‘vbsf‘的解决办法
ffmpeg
xhBruce4 天前
FFmpeg+javacpp中FFmpegFrameGrabber
ffmpeg·ffmpeg+javacpp