使用单个命令在FFmpeg中剪切视频和添加字幕

5
我想从视频中剪切一段并在该段中添加字幕,可以分为以下3个步骤:
1. 剪切视频:使用以下命令 ```ffmpeg -ss 25:00 -to 26:00 -i vid.mp4 -c copy out.mp4``` 2. 剪切字幕:使用以下命令 ```ffmpeg -i sub.srt -ss 25:00 -to 26:00 out.srt``` 3. 在视频片段中添加字幕:使用以下命令 ```ffmpeg -i out.mp4 -vf subtitles=out.srt -c:a copy -y final.mp4```
但我想通过单个ffmpeg命令完成上述操作。如果我尝试使用以下命令: ```ffmpeg -ss 25:00 -to 26:00 -i vid.mp4 -vf subtitles=sub.srt -c:a copy -y final.mp4``` 视频会被剪切,但没有字幕被添加。这个命令很快。
如果我尝试使用以下命令: ```ffmpeg -i vid.mp4 -ss 25:00 -to 26:00 -vf subtitles=sub.srt -c:a copy -y final.mp4``` 视频被剪切并正确地添加了字幕,但是开始写final.mp4有延迟。我认为ffmpeg从开头处理vid.mp4直到到达`-ss`时间(并删除该部分)然后继续处理并将其写入final.mp4
有没有一种方法可以用一个ffmpeg命令快速完成这个过程呢?就像ffmpeg直接转到`-ss`时间并剪切、处理、添加字幕一样。
2个回答

11

是的,字幕过滤器在内部打开字幕文件,并不知道视频的搜索点,因为FFmpeg在搜索后重新设置时间戳。

因此,请保留源时间戳,然后重置它们,即

ffmpeg -ss 25:00 -to 26:00 -copyts -i vid.mp4 -vf subtitles=sub.srt  -c:a copy -ss 25:00 -y final.mp4

0

字幕作为单独的流(就像视频和音频一样)进行处理。您需要指定要复制哪些流。假设视频是流#0:0,音频是流#0:1,字幕是流#0:2,则命令将如下:

ffmpeg -ss 25:00 -to 26:00 -i vid.mp4 -c copy -map 0:0 -map 0:1 -map 0:2 out.mp4

您可以使用ffprobe查询现有的流:
ffprobe -i vid.mp4

这将产生类似于以下内容的结果

Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1912x1036 [SAR 1:1 DAR 478:259], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Stream #0:1(fre): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448
Stream #0:2(eng): Subtitle: subrip

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