我正在使用一个程序将字幕硬编码到 AVI 文件中。问题是,它会使用编解码器重新压缩视频。我不明白为什么这是必要的,而且会导致明显的质量损失。有没有一个程序可以在不重新压缩视频的情况下放入字幕,这样视频质量就不会损失?
答案1
不可以。硬字幕会修改视频内容,因此需要重新压缩。
答案2
我认为,按照通常的用法,硬字幕意味着它们嵌入到图像数据中,这显然需要重新压缩。软字幕作为单独的文件添加,例如 .srt。但是,嵌入式字幕有一种中间方法。嵌入式字幕作为单独的轨道添加到视频容器中,这意味着它们将包含在文件中,但不需要重新压缩。
对于 Divx 格式,最好的工具是基于 Windows 的应用程序 AVIAddXSubs。它可以嵌入 Idx/Sub/Srt 字幕。
对于 MP4 和其他一些替代方案,Handbrake 可以嵌入软字幕。更多信息请访问他们的维基百科
答案3
您可以使用 mplayer 播放带字幕的视频,然后将所有内容输出到原始 yuv 文件 (-vo yuv4mpeg)。如果您播放电影,这个输出文件将非常大,数百 GB,因此请确保它不会引起问题。
文件输出后可以使用ffmpeg进行压缩,然后进行H264编解码。
答案4
重新压缩是必要的,因为如果将文本叠加在框架本身上,则会更改框架数据。因此工作流程如下Decompress frame > Modify it to add text > recompress frame
。
您可以使用无损编解码器对文件进行编码,并添加字幕。一种是 huffyuv,h.264 和 Dirac 似乎也有无损配置文件。(这将产生与原始文件相同的质量,但文件大小要大得多)
理论上,可以编写一个应用程序,仅对字幕更改的块进行重新编码,但这可能需要深入嵌入到编解码器代码中...这应该可以限制影响质量的区域...但我不知道存在任何类似的东西......(它还需要为每个编解码器专门编写,同时改变解压缩的帧允许使用现有的编码器和解码器库,以及以不同的格式重新压缩)
理想情况下,您应该使用无损压缩文件,直到编辑完成,然后以首选压缩导出最终文件。但这仅适用于您制作的视频。
另一个可能可以接受的选择是将字幕添加为附加数据流(不过这将允许它们被关闭)。MPEG-4 定时文本是一种这样的字幕格式,Ogg Writ 是另一种。(但它们似乎都不支持 AVI 容器)(对于这些,字幕只是另一个轨道,就像播放文件时呈现的音频和视频一样)
它还可以使用更好的编解码器(可能是 Dirac、H.264 或 H.265,取决于输入格式)进行重新压缩,以尝试在不大幅增加文件大小的情况下限制质量损失。