ffmpeg 支持哪些文件扩展名?

ffmpeg 支持哪些文件扩展名?

我正在尝试从蓝光光盘中提取字幕,它是一个hdmv_pgs_subtitle。所以我尝试

ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.sub 

并得到

Could not write header for output file #0 (incorrect codec parameters ?): 
Operation not permitted

然后我就这么做了

ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.sup 
ffmpeg -i file.m2ts -map 0:3 -scodec copy rip3/test.srt

以及一堆其他不同的扩展,直到我尝试了.mkv一下,它才起作用。

我如何找到 ffmpeg 允许的扩展名?我还没有找到一个地方将其命名.mkv为扩展名

ffmpeg -formats提到了matroska,但没有说这.mkv是扩展名。那么有没有办法找到 ffmpeg 支持的所有文件扩展名?

编辑:阅读了 slhck 的答案后,我通过在源文件夹中执行此命令找到了扩展。

查找 . -type f -iname "*.c" -exec egrep -H ".extensions" {} \;

文件名将提供一些关于其格式的信息。

答案1

首先,您可以通过调用来查看所有格式(容器)ffmpeg -formats。他们没有提到扩展可能是因为扩展本身通常毫无意义,您可以使用选项覆盖输出格式-f

您可以查看特定复用器 (解复用器) 的常见扩展。例如:

$ ffmpeg -v 1 -h demuxer=matroska
  Demuxer matroska,webm [Matroska / WebM]:
  Common extensions: mkv,mk3d,mka,mks

输出格式及其扩展名已在编码器中注册。因此,在查看 ffmpeg 源代码时,您会在 Matroska 中找到以下内容:

AVOutputFormat ff_matroska_muxer = {
    .name              = "matroska",
    .long_name         = NULL_IF_CONFIG_SMALL("Matroska"),
    .mime_type         = "video/x-matroska",
    .extensions        = "mkv",
    ....

输入格式通常不是通过其扩展名来解析,而是通过实际包含的数据来解析。

另请参阅:


问题是 ffmpeg 可以处理的所有格式中只有两种支持 HDMV PGS 字幕:

  • MPEG-TS
  • MKV(Matroska)

您不能使用 SRT 容器,因为这是一个不同的概念。SRT 字幕基于文本,而 HDMV PGS 字幕是实际的位图。

因此,如果您需要做的就是将字幕存储在某个地方,那么这应该可行:

ffmpeg -i input.mkv -c:s:0 copy -map 0:s:0 output.mks

相关内容