FFmpeg: problemas del codificador h264_qsv y crf

3

Me acabo de enterar de FFmpeg cuando grabé un juego en Bandicam usando el códec H.264 (Intel Quick Sync). Desafortunadamente, uno de mis videos terminó siendo grabado en un contenedor AVI y quería transcodificarlo a MP4 de una manera algo sin pérdidas

La razón por la que quiero cambiar los contenedores es porque Adobe Premiere Pro CC 2017 de alguna manera no maneja bien los AVI, y cuando exporto usando H.264 y MP4 como contenedor, todo el video parece roto.

Entonces, tomo FFmpeg e intento transcodificar mi video con el siguiente comando:

ffmpeg -i vid.avi -c:v h264_qsv -crf 10 -r 50 -c:a aac -b:a 192k -ac 2 vid.mp4

El error que aparece en amarillo es:

Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (vid.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.

Estoy bastante seguro de que H.264 (Intel Quick Sync) es compatible con CRF, o podría estar muy equivocado y confundir H.264 (QSV) y libx264, que obviamente es compatible con CRF.

¿Algo alrededor de esto? Tengo FFmpeg ver. 20170921-183fd30, 64 bits, estático.

Editar: La solución alternativa es volver a libx264 y ejecutar faster, veryfasto superfast, pero aún así me gustaría ahorrar bastante tiempo utilizando Intel Quick Sync.

KennyG1092
fuente

Respuestas:

5

El codificador QSV no tiene un parámetro llamado CRF. El método de control de velocidad equivalente es LA_ICQ.

https://software.intel.com/en-us/articles/common-bitrate-control-methods-in-intel-media-sdk :

El control de velocidad predeterminado para x264 (implementación h264 predeterminada de FFmpeg) es CRF. Esto permite fluctuaciones de velocidad de bits para mantener un nivel de calidad objetivo. ICQ y LA_ICQ de Media SDK son la mejor combinación para esta clase de algoritmo.


Para invocarlo, se necesita un comando del formulario:

ffmpeg -i in.mp4 -c:v h264_qsv -global_quality 10 -look_ahead 1 out.mp4

look_aheaddebería ser 1. global_qualitypuede ser de 1 a 51. Un valor más bajo representa una mejor calidad. ~ 25 debería ser equivalente a x264 CRF 23.

Gyan
fuente
OK gracias. Para aclarar, una global_qualityconfiguración de 0 es sin pérdidas, similar a 0 CRF de h.264 ???
KennyG1092
No. No creo que este codificador tenga un modo sin pérdidas.
Gyan