¿Hojas de trucos y ajustes preestablecidos que realmente funcionan con FFmpeg 1.0?

28

He probado varias 'hojas de trucos' disponibles en otros lugares, pero casi todas están desactualizadas y simplemente NO funcionarán con la última versión de FFMpeg.

¿Alguien puede señalarme la configuración que funcionará con la última FFMpeg?

Estoy interesado principalmente en los siguientes códecs

H.264, presets de baja, media y alta calidad

tanto como

ProRes, presets de baja, media y alta calidad

Bachalo
fuente

Respuestas:

49

FFmpeg ya no incluye preajustes y perfiles basados ​​en archivos de texto para libx264, es decir, lo que ha usado con la -vpreopción. Estos se han depreciado y eliminado en favor de acceder a los preajustes x264 reales, perfiles (y canciones) con el -preset, -profile:vy -tuneopciones. Los archivos de texto antiguos solo emulaban los preajustes y perfiles oficiales x264, y debido a varias limitaciones no podían ofrecer la funcionalidad completa que proporciona el nuevo sistema. También es mucho más fácil de mantener.

Además, muchos codificadores tienen sus propias opciones separadas; también llamado "opciones privadas". Tendrá que buscar en las opciones de codificador de audio y video para códecs comunes en la documentación en línea de FFmpeg, o verificar la salida ffmpeg -h fullpara obtener una lista completa de las opciones compatibles. Por ejemplo, x264 enumera sus opciones libx264 AVOptionsen la salida de ayuda completa.

Si su ffmpeg es compatible, -presetentonces no se debe usar ningún archivo preestablecido de archivos de texto, y FFmpeg ya no viene con otros ajustes preestablecidos de iPod no estándar. Es un error común pensar que los preajustes de texto simplemente se pueden copiar desde cualquier lugar y usar con cualquier ffmpeg. Esto no es cierto y provocará la rotura.


Básicamente, los ajustes preestablecidos le permitieron hacer lo siguiente:

Control de calidad

La calidad se controla especificando un bitrate a través -b:v(para video) o -b:a(para audio), o especificando cualquier otro método de codificación que el códec pueda admitir.

Para x264, existen varios métodos de codificación, siendo el método del Factor de tasa constante el más sofisticado. Resulta en bitrate variable, pero en general de buena calidad en una sola pasada. Los valores de CRF oscilan entre 0 y 51, pero los valores correctos están en algún lugar entre 19 y 26, según su fuente y la calidad que desee. 23 es el predeterminado, por lo que podría elegir, por ejemplo, 18 para "alta calidad" y 28 para "baja calidad", lo que sea que eso signifique para usted.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 también tiene otros métodos de codificación , pero esto está fuera del alcance aquí.

Restringir el perfil H.264

Estos perfiles definen un conjunto de características que el codificador puede usar para igualar las capacidades de un determinado decodificador. En FFmpeg reciente, use la siguiente sintaxis para especificar un perfil, dónde podría estar el perfil baseline, maino high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Para obtener más información y cuándo debe usar qué perfil, consulte: ¿Cuáles son las diferencias entre los perfiles H.264?

Elija una codificación x264 preset

Estos preajustes afectan la velocidad de codificación. El uso de un preajuste más lento le brinda una mejor compresión o calidad por tamaño de archivo, mientras que los preajustes más rápidos le dan una peor compresión. En general, solo debe usar el valor predeterminado que puede esperar. Preajustes pueden ser ultrafast, superfast, veryfast, faster, fast, medium(por defecto), slowy veryslow. Aquí hay un ejemplo:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Codificar video sin pérdida

Esto es posible especificando un CRF de 0, así que simplemente use -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Finalmente, hablemos de ProRes rápidamente. ProRes acepta una tasa de bits fija -b:vo puede especificar el perfil, que debe ser un valor entre 0 y 3 , donde las tasas de bits se eligen de acuerdo con el perfil. Más alto significa mejor:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

El Wiki de ffmbc sugiere que se pueden usar los nombres de los perfiles; sin embargo, esto falla en FFmpeg 1.0.

