Comment puis-je utiliser ffmpeg
pour réduire la taille d'une vidéo en diminuant la qualité (le moins possible, naturellement, mais il faut que je l'exécute sur un appareil mobile qui n'a pas beaucoup d'espace disponible)?
J'ai oublié d'écrire une chose pour le moment. Lorsque la vidéo peut utiliser des sous-titres (* .srt ou * .sub), je souhaite également les convertir pour les adapter aux paramètres du fichier vidéo converti.
video
ffmpeg
compression
Xralf
la source
la source
ffmpeg
page de manuel affiche une-fs
option permettant de limiter la taille de la sortie. Est-ce que quelque chose comme çaffmpeg -i in.avi -fs 100M out.avi
marche?man ffmpeg | wc -l --> 5254
.avi
n'est pas le principal problème ..avi
est juste un conteneur. Le problème principal est de savoir quels codecs vous utilisez. Beaucoup (la plupart?) De.avi
vids utilisent des codecs de style plus anciens (XviD, par exemple). codage étroit en utilisant leH.264
standard de compression vidéo (par exemple, codecx264
) etaac
compression pour l'audio. Le conteneur et les codecs que vous utilisez dépendent de vous et de votre téléphone ... Le.mp4
conteneur est bien accepté .. (mais votre téléphone peut-il le gérer: voir ce lienRéponses:
Voir cette réponse. Cité ci-dessous pour plus de commodité:
Modifiez le codec selon vos besoins - libx264 peut être disponible si libx265 ne l'est pas, au prix d'une taille de fichier résultante légèrement plus grande.
la source
-crf 24
pris une vidéo de 255,3MB que j'ai eue et l'a réduite à 72,7MB sans abaisser sensiblement la qualité. Avoir un vote positif!libx265
pour encore plus de réduction de taille.ffmpeg -i input.avi -vcodec libx264 -crf 24 output.avi
. Il a réduit une vidéo de 100 Mo à 9 Mo. Très peu de changement de la qualité vidéo. Je vous remercie!À moins que vous ne recherchiez un débit spécifique, je vous recommande cette
-crf
option. C'est le plus couramment utilisé pour l'x264
encodage: http://slhck.info/articles/crfEn bref: un CRF de 23 produirait un film de qualité "DVD" (~ 700 Mo - 1 Go) et des valeurs de CRF plus basses donneraient une qualité supérieure (fichiers plus volumineux).
la source
Vous avez mentionné vouloir réduire la taille du fichier pour adapter davantage de vidéos sur un appareil mobile, ce qui est également mon cas d'utilisation. Toutes les réponses ici visent à réduire la qualité de la compression, mais personne n’a mentionné la réduction de la taille de la trame vidéo. C'est beaucoup plus rapide, environ 3 à 5 fois plus rapide que de recompresser selon mon expérience. Voir la documentation ffmpeg sur la mise à l' échelle pour plus d'informations.
la source
J'ai testé la plupart des autres réponses proposées à cette question. Les conclusions des données de test sont ci-dessous. Voici les réponses proposées que j'ai testées:
(BR) Modifiez le débit en utilisant:
(CR) Faites varier le facteur de taux constant en utilisant:
(SZ) Modifiez la taille de l'écran vidéo (par exemple, la moitié de sa taille en pixels) à l'aide de:
(BL) Changez le profil H.264 en "baseline" en utilisant:
(DF) Utilisez le traitement par défaut de ffmpeg, en utilisant:
LES DONNÉES
J'ai calculé le débit cible pour (BL) en utilisant la méthode proposée.
=== Fichier A - Comment le noeud aide à propulser Angular-Fnbixa7Ts6M.mkv ===
=== Fichier B - Utilisation de GraphQL avec Angular _ By - Lee Costello-OGyFxqt5INw.mkv ===
CONCLUSIONS
La méthode (SZ) est certainement la méthode la plus rapide. C'était 2X à 4X plus rapide. Cela peut être très problématique pour les vidéos haute définition, car la conversion de toutes les autres méthodes a été plus longue que la durée réelle de la vidéo! Par exemple, la méthode (CR) prenait 53 minutes pour convertir la vidéo de 21 minutes.
La méthode (SZ) est certainement la meilleure méthode si la définition de la vidéo est plus grande que celle de l'écran qui l'affichera. Par exemple, si votre téléphone ne peut afficher qu'une image 1080p, il est inutile de lui envoyer une vidéo au format 3840x2160. Il serait préférable de réduire de moitié sa taille en 1080p.
Certaines des réponses proposées ont en réalité augmenté la taille de certaines vidéos. Par exemple, la méthode (BR) a plus que doublé la taille de l'échantillon 1080p. Il a cependant fait la taille 2160p un tiers. Pour l'échantillon haute définition, les méthodes (CR), (BL) et (DF) ont toutes AUGMENTÉ la taille de la vidéo.
Réponse correcte (ou meilleure)
Il est toujours préférable de réduire d’abord la résolution au maximum pris en charge par votre écran cible.
Si vous souhaitez réduire davantage la taille du fichier, cela dépendra des choix personnels. Vous pouvez réduire le contenu de l'information ou augmenter la compression.
Vous pouvez baisser davantage la résolution si cela ne vous concerne pas.
Si la vidéo n'inclut pas de scènes d'action rapides, vous souhaiterez peut-être réduire la fréquence d'images.
Si vous avez un processeur puissant et que l'espace est le seul problème, vous pouvez augmenter le taux de compression.
Le débit binaire est une combinaison de plusieurs facteurs. Il suffit donc de demander à ffmpeg de réduire le débit binaire pour ne pas obtenir les résultats souhaités.
Un autre moyen de réduire le contenu d'information consiste à réduire la profondeur de couleur. Comment faire cela n'a pas encore été discuté.
la source
Notez qu'il semble que
ffmpeg
déjà effectue une optimisation lorsqu'il est lancé sans options, avant d' essayer d'utiliser les paramètres que vous ne comprenez pas ou décider de perdre explicitement des informations, donner un essai à une conversion par défaut:Dans mon cas, cela réduisait le débit de la vidéo et de l'audio (vous pouvez vérifier et comparer le fichier d'entrée et de sortie en l'exécutant
ffprobe
), transformant une vidéo de 700 Mo en une vidéo de 60 Mo d'une qualité apparemment similaire.la source
J'ai une recette que je m'étais forgée à l'origine pour convertir les vidéos Motion JPEG que mon ancien appareil photo génère (ce sont de très grandes vidéos, chaque image étant une image JPEG complète) en h264. Voici une adaptation pour d'autres types de vidéos (cours, etc.).
Je n'utilise pas ffmpeg , mais mplayer et mencoder . Tout d'abord, nous devons démultiplier l'audio avec mplayer:
-vo null
et-ao null
indiquent à mplayer de ne pas extraire de vidéo.Dans les prochaines étapes, nous effectuerons une compression en 3 passes avec mencoder. Lors du premier passage, nous choisirons une compression appropriée en mode qualité constante ( paramètre crf ):
Vous pouvez ajouter le paramètre slow_firstpass à l' option -x264encopts si vous êtes paranoïaque avec la qualité finale de la vidéo. Le manuel de Mencoder indique que cette option désactive certains paramètres qui «améliorent considérablement la vitesse de codage tout en n’ayant que peu ou pas d’impact sur la qualité de la passe finale». Alors, utilisez-le seulement à la dernière étape.
Vous devez essayer plusieurs valeurs pour crf . Essayez à partir de 25 et continuez à l'augmenter jusqu'à ce que vous remarquiez des artefacts dans la vidéo résultante (des valeurs plus élevées en compriment davantage). N'oubliez pas que les passes d'encodage suivantes amélioreront la qualité que vous avez choisie pour crf .
Les alternatives pour le preset veryslow sont plus lentes , lentes , moyennes, etc. Voir le manuel de mencoder pour la liste complète.
ratetol contrôle la variation de débit - Je ne suis pas sûr de bien faire les choses, mais je l’ai réglé sur la valeur maximale afin de laisser une liberté totale au mencoder de choisir le bon débit pour chaque scène.
Après la première passe, vous remarquerez que la dernière ligne vous donne le débit moyen que vous utiliserez aux étapes suivantes:
Modifiez le paramètre crf , recommandé lors du premier passage, en débit , requis lors des passages suivants:
Ce deuxième codage lira les statistiques générées lors du premier passage (
divx2pass.log
etdivx2pass.log.mbtree
) afin d’optimiser la compression.Notez que vous utiliserez la même entrée vidéo et non la vidéo générée par le premier passage - le premier passage n'est utile que pour vérifier la qualité initiale.
Notez également que
pass=3
( nonpass=2
) générera un nouveau fichier de statistiques, vous permettant ainsi de répéter la dernière étape autant de fois que vous le souhaitez. Je fais habituellementpass=3
deux fois, en faisant toujours attention au résultat.En attendant, vous pouvez aussi compresser l'audio en utilisant
lame
ouoggenc
:Enfin, nous allons remux audio et vidéo
-of lavf -lavfopts format=mp4
générémp4
à l’aide des lavopts muxers.la source
J'ai compressé une présentation vidéo HD de 40 minutes de 505 Mo à 183 Mo, ce
qui revient à passer de 100 Mo à 36 Mo.
La vidéo originale était HD et la sortie était presque nulle différence notable.
C'est un fichier vidéo "Je voudrais garder, mais la HD est excessive."
Voici la commande que j'ai utilisée avec des raisons:
ffmpeg -n -loglevel error -i inputfile.mp4 -vcodec libx264 -crf 28 -preset faster -tune film outputfilename.mp4
-n
: éviter d’ écraser les fichiers de sortie (plus sûr pour les tests puis le traitement en lots)-loglevel error
: afficher les erreurs et masquer les lignes et les lignes de progression-i inputfile.mp4
: nom du fichier d'entrée-vcodec libx264
: glissé de la réponse en haut ci-dessus-crf 28
: Compression à un seul passage avec une différence notable mineure ( "0 = sans perte, 23 = défaut, 51 = le moins bon; gamme subjectivement sain est 17- 28 " ) ref docs-preset faster
: Semble 2x plus rapide que l' encodage par défaut du temps de « moyen » ref docs-tune film
: Indiquer l' entrée est une vidéo HQ (autres options incluent 'dessin animé', 'StillImage' ..) ref docsoutputfilename.mp4
: nom du fichier de sortiePour un répertoire de fichiers vidéo:
for i in *.{avi,flv,m4v,mov,wmv,mp4,MP4,TS,mkv}; do ffmpeg -n -loglevel error -i "$i" -vcodec libx264 -crf 28 -preset faster -tune film "cc${i}"; done
Problèmes:
.webm
les fichiers ne fonctionnent pas avec la commande. Dû échanger"cc${i}"
→"${i%.*}.mp4"
Handbrake est une alternative open source avec une interface utilisateur
la source
Vous devrez utiliser l'encodage en 2 passes pour "adapter" une vidéo à une taille de fichier donnée (débit), sans réduire la qualité de manière trop importante. C'est un sujet assez détaillé: http://web.archive.org/web/20171130050515/http://www.mpabo.com/2014/12/14/ffmpeg-and-x264-encoding-guide/
la source
J'ai écrit un script bash pour réduire la taille de la vidéo et essayer automatiquement différentes valeurs de crf.
Fondamentalement, vous
Ceci est très pratique lorsque vous souhaitez atteindre une taille limite et que vous ne savez pas quelle est la valeur crf qui vous permettra de le faire.
J'espère que cela aidera quelqu'un. J'ai partagé avec mes collègues et tout le monde a trouvé utile.
la source