FFMPEG convertit flv en MP4 sans perte de qualité [dupliquer]

55

Cette question a déjà une réponse ici:

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 cela 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 de ffmpeg pourrait être utilisée pour convertir en MP4 sans perdre trop de qualité et éviter une taille de fichier beaucoup plus grande?

Chad Whitaker
la source

Réponses:

57
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 -vcodecou -c:vsi ffmpeg utilise le codec par défaut pour MP4 ( mpeg4) qui n'a pas très bonne efficacité de compression. Essayez d’utiliser libx264 à la place et définissez le CRF, qui correspond au niveau de qualité (plus bas est mieux, 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 .

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

sashoalm
la source
1
Cela prend tellement de temps et le résultat mp4 est très déformé, pixels perdus etc. Des idées pour lesquelles cela pourrait être? : /
trainoasis
Le codec vidéo par défaut pour le format MP4 n'est pas nécessairement mpeg4. Selon la sortie de ffmpeg --help muxer=mp4ma machine, ffmpeg utilise h264 comme codec vidéo par défaut de mp4.
doubleDown
1
@doubleDown Ma réponse est ancienne - à partir de 2011. Ils ont probablement changé les valeurs par défaut à un moment donné depuis lors.
sashoalm
43

Cette commande ne change que le conteneur sans réencodage

ffmpeg -i input.flv -codec copy output.mp4
c97
la source
connaissez-vous un moyen de créer un script pour la conversion par lots de nombreuses vidéos dans le même dossier?
ttoine
oui, sur 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 un dossier contenant les fichiers * .flv
c97
1
Impossible pour moi d'écrire l'en-tête pour le fichier de sortie n ° 0 (paramètres de codec incorrects?): Argument incorrect. Des idées? : /
trainoasis
2
@trainoasis votre .flv ne contient pas de vidéo H.264 et audio AAC. Copier les données audio / vidéo sans -codec copyaucun fichier vers un fichier .mp4 ne fonctionne que dans les cas très rares où les fichiers audio et vidéo sont déjà codés avec H.264 et AAC. Voir superuser.com/a/1009539/390946 et addpipe.com/blog/flv-to-mp4 .
Octavian Naicu
3

avconvet ffmpegsont 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 ffmpeg[celui fourni par Ubuntu repos par exemple est OLD et souffre de la taille de la vidéo n’est pas un accord bla bla blah [essaie fondamentalement pour vous dire que la vidéo a de mauvaises proportions], mais si vous prenez la peine de lire le ffmpegguide de compilation et de le compiler à partir de git, il ne contient aucun des problèmes des versions plus anciennes qui sont en stock dans la plupart des systèmes d'exploitation. l'avertissement d'amortissement se référant à avconvvous dit qu'ils ont créé une nouvelle util pour essayer de le remplacer ffmpeg, mais il est SO largement utilisé que même s'ils ont essayé de le couper , nous serions tous en train de créer de liens logiciels avconvàffmpeg de toute façon pour ne pas arrêter le travail et le laisser tomber.]]

Ce n'est pas une mauvaise chose à 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 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 0fait également référence aux pistes audio. Ainsi, si vous utilisez quelque chose comme mp4ace 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 est 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 libx264est la même chose que d'utiliser: -vcodec libx264FYI; 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. Ainsi, 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é cela 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 ci-dessous, la réponse est oui, si ffmpeg publie toujours ce message, il est essentiellement creux car ces deux utilitaires sont toujours les mêmes, 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 essentiellement 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 codecs plus récents 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. Alors, 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 faut le transcoder 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 recodifier 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.

Paria
la source
3

Selon ce guide , la commande appropriée pour convertir FLV en MP4 sans aucun recodage 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.

Al Kepp
la source
-1

Lors de l'utilisation de ffmpeg, un avertissement de dépréciation a été émis pour utiliser avconv. En utilisant avconv, j'ai obtenu de bons résultats:

avconv -i inputfile.flv -map 0 -c: v libx264 -c: une copie outputfile.mp4

Lire man avconvpour plus d'informations.

gare_c
la source
1
ffmpeglui - même n'est pas obsolète . Cela semble intéressant parce que vous spécifiez le codeur x264 qui a de beaux paramètres par défaut pour la qualité.
Slhck
-2

Je vous suggère de créer un script shell pour celui appelé video_flv_to_mp4avec le contenu suivant:

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

Puis lancez ça comme ça:

$ video_flv_to_mp4 video.flv

Cela vous donnera un fichier video.flv.mp4.

Thibault
la source
4
-sameqn’est plus une option valide pour ffmpeg. Cela ne signifie pas non plus "même qualité". Voir aussi ce post .
Slhck