You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用Bash执行FFmpeg视频拼接失败,求参数传递解决方案

解决Java调用Bash脚本执行FFmpeg无响应的问题

以下是针对脚本未执行(无echo输出)的排查和解决步骤:

1. 先验证脚本本身的可用性

  • 直接在终端手动执行脚本,确认基础功能正常:
    # 先给脚本加执行权限(如果没加过)
    chmod +x /path/to/your_script.sh
    # 运行脚本,带上测试参数
    ./your_script.sh test_param1 test_param2
    
  • 确保脚本开头有正确的shebang,推荐用通用写法避免路径问题:
    #!/usr/bin/env bash
    

2. 修正Java的参数传递逻辑

不管用Runtime.exec还是ProcessBuilder,都要避免把整个命令拼成单一字符串,必须拆分为独立的命令项:

// 示例:ProcessBuilder正确写法
ProcessBuilder pb = new ProcessBuilder(
    "/usr/bin/env", "bash",
    "/path/to/your_script.sh",
    "video_list.txt",
    "output.mp4"
);

如果FFmpeg参数包含空格、特殊字符,脚本里要用"$@"接收所有参数,防止参数被错误拆分:

# 脚本内接收参数的示例
echo "Received params: $@"
ffmpeg [your_options] "$@"

3. 强制读取脚本的输出流(关键!)

Java进程如果不读取子进程的标准输出和错误输出,会导致缓冲区满,子进程被阻塞无法执行。必须显式读取这两个流:

Process process = pb.start();

// 启动线程读取标准输出
new Thread(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("Script stdout: " + line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

// 启动线程读取错误输出
new Thread(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.err.println("Script stderr: " + line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

// 等待脚本执行完成,获取退出码
int exitCode = process.waitFor();
System.out.println("Script exit code: " + exitCode);

退出码能直接反映问题:

  • 0:执行成功
  • 127:找不到bash或ffmpeg命令
  • 非0:脚本或FFmpeg执行出错

4. 统一使用绝对路径

  • 脚本内调用FFmpeg时用绝对路径(比如/usr/bin/ffmpeg),避免Java进程环境变量找不到命令;
  • 视频文件、输出文件的路径全部用绝对路径,不要依赖相对路径。

5. 检查权限

  • 确保Java运行用户拥有:脚本的执行权限、视频文件的读取权限、输出目录的写入权限;
  • Linux环境下可临时用chmod或chown调整权限测试,排除权限阻塞问题。

内容的提问来源于stack exchange,提问作者ilie alexandru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:22:29