Reverse video in android

J'ai enregistré une vidéo de la caméra dans mon application et sauvegardé dans le stockage de l'appareil. Maintenant, je souhaite inverser la vidéo de telle sorte qu'elle joue à l'arrière. Si la vidéo est de 10 secondes, la dernière image à la 10ème seconde devient la première image et celle-ci Commence à jouer de la 1ère et 1ère première image. Je souhaite enregistrer la vidéo inversée dans un fichier. Comment puis-je procéder?

  • MediaMuxer ne peut pas rendre les MP4 en cours d'exécution
  • YouTubeAndroidPlayerAPI ne peut pas lire de vidéos
  • Essayez un enregistrement vidéo à l'aide d'Adobe Screen Screen Récupendard Android 4.4
  • VideoView pour correspondre à la hauteur du parent et garder le rapport d'aspect
  • Ajout d'un cadre d'image ou d'un filigrane pour la vidéo dans Android par programme
  • Enregistrement vidéo vers un tampon circulaire sur Android
  • Implémentez plusieurs auditeurs d'événements dans le même fragment - Android
  • Comment détecter la direction de glissement entre gauche / droite et haut / bas
  • Android: comment envoyer une interface d'une activité à l'autre
  • Comment une interface peut-elle être utilisée pour différentes tâches Android d'arrière-plan?
  • Peut-on utiliser une ScrollView dans LinearLayout?
  • Support RTL: Désactivation uniquement pour les composants UI spécifiques
  • 2 Solutions collect form web for “Reverse video in android”

    Si vous êtes prêt à utiliser ffmpeg, vous pouvez utiliser cette approche – il brise essentiellement la vidéo en trames et la construit à nouveau dans l'ordre inverse:

    Il existe plusieurs façons d'utiliser ffmpeg dans Android, mais l'approche «wrapper» est celle que j'ai trouvé un mélange raisonnable de performance et de facilité d'utilisation. Quelque exemple de l'enveloppe Android ffmpeg:

    Il vaut la peine d'être conscient que cela prend beaucoup de temps sur un Mobile – si vous avez le luxe de pouvoir télécharger sur un serveur et de faire l'inversion, il pourrait être plus rapide.

    Merci à Mick de m'avoir donné une idée d'utiliser ffmpeg pour inverser la vidéo.

    J'ai posté du code chez github pour inverser la vidéo avec l'exécution d'une autre opération d'édition vidéo en utilisant ffmpeg et compléter le didacticiel dans mon blog ici .

    Comme je l'ai écrit dans mon blog,

    Pour inverser la vidéo, d'abord, nous devons diviser la vidéo en segments avec une durée de 10 secondes ou moins, car la commande vidéo inverse pour ffmpeg ne fonctionnera pas pour les vidéos de longue durée, à moins que votre appareil ne dispose de 32 Go de RAM.

    Par conséquent, pour inverser une vidéo-

    1.Divève la vidéo en segments avec une durée de 10 secondes ou moins.

    2.Reverse les vidéos segmentées

    3.Concatenate a inversé les vidéos segmentées dans l'ordre inverse.

    Pour diviser la vidéo en segments avec une durée de 6 secondes, nous pouvons utiliser la commande ci-dessous:

    String [] complexCommand = {"-i", inputFileAbsolutePath, "-c: v", "libx264", "-crf", "22", "-map", "0", "-segment_time", "6" , "-g", "9", "-sc_threshold", "0", "-force_key_frames", "expr: gte (t, n_forced * 6)", "-f", "segment", outputFileAbsolutePath};

    Ici,

    -c: v libx264

    Code tous les flux vidéo avec libx264

    -crf

    Définissez la qualité pour un mode de qualité constante.

    -segment_time

    Temps pour chaque segment de vidéo

    -g

    Taille GOP

    -sc_threshold

    Définir le seuil de changement de scène.

    -force_key_frames expr: gte (t, n_forced * n)

    Forcer une image clé toutes les n secondes

    Après avoir segmenté la vidéo, nous devons inverser les vidéos segmentées. Pour cela, nous devons exécuter une boucle où chaque fichier vidéo segmenté sera inversé.

    Pour inverser une vidéo avec audio (sans enlever son audio), nous pouvons utiliser la commande ci-dessous:

    Commande de chaîne [] = {"-i", inputFileAbsolutePath, "-vf", "reverse", "-af", "inverse", outputFileAbsolutePath};

    Pour inverser une vidéo avec l'extraction audio de son audio, nous pouvons utiliser la commande ci-dessous:

    Commande de chaîne [] = {"-i", inputFileAbsolutePath, "-an", "-vf", "reverse", outputFileAbsolutePath};

    Pour inverser une vidéo sans audio, nous pouvons utiliser la commande ci-dessous:

    Commande de chaîne [] = {"-i", inputFileAbsolutePath, "-vf", "reverse", outputFileAbsolutePath};

    Après avoir inversé les vidéos segmentées, nous devons concaténer des vidéos segmentées inversées dans l'ordre inverse. Pour cela, nous trierons les vidéos sur la base du dernier fichier modifié utilisant Arrays.sort (fichiers, LastModifiedFileComparator.LASTMODIFIED_REVERSE).

    Ensuite, pour concaténer des vidéos segmentées inversées (avec audio), nous pouvons utiliser la commande ci-dessous:

    Commande de chaîne [] = {"-i", inputFile1AbsolutePath, "- i", inputFile2AbsolutePath ….., "- i", inputFileNAbsolutePath, "- filter_complex", "[0: v0] [0: a0] [1 : V1] [1: a1] … [N: vN] concat = n = N: v = 1: a = 1 [v] [a], "- map", "[v]", "- map "," [A] ", outputFileAbsolutePath};

    Pour concaténer des vidéos segmentées inversées (sans audio), nous pouvons utiliser la commande ci-dessous:

    Commande de chaîne [] = {"-i", inputFile1AbsolutePath, "- i", inputFile2AbsolutePath ….., "- i", inputFileNAbsolutePath, "- filter_complex", "[0: 0] [1: 0] [2 : 0] … [N: 0] concat = n = N: v = 1: a = 0 ", outputFileAbsolutePath};

    Ici,

    -filter_complex [0: v0] [0: a0] [1: v1] [1: a1] … [N: vN] indique à ffmpeg quels flux envoyer au filtre concat. Dans le cas ci-dessus, flux vidéo 0 [0: V0] et le flux audio 0 [0: a0] de l'entrée 0, du flux vidéo 1 [1: v1] et du flux audio 1 [1: v1] de l'entrée 1 et ainsi de suite.

    Le filtre concat est utilisé pour concatener les flux audio et vidéo, en les reliant l'un après l'autre. Le filtre accepte les options suivantes:

    N

    Définissez le nombre de segments. La valeur par défaut est 2.

    V

    Définissez le nombre de flux vidéo de sortie, c'est aussi le nombre de flux vidéo dans chaque segment. La valeur par défaut est 1.

    une

    Réglez le nombre de flux audio de sortie, c'est aussi le nombre de flux audio dans chaque segment. La valeur par défaut est 0.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.