Flatpak安装的PyCharm中subprocess调用FFmpeg报错排查
解决Flatpak版PyCharm中subprocess调用FFmpeg版本不一致导致的WebP输出格式错误
问题场景
我需要在Python中通过subprocess.run执行以下FFmpeg命令,截取视频帧生成WebP预览图:
ffmpeg -ss 00:00:30 -i "/home/exl/—1—ARCHIVE—1—/video/music videos/author --- a2 - name (text).webm" -vf scale=150:-2 -vframes 1 -c:v libwebp -compression_level 6 -quality 100 /home/exl/—1—ARCHIVE—1—/—3—previews—3—/734a8a0bac3a83e0f6c69416a26ec5cd211a6d742f3df63bb72bdbe6431b57c30677bc11551ba4aaaecac15ed2c48de51340a09020b7e9d9479e1e81ff766191.webp
该命令在系统终端中运行完全正常,但在Flatpak安装的PyCharm中执行时,返回无法找到合适的输出格式错误。
排查后发现:
- 系统终端使用的FFmpeg版本为
5.1.1-1ubuntu1 - PyCharm的
subprocess调用的FFmpeg版本为5.0.1 - 两者执行
which ffmpeg均返回/usr/bin/ffmpeg,但实际调用的是不同环境下的二进制文件
原因分析
Flatpak应用运行在沙箱容器中,会自带一套独立的运行环境。即使路径显示为/usr/bin/ffmpeg,PyCharm实际调用的是容器内部的旧版本FFmpeg,而非系统全局的新版本。旧版本FFmpeg对WebP编码的参数支持或格式兼容性存在问题,导致命令执行失败。
解决方案
1. 直接调用系统全局的FFmpeg二进制文件
先在系统终端中获取FFmpeg的真实绝对路径:
realpath /usr/bin/ffmpeg
得到路径后(例如/usr/lib/x86_64-linux-gnu/ffmpeg),在Python代码中用该绝对路径替换ffmpeg命令:
import subprocess ffmpeg_path = "/usr/lib/x86_64-linux-gnu/ffmpeg" # 替换为你获取的真实路径 cmd = [ ffmpeg_path, "-ss", "00:00:30", "-i", "/home/exl/—1—ARCHIVE—1—/video/music videos/author --- a2 - name (text).webm", "-vf", "scale=150:-2", "-vframes", "1", "-c:v", "libwebp", "-compression_level", "6", "-quality", "100", "/home/exl/—1—ARCHIVE—1—/—3—previews—3—/734a8a0bac3a83e0f6c69416a26ec5cd211a6d742f3df63bb72bdbe6431b57c30677bc11551ba4aaaecac15ed2c48de51340a09020b7e9d9479e1e81ff766191.webp" ] subprocess.run(cmd, check=True)
如果Flatpak沙箱限制了对系统文件的访问,需要给PyCharm添加文件访问权限:
flatpak override com.jetbrains.PyCharm --filesystem=/usr/lib/x86_64-linux-gnu/ffmpeg
2. 适配旧版本FFmpeg的参数
如果无法调用系统全局FFmpeg,可调整命令参数适配5.0.1版本的FFmpeg:
- 先在PyCharm的终端中执行
ffmpeg -h encoder=libwebp,查看旧版本支持的参数 - 部分旧版本可能不支持
-compression_level,可替换为-q:v参数控制质量,或者去掉不兼容的参数
调整后的示例命令:
ffmpeg -ss 00:00:30 -i "/home/exl/—1—ARCHIVE—1—/video/music videos/author --- a2 - name (text).webm" -vf scale=150:-2 -vframes 1 -c:v libwebp -q:v 100 /home/exl/—1—ARCHIVE—1—/—3—previews—3—/734a8a0bac3a83e0f6c69416a26ec5cd211a6d742f3df63bb72bdbe6431b57c30677bc11551ba4aaaecac15ed2c48de51340a09020b7e9d9479e1e81ff766191.webp
3. 更新Flatpak容器内的FFmpeg版本
如果使用的是PyCharm的官方Flatpak包,可等待官方更新容器内的FFmpeg版本;也可以手动构建包含新版本FFmpeg的自定义Flatpak包,但操作复杂度较高,适合有Flatpak配置经验的用户。
内容的提问来源于stack exchange,提问作者name
相关产品推荐
相关产品推荐

