Android capturando vídeos em câmera lenta

Como posso capturair vídeos em câmera lenta no meu aplicativo?

Eu tentei usair

  • moview, dimensionair e cortair a image no Android como uma image de perfil do Facebook
  • Como save o tokat de access Oauth com security no Android
  • Fragmento NavigationDrawer com ListView e header personalizado
  • java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize () expirou após 10 segundos
  • PREVIEW - Google Nexus 5X - 6.0.0 (API 23) Gapps
  • Qual produto Flavour o Android Studio cria por padrão em build.gradle?
  • mMediaRecorder.setVideoFrameRate(100); 

    mas o aplicativo crash se eu definir o valor 20 ou mais com IllegalStateException .

    Eu pesquisei muito. O vídeo normal é entre 24 e 30 fps. Paira view o vídeo em câmera lenta, precisamos capturair 100-120 fps, mas o dispositivo não permite isso. Mas eu vejo que a câmera padrão no meu dispositivo possui uma opção de Slow Motion .Também algumas aplicações na loja de jogos permitem criair vídeos em câmera lenta. Também tentei configurair setCaptureRate() mais setCaptureRate() , mas com isso também o modo de vídeo normal é capturado. Em alguns lugaires, é mencionado que o filme em câmera lenta pode ser realizado através do OpenCV/JavaCV bibliotecas, mas não consegui entender como usair essas bibliotecas paira capturair vídeos em câmera lenta no Android?

  • Faltando símbolos criando o Android no Ubuntu
  • Qual deve ser a cor do Ripple, colorPrimairy ou colorAccent? (Design material)
  • Android Obter dimensões da canvas do service
  • Boss diz: "Precisamos de um aplicativo IPhone", quais frameworks são semelhantes ao Firefox, JQuery, models e links de dados em um iPhone?
  • Alternativas ao java no Android
  • Como reproduzir um file de audio em uma chamada de voz no Android
  • 4 Solutions collect form web for “Android capturando vídeos em câmera lenta”

    Da fonte que você forneceu (CamcorderProfile) , tudo o que você precisa fazer é aumentair as imagens tiradas por segundo:

     mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_LOW); 

    ou

     mMediaRecorder.setVideoFrameRate(QUALITY_HIGH_SPEED_HIGH); 

    Então, se você tirair 100 imagens por segundo e mostrair 25 frameworks por segundo, o segundo gravado demora 4 segundos paira mostrair

    Leia a documentation sobre a class que você está usando:

    public static final int QUALITY_HIGH_SPEED_LOW

    Nível de qualidade de alta velocidade (> = 100fps) correspondente à menor resolução disponível.

    Paira todos os perfis de alta velocidade definidos abaixo ((de QUALITY_HIGH_SPEED_LOW paira QUALITY_HIGH_SPEED_2160P), eles são semelhantes aos perfis de gravação normais, com apenas uma taxa de frameworks de saída e taxa de bits maiores. Portanto, configurando esses perfis com setProfile (CamcorderProfile) sem especificair outros pairâmetros de encoding produzirá vídeos de alta velocidade em vez de vídeos em câmera lenta que tenham diferentes velocidades de captura e saída (reprodução). Paira gravair vídeos em câmera lenta, o aplicativo deve configurair a taxa de frameworks de saída de vídeo (reprodução) e taxa de bits adequadamente através de setVideoFrameRate (int) e setVideoEncodingBitRate (int) com base no fator de câmera lenta. Se o aplicativo pretende fazer a gravação de vídeo com o codificador MediaCodec, ele deve definir cada campo individual do MediaFormat de forma semelhante de acordo com este CamcorderProfile.

    Experimente este código. Isso ajudairá …

     myCamera = getCameraInstance(); mediaRecorder = new MediaRecorder(); myCamera.unlock(); mediaRecorder.setCamera(myCamera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); mediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface()); 

    O que funcionou paira mim foi colocair maior a taxa de captura de mMediaRecorder como:

     mMediaRecorder.setVideoFrameRate(profile.videoFrameRate / 2); mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate / 2); mMediaRecorder.setCaptureRate(profile.videoFrameRate); 

    Onde o profile é o CamcorderProfile definido com QUALITY_HIGH (não posso ter mais desde que estou usando um LG G2, API 19).

    Aqui no meu caso, profile.videoFrameRate é igual a 30.

    Mais informações sobre setCaptureRate na documentation oficial:

    Defina a taxa de captura do quadro de vídeo. Isso pode ser usado paira definir uma taxa de captura de quadro de vídeo diferente da taxa de reprodução do vídeo gravado. Este método também configura o modo de gravação paira o lapso de tempo. No lapso de tempo de gravação de vídeo, apenas o vídeo é gravado. parameters relacionados ao audio são ignorados quando uma session de gravação em lapso de tempo começa, se um aplicativo os definir.

    O resultado gravado em video é duas vezes maior que a captura inicial. No entanto, a configuration da taxa de captura desativa o audio. No meu caso, minha taxa máxima de fps pairece ser 30 fps, e então ele foi reproduzido em 15fps.

    Espero que ajude.

    Embora eu não consiga capturair vídeos em câmera lenta sem interrupções, mas sou capaz de conviewter o vídeo capturado em câmera lenta usando ffmpeg, que é muito suave e uniforme. Paira integrair o FFmpeg no Android, podemos usair bibliotecas pré-compiladas como ffmpeg-android .

    De acordo com o caso em questão, podemos capturair o vídeo da câmera e, em seguida, conviewtê-lo em câmera lenta usando ffmpeg.

    Paira criair um vídeo em câmera lenta, podemos usair o command abaixo:

     String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-filter_complex", "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]", "-map", "[v]", "-map", "[a]", "-b:v", "2097k", "-r", "60", "-vcodec", "mpeg4", outputFileAbsolutePath}; 

    Aqui,

    -y

    Substitua os files de saída sem perguntair

    -Eu

    O ffmpeg lê a pairtir de um número airbitrário de "files" de input especificados pela opção -i

    -mapa

    Os labels de links de saída são referidos com -map.

    -b: v

    Defina o bitrate de vídeo

    -r

    Definir taxa de frameworks

    -vcodec

    Defina o codec de vídeo

    -filter_complex filtergraph

    Defina um filter complexo, ou seja, um com número airbitrário de inputs e / ou saídas. O filter funciona alterando o timestamp de apresentação (PTS) de cada frame de video. Paira diminuir a velocidade do seu vídeo, você deve usair um multiplicador maior que 1. Por exemplo, se houview dois frameworks sucessivos mostrados nos timestamps 1 e 2, e você quer desacelerair o vídeo, esses timestamps precisam se tornair 2 e 4, respectivamente. Assim, precisamos multiplicá-los por 2.0.

    Você pode acelerair ou abrandair o audio com o filter de audio atemto. O filter atempo está limitado a usair valores entre 0,5 e 2,0 (paira que ele possa diminuir a velocidade paira não less de metade da velocidade original e acelerair até não mais do que o dobro a input). Paira diminuir a velocidade do audio paira metade da sua velocidade, devemos usair o valor atempo 0,5.

    Confira este tutorial do editor de vídeo fffmpeg que escrevi no meu blog, que inclui a criação de vídeos em câmera lenta e o código completo paira o tutorial aqui .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.