67 votes

FFMPEG convertit les flv en mp4 sans perte de qualité

Je suis actuellement en train de convertir des fichiers flash .flv en fichiers .webm et .mp4 pour les 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 ce qui suit : ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Il convertit en .mp4 sans problème et sans perte de qualité, mais la taille du fichier est presque triplée.

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

67voto

Bryan Locke Points 557
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 o -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 d'utiliser libx264 à la place et de définir le CRF, qui est le niveau de qualité (plus il est faible, mieux c'est, la valeur par défaut est 23, et les valeurs raisonnables sont entre 18 et 28).

L'encodage avec libx264 est assez complexe, vous devriez donc consulter le fichier Guide de codage H.264 .

Vous devez également préciser -strict experimental sinon vous obtiendrez : " L'encodeur 'aac' est expérimental mais les codecs expérimentaux ne sont pas activés, ajoutez '-strict -2' si vous voulez l'utiliser ".

1 votes

Cela prend beaucoup de temps et le mp4 qui en résulte est très déformé, avec des pixels perdus, etc. Une idée pour expliquer cela ? :/

0 votes

Le codec vidéo par défaut pour le format mp4 n'est pas nécessairement mpeg4 . Selon la sortie de ffmpeg --help muxer=mp4 sur ma machine, ffmpeg utilise h264 comme codec vidéo par défaut du mp4.

2 votes

@doubleDown Ma réponse est ancienne - elle date de 2011. Ils ont probablement changé les valeurs par défaut à un moment donné depuis lors.

55voto

c97 Points 1020

Cette commande ne change que le conteneur sans réencodage.

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

0 votes

Connaissez-vous un moyen de créer un script pour la conversion par lots de plusieurs vidéos dans le même dossier ?

1 votes

Oui, sous Windows, créez le fichier convert.bat et mettez-y ce code : for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4" puis exécutez convert.bat dans le dossier contenant les fichiers *.flv

6 votes

@trainoasis votre .flv ne contient pas de vidéo H.264 et d'audio AAC. Copier les données audio/vidéo intactes avec -codec copy vers un fichier .mp4 ne fonctionne que dans le cas très rare où l'audio et la vidéo sont déjà encodés avec H.264 et AAC. Voir aussi superuser.com/a/1009539/390946 y addpipe.com/blog/flv-to-mp4 .

6voto

Al Kepp Points 341

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

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

Il a fonctionné parfaitement pour moi dans tous les cas avec de la vidéo AVC et de l'audio AAC ou MP3.

3voto

JeffC Points 431

avconv y ffmpeg sont essentiellement la même chose. [Depuis très récemment, il y a quelques divergences, mais il n'y a pas grand-chose à en dire si vous compilez vos propres données. ffmpeg (celle fournie dans les dépôts Ubuntu, par exemple, est ancienne et souffre du fait que la taille de la vidéo n'est pas un problème [en fait, elle essaie de vous dire que la vidéo n'a pas les bonnes proportions], mais si vous prenez la peine de lire la page d'accueil du site Web de la Commission européenne, vous verrez qu'il n'y a pas de problème. ffmpeg et le compiler à partir de git, il n'a aucun des problèmes des anciennes versions qui sont livrées en stock dans la plupart des OS. l'avertissement de dépréciation se référant à avconv vous dit qu'ils ont créé un nouvel utilitaire pour essayer de remplacer ffmpeg Mais c'est SO largement utilisé que même s'ils essayaient de le couper, nous créerions tous des softlinks à partir de avconv a ffmpeg de toute façon, ils ne vont pas arrêter le travail et le laisser tomber.]

Ce n'est pas une mauvaise chose d'utiliser avconv Je viens de voir la seule réponse mentionnant l'avertissement de dépréciation qui est essentiellement un message vide devrait être plus de pour une alternative à ffpmeg vous pourriez essayer avconv qui est plus fidèle au cas ici.

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

est en fait le MEME que

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

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

AUSSI -map 0 fait référence aux pistes audio, donc si vous utilisez quelque chose comme mp4a qui peut gérer plusieurs pistes audio sans problème, vous pouvez laisser cette option désactivée pour copier tous les flux audio dans le fichier résultant. Ceci n'est nécessaire que si vous utilisez un codec qui ne prend pas en charge plusieurs pistes audio dans le même fichier. Dans ce cas, vous voudrez copier l'audio nécessaire et non pas tous les flux. Bien sûr, si vous essayez de minimiser l'espace utilisé, vous pouvez n'en spécifier qu'un seul pour essayer de réduire un peu la taille du fichier [l'audio fait environ un tiers de la taille de la piste vidéo [et c'est généreux]].

-c:v = codec(video) donc : -c:v libx264 est identique à l'utilisation : -vcodec libx264 FYI ; même chose pour cet exemple : -c:v copy = -vcodec copy

et de plus, pour les FLVs, faites attention, le fichier flv est le même qu'un avi en ce sens qu'il s'agit d'un conteneur qui peut contenir un nombre quelconque de codecs pour la vidéo ou l'audio. Vous devriez 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 copier simplement le flux vidéo et/ou audio ou de le transmuter de ce qu'il était vers quelque chose de nouveau. Ainsi, la commande qui fonctionne le mieux pour un FLV peut ne pas être la même pour un autre FLV [bien sûr, si vous obtenez plusieurs FLV de la même source, ils seront TOUJOURS encodés de la même façon, mais ce n'est jamais une garantie].

Je n'essaie pas de pinailler, je suis juste tombé sur ce sujet lors d'une recherche sur Internet 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 en dessous de celle-ci, OUI, l'exécution de ffmpeg affichera toujours ce message, il est essentiellement creux car ces 2 utilitaires sont vraiment les mêmes avec très peu de différences. Vous devriez dans presque tous les cas obtenir exactement les mêmes résultats en utilisant l'une ou l'autre commande. Cela ne va pas nécessairement résulter en un re-transcode complet, pourquoi ? A, si ce n'est pas nécessaire, cela permet de gagner une tonne de temps, et B si vous re-transcodez un fichier qui a déjà été compressé dans un codec vidéo, vous exécutez essentiellement une routine de compression contre quelque chose qui est déjà compressé et il en résultera toujours une qualité inférieure à celle de la source. La plupart des nouveaux codecs sont plus ou moins compatibles [pas tous]. Par exemple, un flv pourrait techniquement être un MP4 dans une enveloppe FLV puisque les FLV, comme les AVI, sont juste des conteneurs d'autres codecs. Donc, cela dépend de ce que le flv source a comme codec vidéo et ausio comparé à ce vers quoi vous le convertissez pour savoir s'il a besoin d'être transcodé du tout. Si dans le FLV ils ont utilisé la vidéo H264 MP4 et MP4a pour l'audio, vous n'aurez pas besoin de re-transcoder la chose, vous aurez seulement besoin de la copier et d'ajuster les en-têtes de fichiers pour qu'elle soit lue comme un vrai MP4 au lieu d'une vidéo MP4 dans un fichier FLV.

-1voto

gare_c Points 7

En utilisant ffmpeg, j'ai reçu un avertissement de dépréciation pour utiliser avconv. En utilisant avconv, j'ai obtenu de bons résultats :

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

Lire man avconv pour plus d'informations.

1 votes

ffmpeg elle-même n'est pas obsolète . La raison pour laquelle le résultat est bon est que vous avez spécifié l'encodeur x264 qui a de bons paramètres par défaut pour la qualité.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X