我想从视频中剪出一个片段,然后在那一段中刻录副标题。
我可以分三步完成:
ffmpeg -ss 25:00 -to 26:00 -i vid.mp4 -c copy out.mp4
视频片段中的ffmpeg -i sub.srt -ss 25:00 -to 26:00 out.srt
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时间,剪掉它,处理它,在里面刻录字幕。
谢谢
发布于 2020-01-03 09:59:54
是的,字幕过滤器在内部打开字幕文件,并且不知道视频的搜索点,因为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发布于 2022-01-19 22:32:33
字幕作为一个单独的流(就像视频和音频一样)。您需要指定要复制的流。假设视频为Stream #0:0,音频为Stream #0:1,字幕为Stream #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: subriphttps://stackoverflow.com/questions/59575292
复制相似问题