代码之家  ›  专栏  ›  技术社区  ›  MeCe

ffmpeg-添加和删除字幕而不更改视频

  •  1
  • MeCe  · 技术社区  · 7 年前

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

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

    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,我认为只有在头中。

    你能帮忙吗?提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gyan    7 年前

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

    对于初学者,源生成器可以编写ffmpeg的muxer不写的元数据键。源moov中可能有ffmpeg不写的专用框。

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

    请注意,使用 copy ,将复制流数据包,以保持媒体流的完整性。