ffmpeg-在不更改视频的情况下添加和删除字幕

ffmpeg-在不更改视频的情况下添加和删除字幕,ffmpeg,subtitle,Ffmpeg,Subtitle,我试图将字幕嵌入到视频中,并在不更改视频的情况下再次删除字幕,这意味着我希望输出的视频与原始视频相同 我正在使用以下命令嵌入字幕 ffmpeg -i original.mp4 -i original.srt \ -c:v copy -c:a copy -c:s mov_text \ -map_metadata 0:g -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a \ -movflags +faststart -threads 8 \ output

我试图将字幕嵌入到视频中,并在不更改视频的情况下再次删除字幕,这意味着我希望输出的视频与原始视频相同

我正在使用以下命令嵌入字幕

ffmpeg -i original.mp4 -i original.srt \
-c:v copy -c:a copy -c:s mov_text \
-map_metadata 0:g -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a \
-movflags +faststart -threads 8 \
output.mp4
要删除字幕

ffmpeg -i output.mp4 \
-c:v copy -c:a copy \
-map_metadata 0:g -map_metadata:s:v 0:s:v -map_metadata:s:a 0:s:a \
-movflags +faststart -threads 8 \
-sn \
removed.mp4
输出几乎是一样的,但我不知道是什么导致了差异。当我比较二进制文件时,几乎所有的差异都是

original: 0xF3
removed: 0xF4
字节增加1,我想只有在头中


你能帮忙吗?提前感谢。

通常,您不能期望ffmpeg remux操作的结果与源代码相同,尤其是如果源代码是由其他应用程序生成的

首先,源生成器可能会写入ffmpeg的muxer不会写入的元数据密钥。源moov中可能有ffmpeg不编写的专有框

最后,ffmpeg将压印lav库版本,但可以通过提供
-fflags+bitexact
跳过这些版本

请注意,通过使用
copy
,可以复制流数据包,从而保持媒体流的完整性