ffmpeg 在一个命令中剪切视频和刻录字幕
ffmpeg cut video and burn subtitle in a single command
我想从视频中剪出一段,然后在里面刻录字幕。
我可以通过 3 个步骤完成此操作:
剪视频
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
视频被剪切并正确刻录了字幕,但在开始编写最终.mp4 时出现延迟。
我认为 ffmpeg 从一开始就处理 vid.mp4 直到它到达 -ss
时间(并删除那部分)
然后继续处理写入final.mp4
有没有办法在单个 ffmpeg 命令中快速完成此操作?
像 ffmpeg 直接去 -ss
时间然后剪切,处理它,在里面刻录字幕。
谢谢
是的,字幕过滤器在内部打开字幕文件并且不知道视频的搜索点,因为 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
字幕作为单独的流(就像视频和音频一样)。您需要指定要复制的流。假设视频是 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: subrip
我想从视频中剪出一段,然后在里面刻录字幕。
我可以通过 3 个步骤完成此操作:
剪视频
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
视频被剪切并正确刻录了字幕,但在开始编写最终.mp4 时出现延迟。
我认为 ffmpeg 从一开始就处理 vid.mp4 直到它到达 -ss
时间(并删除那部分)
然后继续处理写入final.mp4
有没有办法在单个 ffmpeg 命令中快速完成此操作?
像 ffmpeg 直接去 -ss
时间然后剪切,处理它,在里面刻录字幕。
谢谢
是的,字幕过滤器在内部打开字幕文件并且不知道视频的搜索点,因为 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
字幕作为单独的流(就像视频和音频一样)。您需要指定要复制的流。假设视频是 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: subrip