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
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_size
un 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.