Запись видео с AVCaptureSessionPreset 640x480 дает мне 480x640

Я записываю видео с помощью avfoundation и устанавливаю captureSession с помощью AVCaptureSessionPreset640x480. Но после записи, когда я вижу свое видео, его размеры меняются на 480x640.

Изменить: Проблема с записью в портретном режиме заключается в том, что вы всегда получаете разрешение 480X640. из-за ориентации устройства необходимо повернуть видео в соответствии с размером ориентации.

Я решил эту проблему, но это было совсем не по теме.

- (CGAffineTransform)transformFromCurrentVideoOrientationToOrientation:(AVCaptureVideoOrientation)orientation
{


    CGAffineTransform transform = CGAffineTransformIdentity;

    // Calculate offsets from an arbitrary reference orientation (portrait)
    CGFloat orientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:orientation];
    CGFloat videoOrientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:self.videoOrientation];

    // Find the difference in angle between the passed in orientation and the current video orientation
    CGFloat angleOffset = orientationAngleOffset - videoOrientationAngleOffset;
    transform = CGAffineTransformMakeRotation(angleOffset);

    return transform;
}

person nsgulliver    schedule 21.11.2012    source источник


Ответы (2)


Держали телефон вертикально (книжный ориентатин)?

Видео захватывается в ориентации устройства, определяемой с помощью акселерометра. Вы можете принудительно использовать альбомную ориентацию.

person onon15    schedule 21.11.2012
comment
Да, это портретный режим, а если я хочу снимать в портретном режиме? - person nsgulliver; 21.11.2012
comment
Если вы хотите обрезать кадр 3: 4 из захваченного кадра 4: 3, НАЖМИТЕ, вам нужно сделать это при пост-обработке видео результата. (И разрешение будет низким, так как ваша ширина 480, ваше максимальное разрешение может быть 320x480) - person onon15; 21.11.2012
comment
Есть ли способ записать в портретном режиме, но не получить 480 * 640? Я попытался установить предустановки AvCapture, но они, похоже, не работают для меня, я имею в виду, что если я делаю запись в ландшафтном режиме, тогда он дает правильное соотношение сторон, но только то, что оно повернуто на 90, есть ли способ повернуть видео на 90 степень перед сохранением? - person nsgulliver; 21.11.2012
comment
как сделать постобработку? так это будет только захват кадров из видео в виде эскизов? а затем каким-то образом захватить звук и после изменения размера и, наконец, соединения эскизов и звука, чтобы сделать видео необходимого размера? или есть лучший способ сделать это? - person nsgulliver; 21.11.2012
comment
Есть способы получше. Я недостаточно хорошо знаком с библиотеками обработки видео, которые делают это на iOS, но подумываю о том, чтобы опубликовать отдельный вопрос для этого на SO. Офлайн, инструментов для этого слишком много ... - person onon15; 21.11.2012

Проблема с записью в портретном режиме заключается в том, что вы всегда получаете 480X640. из-за ориентации устройства необходимо повернуть видео в соответствии с размером ориентации.

Я решил эту проблему, но это было совсем не по теме.

- (CGAffineTransform)transformFromCurrentVideoOrientationToOrientation:(AVCaptureVideoOrientation)orientation
{
    CGAffineTransform transform = CGAffineTransformIdentity;

    // Calculate offsets from an arbitrary reference orientation (portrait)
    CGFloat orientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:orientation];
    CGFloat videoOrientationAngleOffset = [self angleOffsetFromPortraitOrientationToOrientation:self.videoOrientation];

    // Find the difference in angle between the passed in orientation and the current video orientation
    CGFloat angleOffset = orientationAngleOffset - videoOrientationAngleOffset;
    transform = CGAffineTransformMakeRotation(angleOffset);

    return transform;
}
person nsgulliver    schedule 25.03.2013