Réponses:
Ceci est une réponse au dernier commentaire de votre part @abrahab.
Vous n'avez pas besoin d' mp4box
un fichier pour pouvoir le pseudo streamer via nginx. Le module de streaming MP4 s'en charge indépendamment du positionnement des atomes moov ( mp4box
déplace l'atome moov au début du fichier).
Maintenant, pour l'erreur de serveur 500, utilisez-vous l'option "-frag" avec mp4box? Le module de streaming MP4 ne peut pas lire les fichiers MP4 fragmentés. Une bonne utilisation de la mp4box
pseudo-diffusion consiste à entrelacer les vidéos pour une meilleure recherche. Le déplacement des atomes de Moov est un avantage supplémentaire.
Je fais toujours ça sur mp4box
un fichier encodé FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Cela entrelacera également le fichier MP4 en 500 millisecondes de morceaux par défaut.
En règle générale, vous souhaitez créer une vidéo x264 dans un conteneur MP4. Cette option est prise en charge 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 varient de 19 à 25 - une valeur inférieure signifie une meilleure qualité, mais également un débit binaire 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 méthode GUI.
faststart
optionMaintenant, ce que vous devez faire est de déplacer l' atome MOOV du conteneur MP4 au 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 FFmpeg ne dispose pas de cette option, envisagez la mise à niveau. Si vous ne pouvez pas mettre à niveau, vous pouvez réaliser la même chose avec l'un des outils ci-dessous:
QTIndexSwapper , une application Adobe AIR
MP4Box , gratuit et open source, exécutant une commande similaire à la suivante, où vous pouvez 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.
Maintenant, bien sûr, pour le streaming, vous pouvez en fait vouloir 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 d'encodage, vous limitez l'encodage à 2 Mbit / s, ce qui peut être suffisant pour la vidéo 720p. Le débit requis dépendra bien sûr de la complexité du contenu. Cela prend quelques essais et erreurs.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
alors mp4box
et mp4 ne peut pas rechercher et nginx rapporter le 500 internal server error
paramètre de démarrage plus que 0
. lorsqu'il est codé en vidéo sans -vcoded libx264
(codeur mp4 par défaut) qualité! malade!) :( (désolé, maintenant, pas autorisé à voter, vous répondez)
-movflags faststart
exactement ce dont j'avais besoin
Vous pouvez simplement convertir un 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 il suffit de déplacer l'atome moov.
Vous pouvez essayer ceci avec ffmpeg:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(erreur:) Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. Une bonne raison, comme un projet IETF, pour laquelle choisir exactement ces paramètres semble également faire défaut.
MP4Box -isma -inter 500 Myvideo.mp4