FFmpeg支持的文件扩展名有哪些?如何获取并用于JavaFX的ExtensionFilter
获取FFmpeg支持的完整文件扩展名(用于JavaFX FileChooser)
我来帮你搞定这个问题——要拿到FFmpeg支持的完整文件扩展名列表给JavaFX的FileChooser用,确实不能直接靠ffmpeg -codecs或ffmpeg -formats的输出,因为那些是格式/编解码器名称,和实际扩展名不是直接对应的(就像你举的例子:matroska格式对应的是.mkv这类扩展名,而不是直接用格式名)。这里有几个实用的方法:
方法1:用命令行批量提取准确的扩展名映射
FFmpeg本身会为每个格式关联支持的扩展名,你可以针对单个格式查询,比如想知道Matroska支持哪些扩展名,运行:
ffmpeg -h demuxer=matroska
输出里会有一行类似 Extensions: mkv mk3d mka mks,这就是该格式对应的所有扩展名。
如果要批量提取所有格式的扩展名,可以用这两个命令分别获取输入(可解码)和输出(可编码)格式的扩展名:
# 提取所有可读取格式的扩展名 ffmpeg -hide_banner -formats | grep "^D " | awk '{print $2}' | xargs -I {} ffmpeg -h demuxer={} 2>&1 | grep -E "^ Extensions:" | awk '{print substr($0, 14)}' # 提取所有可写入格式的扩展名 ffmpeg -hide_banner -formats | grep "^E " | awk '{print $2}' | xargs -I {} ffmpeg -h muxer={} 2>&1 | grep -E "^ Extensions:" | awk '{print substr($0, 14)}'
把这些输出收集起来,去重后就能得到完整的扩展名列表。
方法2:直接整理映射表(适合快速开发)
如果不想折腾命令行,也可以根据FFmpeg的格式规则整理一份常见的扩展名映射,比如:
- 视频容器:
.mp4,.mkv,.avi,.mov,.flv,.wmv,.webm - 音频格式:
.mp3,.aac,.flac,.wav,.ogg,.ac3 - 流媒体/其他:
.m3u8,.ts
然后把这些分组到JavaFX的ExtensionFilter里,示例代码如下:
// 视频文件过滤器 ExtensionFilter videoFilter = new ExtensionFilter( "Video Files", "*.mp4", "*.mkv", "*.avi", "*.mov", "*.flv", "*.wmv", "*.webm" ); // 音频文件过滤器 ExtensionFilter audioFilter = new ExtensionFilter( "Audio Files", "*.mp3", "*.aac", "*.flac", "*.wav", "*.ogg", "*.ac3" ); // 所有支持的文件过滤器 ExtensionFilter allFilter = new ExtensionFilter( "All Supported Files", "*.mp4", "*.mkv", "*.avi", "*.mov", "*.flv", "*.wmv", "*.webm", "*.mp3", "*.aac", "*.flac", "*.wav", "*.ogg", "*.ac3", "*.m3u8", "*.ts" ); // 把过滤器添加到FileChooser FileChooser fileChooser = new FileChooser(); fileChooser.getExtensionFilters().addAll(videoFilter, audioFilter, allFilter);
小提示
- 有些格式可能对应多个扩展名(比如Matroska对应
.mkv、.mka、.mks),一定要确认完整的列表 - 如果你的程序需要支持非常冷门的格式,建议用方法1的命令行工具批量提取,避免遗漏
内容的提问来源于stack exchange,提问作者zjevander
相关产品推荐
相关产品推荐

