Повторное сжатие необходимо, потому что вы изменяете данные кадра, если накладываете текст на сам кадр. Итак, рабочий процесс идет Decompress frame > Modify it to add text > recompress frame
,
Вы можете использовать кодек без потерь для файла с добавленными субтитрами. Один из них будет huffyuv, h.264 и Dirac, похоже, также имеют профили без потерь. (Это приведет к тому же качеству, что и исходный файл, с гораздо большим размером файла)
Теоретически, возможно написать приложение, которое перекодирует только те блоки, которые изменены субтитрами, но это, вероятно, необходимо глубоко внедрить в кодек кодов ... Это должно позволить ограничить области, на которые влияет качество. Я не знаю ничего подобного, что существует, хотя ... (Это также должно было бы быть написано специально для каждого кодека, в то время как изменение распакованного кадра позволяет использовать существующие библиотеки кодера и декодера, а также повторное сжатие другой формат)
В идеале, вы должны использовать сжатые файлы без потерь до завершения редактирования и экспортировать окончательный файл с предпочтительным сжатием. Однако это работает только для видео, которые вы производите.
Другим вариантом, который может быть приемлемым, является добавление субтитров в качестве дополнительного потока данных (хотя это позволит их отключить). MPEG-4 синхронизированный текст - один из таких форматов субтитров, Ogg Writ - другой. (Но ни один из них, похоже, не поддерживает контейнер AVI) (С их помощью субтитры - это просто еще одна дорожка, как аудио и видео, которые воспроизводятся при воспроизведении файла)
Может также работать сжатие с использованием лучшего кодека (вероятно, Dirac, H.264 или H.265, в зависимости от формата ввода), чтобы попытаться ограничить потерю качества без огромного увеличения размера файла.