2017-04-20 4 views
1

J'ai récemment utilisé ffmpeg library for android pour compresser la vidéo de longueur 10 secondes et la taille de près de 25 Mo. Voici les commandes i essayé d'utiliser:Comment faire pour compresser la vidéo dans Android plus rapidement?

ffmpeg -i /video.mp4 -vcodec h264 -b:v 1000k -acodec mp2 /output.mp4 

OU

ffmpeg -i input.mp4 -vcodec h264 -crf 20 output.mp4 

Les deux commandes étaient trop lentes. J'ai annulé la tâche avant qu'elle ne soit terminée, car cela prenait trop de temps. Il a fallu plus de 8 minutes pour traiter JUSTE 20% de la vidéo. Le temps est vraiment critique pour moi, donc je ne peux pas opter pour ffmpeg. J'ai la question suivante:

  • Y at-il quelque chose de mal avec la commande ou ffmpeg est lent de toute façon?
  • S'il est lent alors y at-il un autre moyen/bibliothèque bien documenté et fiable pour la compression vidéo que je peux utiliser dans android?
+0

Un MP4 est déjà compressé. – CommonsWare

+0

Je ne peux pas réduire sa taille? –

+0

Vous pouvez réduire sa résolution. Vous pouvez réduire sa fréquence d'images. Vous pouvez couper une partie de celui-ci (par exemple, couper sa longueur à X secondes). Aucun de ceux-ci ne représente la compression, pas plus que la suppression de fichiers d'une archive ZIP ne représente une "compression" de cette archive ZIP. Transcoder une vidéo - ce que vous faites avec 'ffmpeg', et ce qui serait impliqué dans le changement de la résolution ou de la fréquence d'images - est lent. – CommonsWare

Répondre

0

Votre fichier est dans le conteneur mp4 et a déjà ses flux dans certains codecs prédéfinis. Maintenant, la taille de tout conteneur (pas spécifiquement mp4) dépendra du type de compression (codec lâche) utilisé pour compresser les données. C'est pourquoi vous verrez une taille différente pour le même contenu dans différents formats. Il existe d'autres paramètres qui peuvent affecter la taille du fichier, par exemple, la fréquence d'images, la résolution, le débit binaire audio, etc. Si vous les réduisez, la taille du fichier diminue. par exemple. Dans YouTube, vous pouvez choisir de lire la vidéo à un taux inférieur lorsque la bande passante est le problème. Cependant, si vous choisissez de le faire, vous devrez retraiter le fichier entier et cela prendra beaucoup de temps puisque vous démultiplexez le conteneur, décoderez le codec, appliquerez le filtre (réduire le cadre, etc.), puis l'enregistrement, puis à nouveau le remixage. L'ensemble de ce processus ne vaut pas la peine d'économiser quelques Mo supplémentaires, sauf si vous avez un cas d'utilisation convaincant.

Une solution consiste à utiliser une machine plus puissante mais encore une fois cela est limité par l'architecture/la contrainte de l'application pour utiliser une machine puissante. Pour répondre spécifiquement pour ffmpeg il ne fera pas beaucoup de différence.