2

我正在尝试将 SRT 文件和时间码值刻录(硬编码)到 MP4 文件,但无济于事。

我目前正在使用以下命令刻录 srt 和时间码:

刻录 SRT

ffmpeg -i input.mp4 -vf subtitles=subs.srt out.mp4

刻录时间码

ffmpeg -i input.mp4  -filter_complex "drawtext=fontfile=/Windows/Fonts/arial.ttf:x=320:y=main_h-50:fontsize=32:fontcolor='white':timecode='00\:00\:00\:00':rate=29.97" -y output.mp4

但是,我无法将两者组合成一个命令,因为 ffmpeg 不允许同时使用 -vf 和 -filter_complex 。

有解决方法吗?

4

2 回答 2

1

您可以将一系列过滤器链接在一起。这将创建一个filterchain。一系列连接的过滤器链是一个过滤器图。

ffmpeg -i input.mp4 -vf "drawtext,subtitles" -c:a copy output.mp4
  • -vf用于包含一个输入和一个输出的简单(视频)过滤器图。

  • -filter_complex用于由一个或多个输入和/或一个或多个输出组成的复杂过滤器图。但是,我认为使用-filter_complex简单的过滤器图不会导致任何问题。

  • 因为您的输入和输出是 MP4,所以我添加-c:a copy流复制任何音频,因为您可能不需要或不想重新编码它。

  • 为了获得更高的准确性,请考虑使用rate=ntscorrate=30000/1001代替rate=29.97.

于 2015-09-25T16:44:01.453 回答
1

仅适用于遇到此问题的任何人。您可以使用 .srt 文件执行此操作,就像我对 .ass 文件执行此操作一样,唯一的区别是 .ass 文件让我们可以更好地控制字体颜色和其他内容。我找不到 .srt 一个,所以我将分享一个对我有用的 .ass ,我正在使用 hls 输出,但您可以再次使用 mp4 一个:

ffmpeg  -i INPUT_VIDEO_FILE.mp4 -profile:v baseline -level 4.0 -vf "scale=-2:360,subtitles='dynamic_subtitle.ass':force_style='FontName=Aaargh/Aaargh.ttf,PrimaryColour=&H664c4c4c"  -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /s3_temp/video_360.m3u8
于 2016-04-04T11:16:02.450 回答