web-dev-qa-db-fra.com

FFMPEG: recadrez une vidéo sans perdre la qualité

J'ai une vidéo mp4 de 1920x1080. Je voudrais recadrer la vidéo en 480x270sans perte de qualité.

J'utilise la commande suivante:

ffmpeg -i input.mp4 -filter:v "crop=480:270:200:200" -crf 23 output.mp4

J'ai aussi essayé:

ffmpeg -i input.mp4 -filter:v "crop=480:270:200:100" -c:a copy -qp 0 output.mp4

J'ai utilisé -crf 23 et -qp 0 pour le recadrage vidéo sans perte, mais après recadrage, la vidéo a perdu de la qualité.

Est-ce que quelqu'un sait comment je peux recadrer la vidéo sans perdre la qualité?

19
mrana

Vous ne pouvez pas effectuer de filtrage sans perdre en qualité lors de l'encodage dans un format avec perte , mais vous avez quelques options.

Recadrer avec votre joueur

Une solution possible serait de recadrer pendant la lecture, vous n'avez donc même pas besoin de recoder. Il est également utile de prévisualiser un recadrage.

Avec ffplay et filtre de recadrage :

ffplay -vf "crop=480:270:200:100" input.mp4

Avec vlc (ou cvlc):

vlc input.mp4 --crop=480x270+200+100

Ou vous pouvez recadrer avec l'interface graphique VLC: Outils> Effets et filtres> Effets vidéo> Recadrer.

Cette méthode ne créera pas de fichier de sortie. Cela utilisera votre lecteur vidéo pour recadrer pendant la lecture. Voir l'une des autres méthodes si vous voulez un fichier de sortie.

Utilisez un format sans perte

ffmpeg peut encoder avec plusieurs encodeurs sans perte: ffv1, huffyuv, ffvhuff, utvideo, libx264 (en utilisant -crf 0 ou -qp 0). La sortie sera sans perte mais le fichier de sortie sera énorme.

ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v ffv1 -c:a copy output.mkv

ou

ffmpeg -i input.mp4 -vf "crop=480:270:200:100" -c:v libx264 -crf 0 -c:a copy output.mp4

Acceptez une perte de qualité

Donnez-lui suffisamment de bits et vous ne pourrez peut-être pas voir qu'il y a une différence de qualité:

ffmpeg -i input -vf "crop=480:270:200:100" -c:v libx264 -crf 17 -c:a copy ouput.mp4

Voir Wiki FFmpeg: Guide d'encodage vidéo H.264 pour plus d'informations.

Si votre entrée est MJPEG

Copiez les images individuelles avec ffmpeg , recadrez-les sans perte avec jpegtran, puis remixez-les avec ffmpeg. Cela n'entraînera aucune perte, mais vous serez limité à l'ancien format MJPEG.

26
llogan

À un niveau de base, vous ne pouvez pas utiliser un encodage avec perte, puis vous attendre à ce qu'il ne perde pas en qualité lorsque vous décodez puis réencodez. La seule façon de fonctionner est d'utiliser un codec sans perte, par exemple Quicktime avec le codec Animation. Ceci est juste une vérité de base de la production vidéo numérique que vous ne pouvez pas contourner en passant simplement les options de ligne de commande à ffmpeg.

4
MoDJ

Ce n'est pas possible avec ffmpeg.

Vous pouvez également incorporer votre vidéo dans un conteneur Matroska (.mkv) et définir une balise de recadrage dans l'en-tête du fichier , mais elle doit être prise en charge par votre lecteur .

Apparemment, pour les vidéos encodées H264 H264info peut également être utilisé, mais j'ai encore besoin de comprendre comment l'utiliser ...

3
eadmaster