我正在尝试通过批处理文件循环遍历所有文件夹,并将存在外部字幕文件的文件合并到现有文件中。字幕可以是 srt/sub/idx/等,基本上任何格式都可以。大多数是英文的,但也有少数是其他语言的。视频文件可以是 MP4、MKV、AVI。(我知道 ffmpeg 可能不支持所有这些文件。)
我不想“刻录”字幕,我只是希望它们可用。
如果可能的话,我不想重新编码任何文件,只需添加字幕,这样我就不需要单独的字幕文件。
如果有人能分享正确语法的命令行来执行此操作,我将非常感激。
我有(无论多么不雅致的)框架(批处理文件),基本上:
For /R %%A in (D:\Movies) Do (
If Exist %%~dpn.srt (
[awaiting ffmpeg CLI syntax]
Del %%~dpn.srt
)
For /R %%B in ("%%~dpn.*Eng.srt") Do (
[awaiting ffmpeg CLI syntax]
Del %%B
)
If Exist %%~dpn.*Ita.srt (
[awaiting ffmpeg CLI syntax]
Del %%~dpn.srt
)
For /R %%B in ("%%~dpn.*Ita.srt") Do (
[awaiting ffmpeg CLI syntax]
Del %%B
)
If Exist %%~dpn.sub (
[awaiting ffmpeg CLI syntax]
Del %%~dpn.srt
)
If Exist %%~dpn.idx (
[awaiting ffmpeg CLI syntax]
Del %%~dpn.srt
)
[repeat for each subtitle format]
)
我缺少的是对 CLI 的简单清晰理解,即仅嵌入(但不“刻录”)字幕,而无需重新编码每个文件(或者,如果重新编码,则需要确保文件不会显着增长)。
提前感谢您的帮助。
谢谢。
答案1
关于同一任务的现有帖子有很多:
- https://stackoverflow.com/questions/8672809/use-ffmpeg-to-add-text-subtitles
- 使用 FFMPEG 为 M4v 视频文件添加字幕
- https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/subtitle_options
- https://askubuntu.com/questions/214199/how-do-i-add-and-or-keep-subtitles-when-converting-video/214351
- https://video.stackexchange.com/questions/22197/ffmpeg-how-to-add-several-subtitle-streams
- https://www.reck.dk/use-ffmpeg-to-add-subtitles-to-video/
基本上你只需使用以下方式指定两个文件作为输入-i
ffmpeg 将创建一个包含它找到的所有输入流的组合文件。
请注意,并非所有容器都支持所有字幕类型,有些可能需要特殊选项。例如,如果您要写入 MP4 文件,则需要-c:s mov_text
将 SUB/SRT 转换为 MP4 的内部字幕格式。如果您有格式精美的 SSA (.ass) 字幕,则只能将它们添加到 .mkv 容器中。
为了避免重新编码,请确保使用“复制”编解码器:-c:a copy
和-c:v copy
。还要避免引用任何提到“hardsubs”的帖子;不要使用-vf
。