使用FFMPEG剪切字幕文件

5

我希望能够编辑一个包含音频、视频和字幕流的输入mp4文件。我成功地通过以下步骤剪辑了视频和音频流: 1- 将每个部分转换为新的mp4文件 2- 将mp4文件转换为mpg文件

ffmpeg -i out00.mp4 -qscale:v 0 intermediate1.mpg
ffmpeg -i out01.mp4 -qscale:v 0 intermediate2.mpg

3- 合并mpg文件

ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg

4- 将mpg文件转换回mp4

ffmpeg -i intermediate_all.mpg  -f mp4 output.mp4

我可以将字幕流提取到srt文件中,但我无法剪切字幕文件的部分内容。你有什么好的方法吗?

2个回答

4

在经过长时间的搜索之后,它终于起作用了,这是我做的:

1- 从此处下载最新的FFMPEG(这对我来说造成了很多问题)。

2- 将字幕添加到输入文件中:

ffmpeg -i "input.mkv" -i subtitles.srt -c copy -c:s srt -metadata:s:s:1 language=eng -map 0 -map 1 -map_metadata 0 output.mkv

3- 按照正常操作剪切所需部分,ffmpeg将同时剪辑字幕流。

ffmpeg -i input.mkv -ss 00:00:00 -t 00:01:35 -c copy -map 0:0 -map 0:1 -map 0:2 -qscale:0:V 0 -y out0.mkv

4- 使用concat demux连接切片文件:

ffmpeg  -f concat -i mylist.txt  -c copy output.mkv

其中mylist.txt包含以下内容:

file out0.mkv

file out1.mkv

祝愉快:)


2
所以必须是MKV格式!我之前尝试使用MP4格式,但我想知道为什么字幕没有被裁剪。虽然我知道MP4可以包含字幕,但我不知道为什么它不起作用。谢谢你! - Shayan

2
我认为你需要手动编辑srt文件(包括文本和时间码,即文本需要出现的时间),然后使用类似以下命令将其重新混流到最终视频中:
ffmpeg -i EditedSource.mp4 -i EditedSub.srt -c copy -map 0:a -map 0:v -map 1:s output.mp4

你是否尝试过不创建这些中间文件,而是:

ffmpeg -i out00.mp4 -i out01.mp4 -filter_complex '[0][1]concat=n=2:v=1:a=1 [v][a]' -map '[v]' -map '[a]'  output.mp4

我正在尝试使用FFmpeg而不是手动操作来完成这个任务,我会尝试使用命令来连接文件并回复您,谢谢。 - Anas
经过几次更新后,它可以正常工作: ffmpeg -i out0.mkv -i out1.mkv -filter_complex "[0:0][0:1][0:2][1:0][1:1][1:2]concat=n=2:v=1:a=1 [v][a]" -map [v] -map [a] -y output.mkv - Anas

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