De ma propre expérience, si vous voulez absolument aucune perte de qualité, vous cherchez ce que vous cherchez.
Pas sûr, avconv
mais la commande que vous avez tapée est identique à ce que je fais avec FFmpeg
. En FFmpeg
vous pouvez passer le paramètre comme ceci:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
La plupart des x265
commutateurs (options sans valeur) peuvent être spécifiés comme ceci (à l'exception de ceux qui ne sont que des interfaces de ligne de commande, ceux-ci ne sont utilisés que x265
directement en binaire).
Cela dit, j'aimerais partager mon expérience en matière d' x265
encodage. Pour la plupart des vidéos (WMV, MPEG ou AVC / H.264), je les utilise crf=23
. x265
décide du reste des paramètres et généralement, il fait assez bien.
Cependant, souvent avant de m'engager à transcoder une vidéo dans son intégralité, je teste mes paramètres en convertissant une petite partie de la vidéo en question. Voici un exemple, supposons un fichier mkv dont le flux 0 est une vidéo, le flux 1 un fichier audio DTS et le flux 2 un sous-titre:
ffmpeg -hide_banner \
-ss 0 \
-i "INPUT.mkv" \
-attach "COVER.jpg" \
-map_metadata 0 \
-map_chapters 0 \
-metadata title="TITLE" \
-map 0:0 -metadata:s:v:0 language=eng \
-map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \
-map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
-metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \
-c:v libx265 -preset ultrafast -x265-params \
crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \
-c:a copy \
-c:s copy \
-t 120 \
"OUTPUT.HEVC.DTS.Sample.mkv"
Notez que les barres obliques inverses signalent une rupture de ligne dans une longue commande. Je le fais pour m'aider à garder une trace de divers bits d'une entrée CLI complexe. Avant de l'expliquer ligne par ligne, la partie où vous ne convertissez qu'une petite partie d'une vidéo est la deuxième ligne et la dernière dernière ligne: -ss 0
signifie chercher à 0 seconde avant de commencer à décoder l'entrée, et -t 120
signifie arrêter d'écrire dans la sortie après 120 secondes. Vous pouvez également utiliser les formats d'heure hh: mm: ss ou hh: mm: ss.sss.
Maintenant ligne par ligne:
-hide_banner
empêche FFmpeg
d'afficher les informations de construction au démarrage. Je ne veux simplement pas le voir quand je fais défiler vers le haut dans la console;
-ss 0
cherche à 0 seconde avant de commencer à décoder l'entrée. Notez que si ce paramètre est donné après le fichier d'entrée et avant le fichier de sortie, il devient une option de sortie et indique ffmpeg
de décoder et d'ignorer l'entrée jusqu'à x secondes, puis de commencer à écrire dans la sortie. En tant qu'option d'entrée, elle est moins précise (car la recherche n'est pas précise dans la plupart des formats de conteneur), mais prend presque pas de temps. En tant qu'option de sortie, elle est très précise, mais prend beaucoup de temps pour décoder tout le flux avant l'heure spécifiée et vous ne souhaitez pas perdre de temps à des fins de test.
-i "INPUT.mkv"
: Spécifiez le fichier d'entrée;
-attach "COVER.jpg"
: Attachez une pochette (vignette, affiche, etc.) à la sortie. La pochette est généralement montrée dans les explorateurs de fichiers;
-map_metadata 0
: Copiez toutes les métadonnées de l'entrée 0, qui dans l'exemple n'est que l'entrée;
-map_chapters 0
: Copier les informations de chapitre (si présentes) à partir de l’entrée 0;
-metadata title="TITLE"
: Définir le titre de la vidéo;
-map 0:0 ...
: Mappez le flux 0 de l'entrée 0, ce qui signifie que nous voulons que le premier flux de l'entrée soit écrit dans la sortie. Comme ce flux est un flux vidéo, il s'agit du premier flux vidéo de la sortie , d'où le spécificateur de flux :s:v:0
. Définissez l’étiquette de langue sur anglais;
-map 0:1 ...
: Similaire à la ligne 8, mappez le deuxième flux (audio DTS) et définissez sa langue et son titre (pour une identification plus facile lors du choix parmi les lecteurs);
-map 0:2 ...
: Semblable à la ligne 9, sauf que ce flux est un sous-titre;
-metadata:s:t:0 ...
: Définir des métadonnées pour la couverture. Ceci est requis pour le format de conteneur mkv;
-c:v libx265 ...
: Options de codec vidéo. C'est tellement long que je l'ai divisé en deux lignes. Ce paramètre convient aux vidéos Blu-ray de haute qualité (1080p) avec une bande minimale en dégradé (ce qui x265 est nul). Il s’agit probablement d’une surexploitation de DVD, d’émissions de télévision et de vidéos de téléphone. Ce paramètre est principalement volé à ce poste de Doom9 ;
crf=22:...
: Continuation des paramètres du codec vidéo. Voir le post de forum mentionné ci-dessus;
-c:a copy
: Copier sur audio;
-c:s copy
: Copier les sous-titres;
-t 120
: Arrête d'écrire dans la sortie après 120 secondes, ce qui nous donne un clip de 2 minutes pour la prévisualisation de la qualité de la transcription;
"OUTPUT.HEVC.DTS.Sample.mkv"
: Nom du fichier de sortie. Je marque mes noms de fichiers avec le codec vidéo et le codec audio principal.
Ouf. Ceci est ma première réponse, alors s'il y a quelque chose que j'ai manquée, laissez un commentaire. Je ne suis pas un expert en production vidéo, je suis juste un gars qui est trop paresseux pour regarder un film en plaçant le disque dans le lecteur.
PS Peut-être que cette question appartient ailleurs car elle n'est pas fortement liée à Unix et Linux.
--lossless
pourrait en fait agrandir le fichier s'il décodait le codec précédemment avec perte, puis comprenait ce qu'il décodait sans perte. La qualité restera identique à l'entrée.