Quelle ligne de commande ffmpeg produit une vidéo plus compatible sur tous les appareils?

15

J'ai donc des utilisateurs qui disent que les vidéos H264 MP4 ne lisent pas l'audio sur l'iPad d'Apple et j'ai du mal à obtenir que les vidéos MP4 soient lues correctement sur Android aussi.

Il y a deux lignes de commande différentes quelle ligne de commande est celle que je devrais utiliser.

-profile:v baseline -level 3.0

Et :

-vpre baseline

Que dois-je utiliser pour le faire fonctionner sur tous les appareils?

J'ai également lu que cela pourrait être le débit audio mon débit audio actuel est

-ab 192k

Peut-être devrais-je l'abaisser à

-ab 160k

Ligne de commande utilisée pour encoder l'audio MP3 en fichiers MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
C0nw0nk
la source

Réponses:

25

Vous devez d'abord comprendre la différence entre l'utilisation des profils FFmpeg et les options de ligne de commande directe. -vpreutilise un .ffpresetfichier situé dans /usr/share/ffmpeg/ou où ffmpeg a été installé. C'est une série de paires option = valeur , et dans votre cas, vous auriez dû le définir vous-même (au moins, je ne connais pas de baselinepréréglage livré avec ffmpeg).

Je recommanderais de ne pas utiliser de préréglages à moins que vous ne l'ayez créé vous-même et que vous sachiez à quoi servent les options de ligne de commande. J'utilise ffmpeg depuis des années maintenant, et je n'ai jamais utilisé de préréglages - je n'en ai jamais vraiment eu besoin.

Une ligne de commande typique pour générer une vidéo H.264 compatible avec la plupart des appareils serait:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

Quelques notes:

  • H.264 / AAC est la meilleure combinaison pour une large prise en charge en HTML5. Les navigateurs qui n'ont pas de décodeurs H.264 auront cependant besoin d'une vidéo VP8 / Vorbis également. Pour certains exemples de ligne de commande, consultez cette réponse . Voir également la page de support du navigateur de Wikipedia pour d'autres codecs.

  • H.264 fonctionne également bien sur les appareils mobiles.

  • Les options -profile:v baselineet -level 3.0ne sont nécessaires que pour les anciens appareils mobiles qui ne peuvent pas gérer les fonctionnalités gourmandes en CPU du H.264. Vous pouvez généralement les laisser de côté ou les utiliser à la place -profile:v main.

  • Le CRF définit la qualité (18–28 est une plage raisonnable, une valeur inférieure signifie une meilleure qualité). Vous pouvez bien sûr également utiliser un débit fixe avec -b:v 1000kou similaire. Choisissez un débit binaire correspondant à la résolution de la vidéo. Certains appareils de faible puissance peuvent ne pas être en mesure de gérer des débits binaires inutilement élevés.

  • L' -movflags faststartoption est essentielle pour le streaming, car elle déplace les métadonnées du conteneur au début du fichier au lieu de le laisser à la fin. Cela permettra à la lecture de démarrer immédiatement au lieu d'attendre que le fichier soit entièrement chargé.

Cependant, tout se résume à trouver le plus petit dénominateur commun pour tous les appareils que vous ciblez, ce qui pourrait ne pas toujours exister. Vous ne voudriez certainement pas utiliser un autre codec (c'est-à-dire pire ) que le H.264. En fait, il ne serait pas non plus judicieux de proposer des vidéos encodées en ligne de base aux clients qui peuvent décoder le profil principal ou élevé. Vous échangez la qualité contre une complexité de décodage réduite.

D'après mon expérience, les appareils Android peuvent très bien jouer à Baseline H.264 avec audio AAC-LC dans un conteneur MP4. Je n'ai jamais eu de problème avec ça. En fait, certains appareils peuvent également jouer des profils plus élevés, bien que ce ne soit pas officiellement pris en charge. iOS prend généralement également en charge Baseline H.264, mais vous pouvez certainement utiliser le profil principal sur certains appareils également. Voir cet article (qui est un peu dépassé) pour quelques directives.

Si des utilisateurs ont des problèmes de lecture, vous devez déterminer quelle vidéo est à l'origine des problèmes et obtenir plus de détails sur le matériel et les logiciels de lecture qu'ils utilisent. Ensuite, nous pourrions parler de dépannage de ce cas particulier.

slhck
la source
1
Merci pour une réponse si détaillée que je continue à relire :) J'encode également avec -acodec libmp3lame -ab 160k et les utilisateurs utilisant des appareils Apple iPad disent qu'ils pouvaient regarder la vidéo mais pas entendre le son, donc je suppose que c'était quelque chose à voir avec le codec audio ou le débit binaire. Les utilisateurs d'Android et de Windows disent que tout va bien et qu'ils ont de l'audio dans le flux vidéo, donc je ne sais pas pourquoi l'utilisation de libmp3lame au lieu de aac empêcherait les utilisateurs d'Apple de ne pas avoir d'audio dans la vidéo.
C0nw0nk
J'ai rarement vu de l'audio MP3 utilisé dans des conteneurs MP4. Peut-être que l'AAC est le choix le plus sûr.
slhck
Eh bien, je n'utilise que MP3 parce que j'ai continué à obtenir bit_rate, des erreurs de hauteur de largeur avec aac, je suis passé à libmp3lame et toutes ces erreurs s'arrêtent, puis les utilisateurs d'Apple disent qu'ils n'ont pas d'audio, mais pourtant tout le monde peut regarder le même fichier et c'est bien avec le son sur tous les autres appareils, j'ai peut-être trouvé un bug qui sait :( Et selon Apple MP3 devrait être bien developer.apple.com/library/mac/documentation/…
C0nw0nk
@ user2068371 Ce lien fait référence au flux de transport MPEG-2, pas au format de conteneur MP4.
llogan
1
@ user2068371 Je n'ai jamais eu de problèmes avec MediaElementjs. H.264 et MP3 ne sont pas pris en charge dans tous les navigateurs . Pour la vidéo HTML5 en particulier, utilisez toujours H.264 / AAC et éventuellement VP8 / Vorbis comme solution de rechange. Si vous avez des problèmes avec une conversion AAC, veuillez poser une nouvelle question à ce sujet et assurez-vous d'inclure également la sortie de ligne de commande complète.
slhck