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
相关产品推荐
相关产品推荐

