ffmpeg que muestra el error "Bloqueo de la cola de mensajes de subprocesos" durante la codificación (no en tiempo real)

Espero que alguien pueda ayudarme. Estoy usando ffmpeg para extraer los cuadros de un video antiguo como imágenes, mejorar por lotes y escalar las imágenes, luego volver a codificar las imágenes junto con el audio original en un nuevo video. Esto funciona y el resultado parece y suena correcto, pero recibo este error/advertencia durante el proceso

[image2 @ 0000022193c2e8c0] Thread message queue blocking; consider raising the thread_queue_size option

Dado que la salida parece correcta, no sé si debo preocuparme por esto o no. ¿Este mensaje implica que se descartaron fotogramas? ¿O simplemente me dice que puedo leer más rápido de lo que puedo escribir?

Todo lo que encuentro sobre esto en línea proviene de personas que codifican en tiempo real mientras transmiten. Puedo entender que es posible que una CPU no se mantenga al día en esa situación y pierda algunos cuadros, pero estoy codificando archivos en el disco a otro archivo en el disco. Supongo que en esta situación el programa simplemente bloqueará los subprocesos de entrada hasta que la salida se ponga al día, en lugar de eliminar fotogramas, pero no estoy seguro, por eso pregunto aquí.

Esto solo sucede si incluyo una copia de audio en el mismo comando. Estoy copiando del mismo video original del que hice los cuadros (que fue codificado a 29.97 fps). Estoy dando salida a un video de la misma velocidad de fotogramas (creo). ¿Hay algo que estoy haciendo mal aquí?

> ffmpeg.exe -f image2 -framerate ntsc -i %%06d.png -i D:\encode\original.avi -map 0:v:0 -map 1:a:0 -acodec copy -c:v libx265 -crf 28 -preset medium -pix_fmt yuv420p -r ntsc D:\encode\new.mkv

ffmpeg version 4.3.1-2020-11-19-full_build-www.gyan.dev Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.2.0 (Rev5, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-libsnappy --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libzvbi --enable-librav1e --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, image2, from '%06d.png':
  Duration: 00:03:29.84, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24(pc), 1280x720, 29.97 fps, 29.97 tbr, 29.97 tbn, 29.97 tbc
Guessed Channel Layout for Input Stream #1.1 : stereo
Input #1, avi, from 'D:\encode\original.avi':
  Duration: 00:03:29.84, start: 0.000000, bitrate: 2202 kb/s
    Stream #1:0: Video: mpeg4 (DX50 / 0x30355844), yuv420p, 352x240 [SAR 1:1 DAR 22:15], 778 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn, 30k tbc
    Stream #1:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (png (native) -> hevc (libx265))
  Stream #1:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 3.4+27-g5163c32d7
x265 [info]: build info [Windows][GCC 10.2.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [info]: Main profile, Level-3.1 (Main tier)
x265 [info]: Thread pool created using 24 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 4 / wpp(12 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / off / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 early-skip rskip mode=1 signhide tmvp
x265 [info]: tools: b-intra strong-intra-smoothing lslices=4 deblock sao
Output #0, matroska, to 'D:\encode\new.mkv':
  Metadata:
    encoder         : Lavf58.45.100
    Stream #0:0: Video: hevc (libx265), yuv420p, 1280x720, q=-1--1, 29.97 fps, 1k tbn, 29.97 tbc
    Metadata:
      encoder         : Lavc58.91.100 libx265
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
[image2 @ 0000022193c2e8c0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
frame= 6289 fps= 88 q=35.9 Lsize=   59028kB time=00:03:29.84 bitrate=2304.4kbits/s speed=2.92x
video:22746kB audio:36149kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: 0.226772%
x265 [info]: frame I:     34, Avg QP:28.64  kb/s: 2940.00
x265 [info]: frame P:   1520, Avg QP:30.35  kb/s: 1771.54
x265 [info]: frame B:   4735, Avg QP:33.71  kb/s: 588.33
x265 [info]: Weighted P-Frames: Y:3.4% UV:2.5%
x265 [info]: consecutive B-frames: 1.5% 0.6% 6.1% 75.2% 16.5%
 
encoded 6289 frames in 71.77s (87.63 fps), 887.02 kb/s, Avg QP:32.87

Respuestas (1)

Tuve el mismo problema con dicha configuración, es decir, marcos de entrada como PNG + audio.

Mi solución para silenciar la advertencia era -thread_queue_sizeun parámetro con el valor máximo posible (es decir, más grande que mi cantidad total de marcos PNG) antes de cada entrada.

Teniendo en cuenta que tiene un videoclip con una duración de ~3:30, probaría el comando:

ffmpeg.exe -f image2 -framerate ntsc -thread_queue_size 5040 -i %%06d.png \
-thread_queue_size 5040 -i D:\encode\original.avi \
-map 0:v:0 -map 1:a:0 -acodec copy -c:v libx265 -crf 28 -preset medium \
-pix_fmt yuv420p -r ntsc D:\encode\new.mkv

Si el mensaje realmente afecta la calidad de salida, lo sentimos, no podemos confirmarlo. Para mí fue más rápido simplemente establecer el límite.