您的位置:

ffmpeg字幕完全指南

一、ffmpeg字幕提取

在很多情况下,我们需要从视频中提取字幕,以便于后续的文字处理和翻译等等,而ffmpge提供了一种非常简便的方式实现字幕提取 .srt, .ass 等字幕文件格式。示例如下:

ffmpeg -i input.mp4 -map 0:s:0 output.srt
ffmpeg -i input.mp4 -map 0:s:0 output.ass

上述两个命令分别将input.mp4的第一条字幕流输出为 srt 和 ass 的格式。

二、ffmpeg添加字幕

当我们得到了字幕文件之后,我们需要把字幕文件加入视频当中,ffmpge同样提供了一种简便的方式实现字幕添加。 示例为:

ffmpeg -i input.mp4 -vf "subtitles=input.srt" -c:a copy output.mp4

上述命令将input.mp4中的字幕文件input.srt加入视频当中并输出为output.mp4的格式,其中 -vf 表示视频过滤,subtitles 是字幕的过滤器。

三、ffmpeg字幕命令

我们可以通过使用ffprobe命令行工具来列出给定文件的所有流信息,示例如下:

ffprobe input.mp4

上述命令将列出input.mp4的所有流信息。 这将包括多个stream,例如视频流(通常为第1个)和音频流(通常为第2个),后续可能包括字幕流。当我们得到了字幕流的信息时,我们就可以使用以下map选项将其映射到输出文件:

ffmpeg -i input.mp4 -map 0:v -map 0:a -map 0:s:1 output.mp4

上述命令将 input.mp4 中第2条字幕流映射到输出文件 output.mp4。

四、ffmpeg字幕名文档

在许多情况下,我们需要为输出的字幕流指定一个特定的名称。 这可以通过将 -metadata:s:s:0 追加到转码、或提取流的命令中来实现,示例如下:

ffmpeg -i input.mp4 -vf "subtitles=input.srt" -c:a copy -metadata:s:s:0 language=eng output.mp4

上述命令将input.mp4中的字幕文件input.srt加入视频当中并输出为output.mp4的格式,其中 -vf 表示视频过滤,subtitles 是字幕的过滤器。此外,还增加了一个 -metadata:s:s:0 选项,其中 language=eng 为特定的字幕流添加“语言”元数据。

五、ffmpeg字幕压制

有时我们希望能够在压缩视频文件时去掉字幕,ffmepg 提供了实现此操作的选项,示例如下:

ffmpeg -i input.mp4 -c copy -sn output.mp4

上述命令将input.mp4输入文件的字幕流压制掉并输出到output.mp4的文件中,其中-c copy表示输入文件的副本不需要进行重新编码。此外,还将 -sn 选项追加到命令中,该选项将快速禁用所有音频流。

六、ffmpeg字幕换行

在编写字幕分享时,我们可能需要更改字幕换行的方式以便于更好的展示效果,示例如下:

ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='Alignment:8'" output.mp4

上述命令将 input.mp4 中的字幕文件 input.srt 加入视频当中,并设置 force_style 参数更改字幕的整体排列方式,如此示例中我们将字幕的对齐方式 Alignment:8 更改为向左对齐。

七、ffmpeg字幕跳动

有些情况下,在视频中字幕会出现跳动的现象,ffmepg通过一下方式来控制跳动情况:

ffmpeg -i input.mp4 -vf "subtitles=input.srt:force_style='margin_v=20'" output.mp4

上述命令将 input.mp4 输入文件添加字幕,设置 force_style 参数并更改跳动现象,如此示例中我们将字幕的上下行距 margin_v=20 减小以便于更好的展示。

八、ffmpeg字幕解码

有时候,输入的字幕内容使用的编码格式不正确,引起乱码或显示错误等问题。在这种情况下,我们可以使用 ffprobe 命令行工具来查看输入字幕流的编码格式,例如:

ffprobe -show_entries stream_tags=language -select_streams s:0 -v quiet input.mp4

上述命令将显示 input.mp4 中的第一条字幕流所使用的编码格式,默认情况下 ffprobe 将输出所有元数据,包括编码格式、文件格式、大小、分辨率、持续时间等。

然后,我们可以使用 -sub_charenc 选项指定用于解码字幕文件的编码格式,例如:

ffmpeg -i input.mp4 -c:s copy -sub_charenc GBK output.mp4

上述命令将 input.mp4 输入文件的第一条字幕流从 srt 格式复制到输出文件的字幕流中,并使用 GBK 编码格式对其进行解码。

九、ffmpeg字幕组压制参数

如果您需要压缩具有多个字幕流的视频文件,那么您可以使用 -sn 选项,例如:

ffmpeg -i input.mp4 -c copy -sn output.mp4

上述命令将输入文件 input.mp4 的所有字幕流压制掉,并将其输出为 output.mp4,其中 -c copy 表示您不需要重新编码视频文件。

十、ffmpeg字幕没了选取

如果您在转换字幕文件时遇到了一些奇怪的问题,例如某些转换工具将字幕文件转换为不熟悉的格式,或者导致字幕文件中的某些字幕缺失。 此时,您可以使用一些其他工具来查找和删除缺失的字幕。 示例:

ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=PTS-STARTPTS[v],subtitles=path/to/sub.srt,setpts=PTS-STARTPTS+4/TB[s]" -map "[v]" -map "[s]" -c:v libx264 -c:a copy -movflags +faststart output.mp4

上述命令将input.mp4输入文件添加字幕,查找并删除字幕缺失现象,并将其输出为 output.mp4 文件。

总结

字幕对观看视频时理解视频内容具有重要作用。ffmepg作为一款功能齐全的跨平台解码器支持大多数视频格式和字幕,方便操作,能够用在许多视频处理场景下。