slhck
fuente
¿Qué debo hacer para reducir las posibilidades de que falle la conversión
Está
@FlyingAtom No he oído hablar de "Error de conversión" todavía. Si usted tiene una pregunta específica con un problema reproducible, por favor, hacer una nueva pregunta: superuser.com/questions/ask
slhck
Entonces, ¿con qué terminarías si todo lo que suministraras fuera ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 y preestablecido: medio?
Drazen Bjelovuk
1
@Drazen Sí, eso es correcto.
slhck
¡Aclamaciones! -------
Drazen Bjelovuk
20

Hice una prueba en la que transcodifiqué (usando codificación libx264 a .mp4) un video de alta calidad de una videocámara Sony usando el rango completo de valores preestablecidos (excepto placebo) en un rango de valores CRF (18, 21, 24 y 27 ) Quería saber qué me daría la mejor combinación de velocidad de codificación, calidad de salida y tamaño de archivo.

Para cada valor de CRF, le di a cada operación de transcodificación una puntuación para su tiempo de codificación (por ejemplo, para CRF = 18, el tiempo preestablecido de ultrafast de 5,7 segundos obtuvo una puntuación de 1,0, el tiempo de veryslow de 162 segundos obtuvo un 0, con todos otros puntajes escalados en el medio). Calculé las puntuaciones de tamaño del archivo de salida de manera similar, por supuesto, dando la mejor puntuación al archivo más pequeño. Luego agregué los dos puntajes para un puntaje de velocidad / tamaño "combinado".

Para cada uno de los cuatro valores de CRF, el valor predeterminado "muy rápido" fue el ganador indiscutible, con puntajes casi perfectos de 1.94 (para CRF 18 y 21), 1.96 (CRF 24) y 1.97 (CRF 27). Me parece muy curioso que "muy rápido" produzca casi el tamaño de archivo más pequeño cada vez , perdiendo solo por "muy lento" y nunca por mucho.

Una diferencia que noté entre los diversos valores preestablecidos fue que el sistema operativo (Windows 7) me daría diferentes miniaturas. Los ajustes preestablecidos más rápidos mostrarían una miniatura durante varios segundos en el video, donde las miniaturas de los ajustes preestablecidos más lentos reflejarían los fotogramas de apertura del video. Eso no es importante para mí; Lo que aprendí fue que "preset veryfast" parece ser una opción fácil.

Aquí están mis resultados (como una imagen instantánea de una hoja de cálculo de Excel):
instantánea de Excel

Aquí está la hoja de cálculo de Excel como texto csv:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00
Ted W
fuente
3
Sé que las opciones de formato de Super User son mediocres, pero podría ser útil si publicaste los datos como texto, posiblemente utilizando el formato de código.
Scott
1
Fascinante. También es más rápido en mi máquina. ¡Gracias!
joeytwiddle
1
Debo admitir que miré sus resultados con sospecha, pero repetí la prueba y obtuve resultados similares, usando ffmpeg versión 3.3.2-1 en un clip de película de 1080p de 2 minutos. De hecho, muy rápido generó el tamaño de archivo más pequeño el 60% del tiempo, y llegó en segundo lugar a veryslow el 40% del tiempo (pero no por mucho). De ahora en adelante, usaré muy rápido para todas mis codificaciones junto con un valor CRF bastante bajo (18, 19, 20) ya que muy rápido fue solo un poco más lento con los valores CRF más bajos que con los más altos. Gracias, me has ahorrado mucho tiempo. Datos sin procesar y script en el comentario a continuación.
Mattst
1
Continuando con el comentario anterior ... Aquí están mis datos en bruto: CRF 18 a 27 y el script bash de Linux / UNIX que escribí para ejecutar los codificadores (en caso de que alguien desee ejecutar una prueba similar).
Mattst
1
Aquí hay algunas publicaciones de blog excelentes sobre los temas, con pruebas realizadas para x264 y x265 (los resultados son, previsiblemente, muy diferentes para cada uno)
forresthopkinsa