Недавно я опубликовал вопрос об экспорте видео с textOverlay (используя AVVideoComposition
). Я пытаюсь быстро применить наложение CATextLayer
к видео, используя следующий метод:
@IBOutlet weak var subTitle1: UITextField!
func applyVideoEffectsToComposition(_ composition: AVMutableVideoComposition!, size: CGSize) {
// 1 - Set up the text layer
let subTitle1Text = CATextLayer()
subTitle1Text.font = "Helvetica-Bold" as CFTypeRef
subTitle1Text.frame = CGRect(x: 0, y: 0, width: size.width, height: 100)
subTitle1Text.string = subTitle1.text
// subTitle1Text.string = "Sheep" ****No subtitle on output video if replace above line with this one ****
subTitle1Text.alignmentMode = kCAAlignmentCenter
subTitle1Text.foregroundColor = UIColor.white.cgColor
// 2 - The usual overlay
let overlayLayer = CALayer()
overlayLayer.addSublayer(subTitle1Text)
overlayLayer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
overlayLayer.masksToBounds = true
// 3 - set up the parent layer
let parentLayer = CALayer()
let videoLayer = CALayer()
parentLayer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
videoLayer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
parentLayer.addSublayer(videoLayer)
parentLayer.addSublayer(overlayLayer)
composition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, in: parentLayer)
}
Проблема Когда я использую textfield
для назначения let subTitle1Text : CATextLayer
, я получаю желаемое выходное видео с текстом на нем. Однако, если бы я заменил свойство subTitle1Text.string
некоторым статическим текстом, таким как subTitle1Text.string = "Sheep"
, у меня не было бы текста в субтитрах.
Когда я просматриваю это с помощью AVPlayer
, я вижу ожидаемый текст на видео, но при сохранении видео с AVExportSession
субтитры не добавляются.
Итак, мой вопрос: в чем причина такого необычного поведения?