web-dev-qa-db-fra.com

Création de vidéos MP4 prêtes pour la diffusion HTTP

Comment puis-je convertir some.flv ou some.avi ou some.wmv avec FFmpeg pour être sûr que cette vidéo sera lisible et recherchée dans JW Player?

24
abrahab

Ceci est une réponse au dernier commentaire de votre part @abrahab.

Vous n'avez pas besoin de mp4box un fichier pour pouvoir le diffuser en pseudo via nginx. Le module de diffusion en continu MP4 s’occupe de celui-ci quel que soit le positionnement des atomes de Moov (mp4box décale l’atome de Moov au début du fichier).


Maintenant, pour l'erreur de serveur 500, utilisez-vous l'option "-frag" avec mp4box? Le module de diffusion en continu MP4 ne peut pas lire les fichiers MP4 fragmentés. Le bon usage de mp4box pour le pseudo-streaming consiste à entrelacer les vidéos pour une meilleure recherche. Le transfert d'atomes de Moov est un avantage supplémentaire.

Je fais toujours cela pour mp4box un fichier encodé en FFmpeg

MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4

Cela entrelace également le fichier MP4 par défaut en 500 millisecondes.

9
Vineet

H.264 en MP4

En règle générale, vous souhaitez créer une vidéo x264 dans un conteneur MP4. Cette option est supportée par pratiquement tous les appareils et navigateurs.

Ce qui suit devrait suffire. Assurez-vous de remplacer le nom d'entrée et les options CRF. Ce dernier définit la qualité, où les valeurs saines vont de 19 à 25 - plus bas signifie une meilleure qualité, mais aussi un débit plus élevé:

ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4

Vous pouvez également utiliser Handbrake pour l’encodage si vous aimez la manière graphique.

Utilisation de l'option faststart

Maintenant, ce que vous devez faire est de déplacer l'atome MOOV du conteneur MP4 vers le début. Cet atome (en substance, une unité de données dans le conteneur MP4) contiendra des métadonnées importantes sur les flux vidéo/audio eux-mêmes. -movflags faststart devrait faire exactement cela.

Si votre version de FFmpeg ne dispose pas de cette option, envisagez une mise à niveau. Si vous ne pouvez pas mettre à niveau, vous pouvez obtenir le même résultat avec l’un des outils ci-dessous:

  • QTIndexSwapper , une application Adobe AIR

  • MP4Box , source libre et open source, exécutant une commande similaire à la suivante, vous permettant de modifier l'intervalle (ici, 500):

    mp4box -inter 500 input.mp4

  • qt-faststart en Python , qui fonctionne partout où Python est installé.

    qtfaststart input.mp4

C'est à peu près ça.

Contrôle du débit/qualité

Maintenant, bien sûr, pour le streaming, vous voudrez peut-être contraindre le débit à rester dans certaines limites. Vous pouvez en savoir plus à ce sujet dans mon article de blog sur les méthodes de contrôle des taux .

Par exemple, en ajoutant -maxrate 2M -bufsize 2M aux options de codage, vous plafonnez le codage à 2 Mbit/s, ce qui peut être suffisant pour une vidéo 720p. Le débit requis dépendra, bien entendu, de la complexité du contenu. Cela prend des essais et des erreurs.

43
slhck

Vous pouvez simplement convertir un fichier AVI ou MP4 non-streamable, également sans tout ré-encoder, en procédant comme suit:

ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4

Il n'est pas nécessaire de ré-encoder quoi que ce soit, car seul l'atome de Moov doit être déplacé.

5
user769852