web-dev-qa-db-fra.com

FFMPEG convertit flv en MP4 sans perte de qualité

Actuellement, je suis en train de convertir des fichiers flash .flv en fichiers .webm et .mp4 à utiliser avec un lecteur vidéo HTML5.

_

J'utilise cette commande ffmpeg pour WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm qui fonctionne très bien et la taille du fichier reste relativement la même (imporatant).

_

Pour MP4, j'utilise les éléments suivants: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Il convertit au format .mp4 fin et empêche toute perte de qualité, mais la taille du fichier est presque multipliée par trois.

Quelle formule ffmpeg pourrait être utilisée pour convertir en MP4 sans perdre trop de qualité et en empêchant une taille de fichier beaucoup plus grande?

52
Chad Whitaker
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

Vous devez spécifier le codec vidéo utilisé. Dans votre commande, vous ne spécifiez pas -vcodec ou -c:v, donc ffmpeg utilise le codec par défaut pour MP4 (mpeg4), qui n'a pas une très bonne efficacité de compression. Essayez plutôt d'utiliser libx264 et de définir le CRF, qui correspond au niveau de qualité (plus bas est meilleur, 23 par défaut et les valeurs saines comprises entre 18 et 28).

Le codage avec libx264 est assez complexe, vous devriez donc consulter le guide de codage H.264 .

Vous devez également spécifier -strict experimental sinon vous pourriez obtenir: "Le codeur 'aac' est expérimental, mais les codecs expérimentaux ne sont pas activés. Ajoutez '-strict -2' si vous souhaitez l'utiliser."

55
sashoalm

Cette commande ne change que le conteneur sans reencodage

ffmpeg -i input.flv -codec copy output.mp4
40
c97

avconv et ffmpeg sont essentiellement la même chose. [Depuis très récemment, il y a une certaine divergence, mais pas grand chose à écrire si vous compilez votre propre variable ffmpeg [celle fournie dans Ubuntu Repos, par exemple, est VIEILLE et souffre de la taille de la vidéo n’est pas un blah blah blah deal [fondamentalement essaie de vous dire que la vidéo a de mauvaises proportions], mais si vous vous donnez la peine de lire le guide de compilation ffmpeg et de le compiler à partir de git, cela ne présente aucun des problèmes des versions plus anciennes qui sont en stock dans la plupart des systèmes d'exploitation. l'avertissement de dépréciation se référant à avconv vous dit qu'ils ont créé un nouvel util pour essayer de remplacer ffmpeg, MAIS c'estDONCtrès utilisé que même s'ils essayaient de le couper, nous créerions tous des liens symboliques à partir de avconv à ffmpeg de toute façon pour ne pas arrêter le travail et le laisser tomber.]]

Ce n'est pas une mauvaise chose d'utiliser avconv, je viens de voir la réponse mentionnant l'avertissement de dépréciation qui est essentiellement un message vide devrait plutôt être une alternative à ffpmeg, vous pouvez essayer avconv, ce qui est plus vrai dans le cas présent.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

est vraiment le même que

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

essentiellement dans le premier cas, vous utilisez les options à mains courtes et dans le second, la variété la plus écrite.

ALSO -map 0 fait référence aux pistes audio. Ainsi, si vous utilisez quelque chose comme mp4a qui peut gérer très bien plusieurs pistes audio, vous pouvez laisser cette option désactivée pour copier tous les flux audio dans le fichier résultant. Cela n’est nécessaire que si vous utilisez un codec qui ne prend pas en charge plusieurs pistes audio dans le même fichier, vous voudrez alors mapper l’audio nécessaire et non tout. Bien sûr, si vous essayez de minimiser l’espace utilisé, vous pouvez en spécifier un seul pour essayer de réduire un peu la taille du fichier [l’audio correspond à peut-être un tiers de la taille de la piste vidéo [et c’est généreux]].

-c:v = codec(video) so: -c:v libx264 équivaut à utiliser: -vcodec libx264 FYI; idem avec cet exemple: -c:v copy = -vcodec copy

et en outre, pour les fichiers FLV, veillez à ce que le fichier flv soit identique à un fichier AVI dans la mesure où il s’agit d’un conteneur pouvant contenir un nombre illimité de codecs pour la vidéo ou l’audio. Vous voudrez d’abord utiliser l’utilitaire d’inspection des médias de votre choix pour voir ce qui est utilisé dans le fichier lui-même avant de choisir de simplement copier le flux vidéo et/ou audio ou si vous souhaitez le transférer à partir de quelque chose de nouveau. Donc, la commande qui fonctionne le mieux pour un fichier FLV peut ne pas être la même pour un autre fichier FLV [bien entendu, si vous obtenez plusieurs fichiers FLV de la même source, ils seront codés de la même manière, mais ce n'est jamais une garantie].

N'essayant pas de choisir, nous avons rencontré ce problème dans la recherche sur le Web et je voulais essayer de clarifier un peu les choses pour les gens.

Encore une fois, comme cette réponse l'indique pour la réponse située au-dessous de celle-ci, OUI, exécuter ffmpeg publiera toujours ce message. Il est essentiellement creux, car ces 2 utilitaires sont toujours les mêmes util avec très peu de différence. Dans presque tous les cas, vous devriez obtenir exactement les mêmes résultats en utilisant l'une ou l'autre de ces commandes. Cela n'entraînera pas nécessairement un recodage complet, pourquoi? A, si vous n'en avez pas besoin, cela vous fait gagner beaucoup de temps, et B, si vous recodifiez un fichier dans lequel il a déjà été compressé en un codec vidéo, vous exécutez une routine de compression par rapport à quelque chose qui est déjà compressé et qui aboutira toujours en moins de qualité que la source. La plupart des nouveaux codecs sont quelque peu compatibles entre eux, comme par exemple un flv qui pourrait techniquement être un MP4 dans un wrapper FLV, car les FLV comme les AVI ne sont que des conteneurs d’autres codecs. Donc, cela dépend de ce que le flv source a pour la vidéo et le codec ausio par rapport à ce que vous convertissez pour savoir s'il doit être transcodé ou non. Si, dans le fichier FLV, ils utilisaient la vidéo MP4 H264 et MP4a pour l’audio, vous n’auriez pas besoin de recoder le fichier, il vous suffirait de le copier et d’ajuster les en-têtes de fichier pour qu’il soit lu comme un véritable MP4 au lieu d’une vidéo MP4. dans un fichier FLV.

3
Pariah

Selon ce guide , la commande appropriée pour convertir FLV en MP4 sans enregistrement AV est la suivante:

ffmpeg -i input.flv -c copy -copyts output.mp4

Cela a parfaitement fonctionné pour moi dans tous les cas avec AVC vidéo et audio AAC ou MP3.

3
Al Kepp