- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一款可向视频添加动态文本(如字幕)的应用程序。有许多类似的问题,但没有一个真正有一个有效的答案。我对使用“ContentAnimate”而不是“contents”作为基于 Synchronising image, text, and positioning with CoreAnimation 的 animationKeyPath 寄予厚望。但这对我不起作用。
我可以让文本作为叠加层显示在视频上,但动画不起作用 - 我总是看到来自 CATextLayer 的原始基本文本。以下是我如何设置字幕和覆盖:
// 1 - Set up the text layer
CATextLayer *subtitle1Text = [[CATextLayer alloc] init];
[subtitle1Text setFont:@"Helvetica-Bold"];
//[subtitle1Text setString:[NSString stringWithFormat:@"%@: %@", bookmark.creatorMonkeyName, bookmark.info]];
[subtitle1Text setString:@"Place holder"];
[subtitle1Text setFontSize:36];
[subtitle1Text setFrame:CGRectMake(0, 0, videoSize.width, 100)];
[subtitle1Text setAlignmentMode:kCAAlignmentCenter];
[subtitle1Text setForegroundColor:[[UIColor whiteColor] CGColor]];
// 2 - The overlay
CALayer *overlayLayer = [CALayer layer];
[overlayLayer addSublayer:subtitle1Text];
overlayLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
[overlayLayer setMasksToBounds:YES];
overlayLayer.hidden = YES;
CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];
parentLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
videoLayer.frame = CGRectMake(0, 0, videoSize.width, videoSize.height);
[parentLayer addSublayer:videoLayer];
[parentLayer addSublayer:overlayLayer];
videoComp.renderSize = videoSize;
videoComp.frameDuration = CMTimeMake(1, (int32_t) fps);
这是我添加动画的方法:
CABasicAnimation *showCommentAnimation2 = [CABasicAnimation animationWithKeyPath:@"contents"];
[CATransaction begin];
[CATransaction setDisableActions:YES];
overlayLayer.hidden = NO;
showCommentAnimation2.fromValue = @"Hello";
showCommentAnimation2.toValue = @"Goodbye";
showCommentAnimation2.beginTime = bookmark.relativeTimeStamp;
showCommentAnimation2.duration = commentTimeDisplayed;
[subtitle1Text addAnimation:showCommentAnimation2 forKey:[@(i) stringValue]]; //"i" is an iterator, This should allow multiple animations of the same type
[CATransaction setDisableActions:NO];
[CATransaction commit];
副标题弹出并消失 - 但我总是看到文本“占位符”,而不是“你好”或“再见”。
我使用以下方法将视频导出到相机胶卷:
videoComp.animationTool = [AVVideoCompositionCoreAnimationTool
videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
_assetExport.videoComposition = videoComp;
_assetExport.outputFileType = @"public.mpeg-4";
_assetExport.outputURL = outputFileUrl;
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
if (AVAssetExportSessionStatusCompleted == _assetExport.status) {
DLog(@"AVAssetExportSessionStatusCompleted");
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
DLog(@"About to copy video to camera roll");
//move video to camera roll
[library writeVideoAtPathToSavedPhotosAlbum:outputFileUrl completionBlock:^(NSURL *assetURL, NSError *error) {
[self removeWaitingScreen];
dispatch_async(dispatch_get_main_queue(), ^(void){
MPMoviePlayerViewController* theMovie = [[MPMoviePlayerViewController alloc] initWithContentURL: assetURL];
[_viewController presentMoviePlayerViewControllerAnimated:theMovie];
});
}];
} else{
// a failure may happen because of an event out of your control
// for example, an interruption like a phone call comming in
// make sure and handle this case appropriately
DLog(@"Error - Export Session Status: %ld", (long)_assetExport.status);
dispatch_async(dispatch_get_main_queue(), ^(void){
[self removeWaitingScreen];
[[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", NSStringFromClass([self class]))
message:NSLocalizedString(@"Video Creation Failed", nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles: nil] autorelease] show];
});
}
[videoComp release];
}];
}];
有人能帮忙吗?
如果有更好的方法将字幕刻录到视频中,我愿意接受建议。
谢谢。
最佳答案
具有键路径 contents
的动画不能与字符串值(@"Hello"
和 @"Goodbye"
)一起使用。层的 contents
属性包含图像,可手动设置或由层本身绘制。
只需设置文本层的 string
属性就足以产生隐式动画。但是,听起来您需要一个明确的动画来控制 beginTime。这样做的方法是使用 CATransition .参见 here举个例子。
关于ios - 使用 CABasicAnimation animationWithKeyPath : @"contents" on CATextLayer to display dynamic overlay text on Video,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32420650/
如何将多个json对象添加/映射到dart对象 import 'dart:async'; import 'dart:convert'; import 'package:flutter/foundati
我正在研究将产品集成到 Dynamics Great Plains 中。我之前使用过 Dynamics CRM,但没有使用过 Great Plains。我听说 GP 与 CRM 是不同的动物,即使它们
System.Linq.Dynamic.Core 和 System.Linq.Dynamic 有什么区别?我目前正在使用 System.Linq.Dynamic 并且它不包含对 的支持选择 和 多选
我正在尝试通过Firebase存储将图像上传到Firebase,然后在Firestore中创建一个文档,其中包含上述上传图像的网址。为此,我使用此功能 void uploadImageAndCr
我一直在尝试整理一些东西,使我可以从 ListPlot 中提取点,以便在进一步的计算中使用它们。我目前的方法是使用 Locator[] 选择点。这适用于显示点,但我无法弄清楚如何从带有 head Dy
只要我在与 Program 类相同的程序集中有类 ClassSameAssembly ,下面的代码就可以正常工作。但是,当我将类 ClassSameAssembly 移动到单独的程序集时,会引发 Ru
我只是尝试从Firebase实时数据库解析数据。 但在转换为模型时有问题 我正在尝试从Flutter上解析Firebase数据库中的数据。 但是一个错误说 MY Complete QUIZ: {-M5
我创建了一个方法,当我构建它时,出现了这个错误: type '_InternalLinkedHashMap' is not a subtype of type 'List' in type cast
我对这个 flutter 的简单图表代码有疑问。在我尝试运行代码时显示此错误。请任何人都可以帮助我在这.... The argument type 'List>' can't be assigned
我尝试在我的 flutter 应用程序中解析来自 Firestore 的文档。 Firestore 文档: 我创建了两个类来解析这个文档。 类产品: class Produkt{ String n
我有一个2d-List,其中包含一个字符串和一个Map,如下所示: List> content = [ [ "String", { "one": 23,
我使用 Dart“json_serializable”包在 Flutter 应用程序中的 Firestore 数据结构下反序列化。 { googleBookId: jjl4BgAAQBAJ, prov
我注册了 Dynamic CRM 在线试用版(30 天)并创建了一个非托管自定义解决方案(新字段、一些自定义实体等)。现在,我想导出非托管解决方案并将其导入到我的服务器中的 Dynamic CRM O
当我尝试从 StreamTransform 获取一些数据时遇到一些问题 我不明白什么是正确的数据类型 未捕获的异常:类型错误:“_StreamHandlerTransformer”的实例:“_Stre
我正在尝试获取用户数据,但在这样做时出现以下错误: Exception: type '_InternalLinkedHashMap' is not a subtype of type 'Map 我查看
我正在尝试在 sqflite 数据库中保存一些带有 flutter 的数据,但我仍然收到一条错误消息: [ERROR:flutter/shell/common/shell.cc(181)] Dart
我有一个JSON响应,结构如下:。在这个JSON响应中,有各种动态键,如“Owner”和“Master”,每个键都包含一个JSON对象或一个JSON对象数组。我需要创建一个gson数据类来解析这个动态
在 Dynamics 2012 ax 中编译 CIL 时,我看到以下错误 - 名称为“Dynamics.Ax.application”的重复类型。在程序集中“Dynamics.Ax.applicati
我有一个带有 LinkedHashMap 成员的 StatefulWidget 小部件,如下所示: LinkedHashMap _items = new LinkedHashMap>(); 现在我需要
我正在尝试按照此处所述实现搜索资源功能:https://cloudblogs.microsoft.com/dynamics365/it/2019/05/21/retrieve-resource-ava
我是一名优秀的程序员,十分优秀!