Я пытаюсь захватить замедленное видео на моем Nexus 5x. Это, как я настройка записи на носитель:Android захват замедленного видео с использованием CamcorderProfile
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH_SPEED_HIGH);
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set the high speed CamcorderProfile
mMediaRecorder.setProfile(profile);
// Step 4: Set output file
// Step 5: Prepare media recorder
// Step 6: Capture video
Проблема заключается в том, захваченного видео не являются 120 кадров в секунду медленные движения видео, поддерживает мое устройство. Это обычные 29 кадров в секунду.
Я прошел через this answer, который говорит о следующих в official documentation:
Для всех профилей высокой скорости, определенных ниже ((от QUALITY_HIGH_SPEED_LOW до QUALITY_HIGH_SPEED_2160P), они похожи как нормальные профили записи, с только более высокой частотой выходных кадров и скоростью передачи . Поэтому установка этих профилей с помощью 0Profilefile (CamcorderProfile) без указания каких-либо других параметров кодирования приведет к созданию высокоскоростных видео, а не замедленному движению видео, которое hav e различные скорости кадров и воспроизведения (воспроизведения). Для записи видео медленные движения, приложение должно установить выходной (воспроизведение) частоту кадров и скорость передачи в битах соответственно с помощью setVideoFrameRate (INT) и setVideoEncodingBitRate (INT), основанный на медленного движения фактора. Если приложение намерено сделать видеозапись с кодировщиком MediaCodec, оно должно установить каждое отдельное поле MediaFormat аналогично в соответствии с данным видеокамером CamcorderProfile.
Дело в том, что я не получаю, setProfile уже называет два метода setVideoFrameRate и setVideoEncodingBitRate с параметрами, полученными из выбранного CamcorderProfile. Зачем мне снова звонить? Что мне здесь не хватает?
Любая помощь была бы принята с благодарностью. Для моей жизни я не могу заставить это работать!
EDIT: Я пытался вызова методов, как так, но он по-прежнему захватывает нормальную скорость видео:
mMediaRecorder.setVideoFrameRate(profile.videoFrameRate/4);
mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate/4);
1/4, так как рекламируемый частота кадров по CamcorderProfile.QUALITY_HIGH_SPEED_HIGH составляет 120, и я хочу, чтобы захватить 30 кадров в секунду видео, как указано в документе here
videoFrameRate
Добавлено в уровне API 8 скорость видео целевого кадра публичного INT в кадрах в секунду Зонд.
Это цель записанного видео частоты кадров в секунду выхода, если приложения настраивает видеозапись через setProfile (CamcorderProfile) без указания других параметров кодирования MediaRecorder. Например, для высокоскоростного качества профилей (от QUALITY_HIGH_SPEED_LOW до QUALITY_HIGH_SPEED_2160P), это частота кадров, где видео записывается и воспроизводится с. Если приложение намеревается создать случай замедленного движения с высокоскоростными профилями качества, он должен установить скорость видеокадра , которая соответствует требуемой частоте кадров кадров (воспроизведения) через setVideoFrameRate (int).Например, если QUALITY_HIGH_SPEED_720P рекламирует 240fps видеофрагмент в файле CamcorderProfile, а приложение намерено создать видеоролики с замедленным замещением в 1/8, приложение должно установить 30 кадров в секунду с помощью setVideoFrameRate (int). Невыполнение Это приведет к высокоскоростным видео с нормальным воспроизведением скорости Частота кадров (240 кадров в секунду для примера выше). Если приложение предназначено для , выполните видеозапись с кодировщиком MediaCodec, оно должно установить каждое отдельное поле MediaFormat в соответствии с этим CamcorderProfile.
Только предположение, но вы на самом деле пытаетесь вызвать '' setVideoFrameRate' и setVideoEncodingBitRate' вручную? Вы проверяли значения, которые отправляет ваш профиль? – damian
Да @damian, я вызываю следующее непосредственно перед подготовить: 'mMediaRecorder.setVideoEncodingBitRate (profile.videoBitRate/4),' ' mMediaRecorder.setVideoFrameRate (profile.videoFrameRate/4);' Профиль 'videoBitRate' является' 27000000' и 'videoFrameRate'' 120' – Siddharth
Привет, @Siddharth. Вы когда-нибудь придумывали решение? У меня та же проблема. – flutillie