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

FFmpeg Shell脚本执行报错:无法找到合适的输出格式(权限排查无效)

FFmpeg Shell脚本执行报错:无法找到合适的输出格式(权限排查无效)

看起来你遇到的问题挺典型的——终端直接跑FFmpeg命令没问题,但放进脚本里就报格式错误,而且权限排查也没用。我帮你梳理几个可能的原因和解决方案:

1. 排查FFmpeg的路径与环境变量问题

这是最常见的诱因,尤其是你用sudo执行脚本的时候:

  • 普通用户终端里的ffmpeg可能是你自己编译或安装的、带完整编码支持的版本,但sudo切换到root后,环境变量PATH会受限,调用的可能是系统默认的、缺少libx265或MP4格式支持的FFmpeg版本。
  • 验证方法:
    • 先在普通终端执行which ffmpeg,记下路径(比如/usr/local/bin/ffmpeg)
    • 再执行sudo which ffmpeg,对比两个路径是否一致。如果不一样,说明sudo用的是另一个FFmpeg。
  • 解决方法:
    • 尽量不用sudo执行脚本(视频文件操作通常不需要root权限,除非文件存放在root专属目录),直接用普通用户运行:bash mybash.sh video_2023-07-28_10-49-50
    • 如果必须用sudo,就在脚本里写FFmpeg的绝对路径,比如把ffmpeg替换成你刚才记下的路径:
      #!/bin/bash
      
      /usr/local/bin/ffmpeg -i "$1".mkv -an -vf "select='isnan(prev_selected_t)+gte(t-prev_selected_t,1)',setpts=0.10*PTS" "$1".mp4
      
      /usr/local/bin/ffmpeg -i "$1".mp4 -vcodec libx265 -crf 28 "$1"_compressed.mp4
      

2. 合并FFmpeg命令,避免中间文件问题

你的脚本分两步生成中间MP4文件,这不仅效率低,还可能引入中间文件的读写或格式兼容问题。可以把加速和压缩合并成一条命令,一步到位:

#!/bin/bash

ffmpeg -i "$1".mkv -an -vf "select='isnan(prev_selected_t)+gte(t-prev_selected_t,1)',setpts=0.10*PTS" -vcodec libx265 -crf 28 "$1"_compressed.mp4

这样跳过了中间的MP4文件,直接输出最终的压缩视频,减少出错点。

3. 验证FFmpeg的编码支持

确认你调用的FFmpeg确实支持MP4输出和libx265编码:

  • 在终端执行ffmpeg -codecs | grep libx265,如果能看到libx265相关的输出,说明支持;如果没有,说明你的FFmpeg没有编译这个编码库,需要重新安装带libx265支持的FFmpeg版本。
  • 同时执行ffmpeg -formats | grep mp4,确认MP4格式是否在输出格式列表里。

备注:内容来源于stack exchange,提问作者codeanjero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:04:35