【发布时间】:2011-10-18 12:09:43
【问题描述】:
我有一个 mov 文件,我正在修改它,方法是在电影的开头添加一个带有图像的轨道(使用 QTMovie 的 -addImage 方法)。当我展平这样的电影时(使用 QTMovie 的 -writeToFile: 方法),我得到另一个 .mov 文件,开头带有这个“水印”。 但是当我尝试播放它时,我得到的消息是需要安装 QuickTime 7 才能播放这样的文件(原始未处理的 mov 文件不需要 QuickTime Player 7,可以在 QT Player 中正常播放X(雪豹和狮子自带)。
我想知道是否可以让这个文件能够在 QuickTime Player X 上播放?我不希望我的应用程序的用户必须安装这个旧版本的播放器。此外,Final Cut Pro 7、Telestream Episode Engine 编码器、Autodesk Smoke 等一些应用程序在添加图像轨道后无法正确理解这种“文件格式”。
是否可以将图像添加为电影轨道,而不是图像轨道?也许使用旧的 QT API? (无论如何,QTKit 似乎仍然是原始的)。
我将“mpv4”指定为图像编码器(在 -addImage 方法中),但该水印图像仍然不被视为电影轨道,而是被视为使用电影编码器编码的图像轨道。
谢谢!
【问题讨论】:
-
请提供更多信息。原始电影中使用的编解码器是什么?您可以在 QuickTime Player 的检查器中查找它。您是如何添加新曲目的?
[QTMovie addImage:forDuration:withAttributes:]不会添加新曲目,而是将图像添加到现有曲目。你是怎么把电影弄平的?您是否使用了“QTMovieFlatten”属性?水印是什么样的? -
其实我刚刚创建了一个新电影([[QTMovie alloc] initToWritableData:error:]),在电影中添加了一个图像(-addImage)(显然创建了一个新轨道,至少一个“图像”类型,因为一开始有 0 首曲目)。然后我将原始电影中的所有轨道复制到这个新创建的轨道中(遍历所有轨道并为每个轨道调用 addTrack:)。因此我没有使用任何特殊的编解码器。 QTPlayer 的电影检查器显示,除了原始电影轨道外,还有一个 MPEG4“视频”轨道,这是我使用“mpv4”编解码器编码的图像,不是真正的视频轨道
-
然后我使用 [QTMovie -writeToFile:@"newmovie.mov" withAttributes:[NSDictionary dictionaryWithObj:[NSNumber numberWithBool:YES] forKey:QTMovieFlatten]] 保存了这个新创建的电影(这是唯一的方法我发现能够将所有曲目真正写入文件,否则我只是在 mov 文件中得到“符号链接”,以及本身大小为 4KB 的 mov 文件)。而且这个 mov 文件只能用 QuickTime 7 打开,我猜这可能会刺激最终用户。我希望我可以将图像转换为真正的视频轨道,而不是图像轨道。也许使用 QuickTime C API。
-
好的,我知道了。制作包含多个视频轨道的电影是可能的,但许多应用程序不太可能理解这一点。 Quicktime 播放器将通过根据变换矩阵排列音轨来播放此类电影。 VLC 不会,它会在单独的窗口中播放每个曲目。你究竟期望得到什么?也许您只需要在现有视频轨道的开头添加图像?
-
你好戴维德。我只是想在电影的开头和结尾添加一个图像(这个图像应该持续几秒钟,作为原始电影两端的某种预告片出现),保留原始视频编解码器如果可能的话,原始视频轨道。目前 VLC 不播放我生成的电影(以及其他一些应用程序)。如果我可以将图像添加为现有视频轨道的一部分,那就太好了。不过我不知道怎么做。
标签: objective-c macos cocoa qtkit