所以,在他们的 IRC 频道讨论之后,我确定你不能用 Handbrake 做到这一点。
但是,这是使用 ffmpeg 的一种相对轻松的方式:
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
outputPipe = [NSPipe pipe];
taskOutput = [outputPipe fileHandleForReading];
current_task = [[NSTask alloc] init];
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
NSString *stillName = [NSString stringWithFormat:@"%@_still%d.png", [MY_FILE substringToIndex:([draggedFile length]-4)], MY_STILL_NUMBER];
[current_task setLaunchPath: [NSString stringWithFormat:@"%@/ffmpeg", resourcePath]];
// save just frame at current time
// by leaving -ss before the -i, we enable direct indexing within ffmpeg, which saves a still in about a second, rather than a minute or so on a long video file
NSArray *arguments = [NSArray arrayWithObjects:@"-ss", currentFrameTime, @"-i", draggedFile, @"-vframes", @"1", @"-f", @"image2", stillName, nil];
[current_task setArguments:arguments];
[current_task setStandardInput:[NSPipe pipe]];
[current_task setStandardOutput:outputPipe];
[current_task setStandardError:outputPipe];
[defaultCenter addObserver:self selector:@selector(saveTaskCompleted:) name:NSTaskDidTerminateNotification object:current_task];
[current_task launch];
[taskOutput readInBackgroundAndNotify];
所以,我正在使用 Handbrake 任务(转换视频),然后使用另一个任务来保存静止图像。我可以只使用 ffmpeg,但我喜欢 Handbrake,所以我会以这种方式利用 2。
希望这可以帮助那里的任何人。