如何延迟ffmpeg中的字幕?

How to delay subtitles in ffmpeg?

使用 ffmpeg,我正在使用以下内容将字幕刻录到电影中:

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

有没有办法delaying/shifting字幕的起点? 例如,让所有潜艇在 2 秒后开始?

我不确定单次调用是否可行,但您始终可以生成 subtitles.srt

的延迟版本
ffmpeg -itsoffset 2 -i subtitles.srt -c copy subtitles_delayed.srt

然后刻录到电影里。

剪切外部 .srt 字幕文件的示例,and/or 连同生成的 .mkv 视频文件(现在带有内部字幕),and/or 提取剪切的内部字幕,and/or然后通过代理(或其他...)将其刻录(剪切 .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 -地图 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 "字幕=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"

调整时间、名称和字幕参数(此处作为示例),更改 encoder/encoder 设置等以适应自己的格式。 我已经在此处(网站编辑器)稍微编辑了语法,因此某处可能有错字,但如果是这样,您会修复它…… ffmpeg 命令的其他组合/顺序也可以提供相同的 and/or 其他想要的结果。 如果您通过组合选项(例如计时和转换为 .mkv 容器等)获得更快的方法(由于复制,这非常快)请告诉我......我现在还没有尝试过。