AVAssetWriterInput Настройки Качество по сравнению с размером файла

Вот довольно специфический вопрос, который оставил меня в тупике. Я пишу программное обеспечение для записи видео, которое захватывает видеоданные с веб-камеры на MP4. Мое программное обеспечение заменит уже установленный скрипт, который запускает QuickTime Player, чтобы сделать то же самое, но выводить в MOV.

Я использую AVFoundation и собираю и сохраняю на месте, но после неоднократных настроек и тестов я обнаружил, что уже установленный скрипт последовательно создает MOV-файлы с более высоким качеством видео и меньшими размерами файлов, чем мое программное обеспечение.

Вот ссылка на два примера: MOV, созданный сценарием на месте, и MP4, созданный моим программным обеспечением: https://www.dropbox.com/sh/1qnn5afmrquwfcr/AADQvDMWkbYJwVNlio9_vbeNa?dl=0

MOV был создан коллегой по качеству и размеру файла, который я пытаюсь согласовать с моим программным обеспечением. MP4 записывал в моем офисе, очевидно, в другой ситуации освещения, но с той же камерой, что и на месте.

Сравнивая два видео, я вижу, что они имеют одинаковые размеры, длительность и видеокодек, но различаются как по размеру, так и по качеству.

Вот код, в котором я настроил свои входные данные AVAssetWriter и AVAssetWriter:

NSDictionary *settings = nil;

settings = [NSDictionary dictionaryWithObjectsAndKeys:
            // Specify H264 (MPEG4) as the codec
            AVVideoCodecH264, AVVideoCodecKey,

            // Specify the video width and height
            [NSNumber numberWithInt:self.recordSize.width], AVVideoWidthKey,
            [NSNumber numberWithInt:self.recordSize.height], AVVideoHeightKey,

            // Specify the video compression
            [NSDictionary dictionaryWithObjectsAndKeys:
             [NSNumber numberWithInteger:2500000], AVVideoAverageBitRateKey,
             [NSNumber numberWithInt:1], AVVideoMaxKeyFrameIntervalKey,
             //AVVideoProfileLevelH264Baseline30, AVVideoProfileLevelKey, Not available on 10.7
              nil], AVVideoCompressionPropertiesKey,

            // Specify the HD output color
            [NSDictionary dictionaryWithObjectsAndKeys:
             AVVideoColorPrimaries_ITU_R_709_2, AVVideoColorPrimariesKey,
             AVVideoTransferFunction_ITU_R_709_2, AVVideoTransferFunctionKey,
             AVVideoYCbCrMatrix_ITU_R_709_2, AVVideoYCbCrMatrixKey, nil], AVVideoColorPropertiesKey,
            nil];

self.assetWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:settings];// sourceFormatHint:self.formatHint];

/*self.pixelBufferAdaptor = [[AVAssetWriterInputPixelBufferAdaptor alloc]
 initWithAssetWriterInput:self.assetWriterInput
 sourcePixelBufferAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
 [NSNumber numberWithInt:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange],//kCVPixelFormatType_32BGRA],
 kCVPixelBufferPixelFormatTypeKey,
 nil]];*/
NSError *error;

self.videoFile = [NSURL fileURLWithPath:file];

//[self.movieFileOutput startRecordingToOutputFileURL:self.videoFile recordingDelegate:self];

self.assetWriter = [[AVAssetWriter alloc]
                    initWithURL:self.videoFile
                    fileType:AVFileTypeMPEG4//AVFileTypeQuickTimeMovie//
                    error:&error];

if (self.assetWriter){
  [self.assetWriter addInput:self.assetWriterInput];

  self.assetWriterInput.expectsMediaDataInRealTime = YES;

И код, в котором я настроил свой AVCaptureVideoDataOutput и добавил его в мой сеанс захвата:

AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];

output.alwaysDiscardsLateVideoFrames = NO;

  output.videoSettings = nil;

  self.videoQueue = dispatch_queue_create("ca.blackboxsoftware.avcapturequeue", NULL);

  [output setSampleBufferDelegate:self queue:self.videoQueue];

  [self.session addOutput:output];

Эта проблема качества является большим камнем преткновения в моем программном обеспечении, и мне очень нужна ваша помощь с ним. Я буду рад опубликовать любой другой код, который вам может понадобиться, и проверить изменения, которые, по вашему мнению, будут иметь значение.

Спасибо за ваше время.

0 ответов

Другие вопросы по тегам