Desde mi propia experiencia, si no desea absolutamente ninguna pérdida de calidad, sin pérdida es lo que está buscando.
No estoy seguro, avconv
pero el comando que escribió parece idéntico al que hago FFmpeg
. En FFmpeg
puedes pasar el parámetro así:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
La mayoría de los x265
interruptores (opciones sin valor) se pueden especificar de esta manera (excepto aquellos que solo son CLI, solo se usan con x265
binario directamente).
Con eso fuera del camino, me gustaría compartir mi experiencia con la x265
codificación. Para la mayoría de los videos (ya sea WMV, o MPEG, o AVC / H.264) que uso crf=23
. x265
decide el resto de los parámetros y generalmente hace un trabajo lo suficientemente bueno.
Sin embargo, a menudo, antes de comprometerme a transcodificar un video en su totalidad, pruebo mi configuración al convertir una pequeña porción del video en cuestión. Aquí hay un ejemplo, suponga que un archivo mkv con la secuencia 0 es video, la secuencia 1 es audio DTS y la secuencia 2 es un subtítulo:
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"
Tenga en cuenta que la línea de señal de barra diagonal inversa se rompe en un comando largo, lo hago para ayudarme a realizar un seguimiento de varios bits de una entrada CLI compleja. Antes de explicarlo línea por línea, la parte donde convierte solo una pequeña porción de un video es la segunda línea y la segunda última línea: -ss 0
significa buscar 0 segundos antes de comenzar a decodificar la entrada y -t 120
significa dejar de escribir en la salida después de 120 segundos. También puede usar los formatos de hora hh: mm: ss o hh: mm: ss.sss.
Ahora línea por línea:
-hide_banner
evita FFmpeg
mostrar información de compilación al inicio. Simplemente no quiero verlo cuando me desplazo hacia arriba en la consola;
-ss 0
busca 0 segundos antes de comenzar a decodificar la entrada. Tenga en cuenta que si este parámetro se proporciona después del archivo de entrada y antes del archivo de salida, se convierte en una opción de salida y le dice ffmpeg
que decodifique e ignore la entrada hasta x segundos, y luego comience a escribir en la salida. Como una opción de entrada, es menos precisa (porque la búsqueda no es precisa en la mayoría de los formatos de contenedor), pero casi no lleva tiempo. Como opción de salida, es muy preciso, pero toma una cantidad considerable de tiempo decodificar todo el flujo antes del tiempo especificado, y para propósitos de prueba no desea perder tiempo;
-i "INPUT.mkv"
: Especifique el archivo de entrada;
-attach "COVER.jpg"
: Adjunte una portada (imagen en miniatura, póster, lo que sea) a la salida. La portada generalmente se muestra en exploradores de archivos;
-map_metadata 0
: Copie todos y cada uno de los metadatos de la entrada 0, que en el ejemplo es solo la entrada;
-map_chapters 0
: Copie la información del capítulo (si está presente) de la entrada 0;
-metadata title="TITLE"
: Establece el título del video;
-map 0:0 ...
: Asigna la secuencia 0 de la entrada 0, lo que significa que queremos que la primera secuencia de la entrada se escriba en la salida. Dado que esta transmisión es una transmisión de video, es la primera transmisión de video en la salida , de ahí el especificador de transmisión :s:v:0
. Establezca su etiqueta de idioma en inglés;
-map 0:1 ...
: Similar a la línea 8, mapee la segunda transmisión (audio DTS) y configure su idioma y título (para una identificación más fácil al elegir entre reproductores);
-map 0:2 ...
: Similar a la línea 9, excepto que esta secuencia es un subtítulo;
-metadata:s:t:0 ...
: Establecer metadatos para la portada. Esto es necesario para el formato de contenedor mkv;
-c:v libx265 ...
: Opciones de códec de video. Es tan largo que lo he dividido en dos líneas. Esta configuración es buena para video bluray de alta calidad (1080p) con bandas mínimas en gradiente (que x265 es una mierda). Es muy probable que sea una exageración para DVD y programas de TV y videos telefónicos. Esta configuración se roba principalmente de esta publicación de Doom9 ;
crf=22:...
: Continuación de los parámetros del códec de video. Vea la publicación del foro mencionada anteriormente;
-c:a copy
: Copia sobre audio;
-c:s copy
: Copiar sobre subtítulos;
-t 120
: Deja de escribir en la salida después de 120 segundos, lo que nos da un clip de 2 minutos para previsualizar la calidad de la transcodificación;
"OUTPUT.HEVC.DTS.Sample.mkv"
: Nombre del archivo de salida. Etiqueto mis nombres de archivo con el códec de video y el códec de audio primario.
Uf. Esta es mi primera respuesta, así que si hay algo que me perdí, por favor deje un comentario. No soy un experto en producción de video, solo soy un tipo que es demasiado vago para ver una película poniendo el disco en el reproductor.
PD. Tal vez esta pregunta pertenece a otro lugar, ya que no está muy relacionada con Unix y Linux.
--lossless
de hecho, podría agrandar el archivo si decodifica el códec con pérdida previa y luego descubre lo que decodificó sin pérdida. La calidad se mantendrá exactamente igual que la entrada.