如何在一次渲染中连接视频并将滤镜应用于 one/both 个视频?

How to concat videos and apply filters to one/both of them in one render?

我正在合并两个文件,但其中一个需要应用硬字幕。我可以硬编码一次然后连接文件,但由于编解码器冲突,它需要编码两次,因为性能问题我想避免。

我尝试在 this documentation 中找到的复杂过滤器中添加简单的字幕。然后我尝试将它应用于在 Whosebug 上找到的 concat 视频过滤器示例代码。

ffmpeg -i segment.mp4 -i video.mp4 -filter_complex "[0:v] [0:a] [1:v] ass=subtitle.ass [1:a] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mkv

我曾尝试只为 video.mp4 添加字幕,但后来我得到了:

[Parsed_ass_0 @ 000002db090dd000] Shaper: FriBidi 1.0.4 (SIMPLE)
[Parsed_ass_0 @ 000002db090dd000] Using font provider directwrite
[Parsed_ass_0 @ 000002db090dd000] Added subtitle file: 'subtitle.ass' (2 styles, 3 events)
[AVFilterGraph @ 000002db096e6680] Too many inputs specified for the "ass" filter.
Error initializing complex filters.
Invalid argument

我不确定我是不是只是添加了错误的过滤器,或者只是错误的方法。

您必须先将字幕应用到相关视频,然后再连接结果。

ffmpeg -i segment.mp4 -i video.mp4 -filter_complex "[1:v]ass=subtitle.ass[v1];[0:v] [0:a] [v1] [1:a] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mkv