如何在ffmpeg中延迟字幕?

19

使用ffmpeg,我正在使用以下命令向电影中烧录字幕:

ffmpeg -i inputfile.mov -vf "subtitles=subtitles.srt:force_style='Alignment=9,Fontsize=8,Outline=0'" $outputfile.mov

有没有一种方法可以延迟/改变字幕的开始时间?例如,让所有字幕晚2秒钟开始?

2个回答

31

我不确定能否在单次调用中实现,但您总是可以生成一个subtitles.srt的延迟版本。

ffmpeg -itsoffset 2 -i subtitles.srt -c copy subtitles_delayed.srt

然后将其烧录到电影中。


如果我想让字幕提前2秒开始呢? - Grimeire
6
@Grimeire,负偏移也是有效的。例如-itsoffset -2 - t-mart

1

关于剪辑外部.srt字幕文件的示例,可以与结果为.mkv视频文件(现在具有内置字幕),或提取所剪切的内部字幕进行合并,或将其(剪切的.srt文件)同步烧录到原始(.mp4或.mkv如果您需要)中。 再通过代理(或其他方式...)

首先将.mp4和.srt组合到一个.mkv容器中(如果尚未如此):

ffmpeg -hide_banner -y -i "original.mp4" -i "original.srt" -c copy -c:s srt -metadata:s:s:1 language=eng -map 0 -map 1 -map_metadata 0 "original_subs.mkv"

然后根据您想要剪辑的电影片段(或字幕)进行剪切: (这种方式的字幕会在完整原始视频和外部字幕中按照完美的时间进行剪切,其他方式会导致时间错误。)

ffmpeg -hide_banner -y -ss 01:19:16 -t 00:03:01 -i "original_subs.mkv" -c copy "original_subs_cut.mkv"

获取剪辑后的 .srt 文件:

ffmpeg -hide_banner -y -i "original_subs_cut.mkv" "original_subs_cut.srt"

然后剪辑并刻录原始电影,连同剪辑后的.srt文件。

ffmpeg.exe -hide_banner -y -ss 01:19:16 -t 00:03:01 -i "original_subs.mkv" -filter_complex "subtitles=f='original_subs_cut.srt':force_style='FontName=Arial,FontSize=32,Shadow=1'" -strict -2  -c:s mov_text -c:v h264_nvenc -profile:v high -pix_fmt yuv420p -bufsize 20M -bf:v 3 -b:v 1.0M -preset slow -rc:v vbr_hq -rc-lookahead 32 -shortest "original.en.mp4"

调整时间、名称和字幕参数(此处仅作为示例),更改编码器/编码器设置等以适应自己的格式。 我已经在这里编辑了语法(网站编辑器内),所以可能会有拼写错误,但如果有,您将会修复它... 此外,其他组合/顺序的ffmpeg命令也可以产生相同和/或其他想要的结果。 如果您通过组合选项(例如将时间与转换为.mkv容器一起使用)获得更快的方法,请告诉我... 我现在还没有尝试过。


4
欢迎来到 SO,请按照要求格式化您的代码片段。 - desertnaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接