Tenho uma linha de comando bem simples para converter várias imagens em outros formatos:
for %f in (*.png*) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 "%~nf.jxl"
O problema é que agora estou trabalhando com fotos RAW tiradas de um smartphone Xiaomi Redmi Note 13 4G. Aqui está uma foto RAW que tirei do telefone e "reduzi o ruído" com o Photoshop, resultando em um arquivo DNG modificado.
Usando o ffprobe consegui obter algumas informações do arquivo
[tiff @ 00000220445a4d80] Tiled TIFF is not allowed to strip
Input #0, tiff_pipe, from 'input.dng':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: tiff, bayer_grbg16le, 4000x3000, 25 fps, 25 tbr, 25 tbn
Não sei o que a informação anterior significa ou como usá-la corretamente para converter o arquivo para JPEG XL. Depois de pesquisar em fóruns, usei a informação e tentei:
for %f in (*.dng*) do ffmpeg -f rawvideo -r 25 -s 4000x3000 -pix_fmt bayer_grbg16le -i "%f" -c:v libjxl -distance 0.0 -update true -frames:v 1 "%~nf.jxl"
Mas como não sei o que estou fazendo, o console mostra:
[rawvideo @ 0000022fb537fa40] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from 'input.dng':
Duration: 00:00:00.04, start: 0.000000, bitrate: 5746833 kb/s
Stream #0:0: Video: rawvideo ([186]GR[16] / 0x105247BA), bayer_grbg16le, 4000x3000, 4800000 kb/s, 25 tbr, 25 tbn
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> jpegxl (libjxl))
Press [q] to stop, [?] for help
Truncating packet of size 24000000 to 4734168
[rawvideo @ 0000022fb537fa40] Packet corrupt (stream = 0, dts = 1).
[in#0/rawvideo @ 0000022fb537f640] corrupt input packet in stream 0
[rawvideo @ 0000022fb5394dc0] Invalid buffer size, packet size 4734168 < expected frame_size 24000000
[vist#0:0/rawvideo @ 0000022fb538b7c0] [dec:rawvideo @ 0000022fb5392440] Error submitting packet to decoder: Invalid argument
Output #0, image2, to 'input.jxl':
Metadata:
encoder : Lavf61.9.101
Stream #0:0: Video: jpegxl, rgb24(pc, gbr/unknown/unknown, progressive), 4000x3000, q=2-31, 200 kb/s, 25 fps, 25 tbn
Metadata:
encoder : Lavc61.27.101 libjxl
[libjxl @ 0000022fb538f280] Unknown transfer function, assuming IEC61966-2-1/sRGB. Colors may be wrong.
[libjxl @ 0000022fb538f280] Unknown primaries, assuming BT.709/sRGB. Colors may be wrong.
[out#0/image2 @ 0000022fb537f400] video:31195KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 1 fps=0.1 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.00473x
E recebo um arquivo .jxl corrompido.
Alguém pode me ajudar, por favor? Eu só quero integrar os parâmetros necessários na minha pequena linha de código for %f in (*.dng*) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 "%~nf.jxl"
para que ele converta sem perdas o arquivo RAW dng em um arquivo JPEG XL.
PS: Sei que nem o Windows 11 nem o Android oferecem suporte nativo ao JPEG XL, mas eu só quero economizar espaço no meu HDD com .jxl
arquivos em vez dos .dng
arquivos.