我有一个非常简单的命令行可以将多幅图像转换为其他格式:
for %f in (*.png*) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 "%~nf.jxl"
问题是,现在我正在处理小米 Redmi Note 13 4G 智能手机拍摄的 RAW 照片。这是我用手机拍摄的RAW 照片,并使用 Photoshop 进行了“去噪”,从而生成了修改后的 DNG 文件。
使用 ffprobe 我能够从文件中获取一些信息
[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
我不知道之前的信息是什么意思,也不知道如何正确使用它将文件转换为 JPEG XL。在查阅了论坛后,我使用了这些信息并尝试:
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"
但由于我不知道自己在做什么,控制台显示:
[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
有人能帮帮我吗?我只想将必要的参数集成到我的一小行代码中,for %f in (*.dng*) do ffmpeg -i "%f" -c:v libjxl -distance 0.0 "%~nf.jxl"
以便将 RAW dng 文件无损转换为 JPEG XL 文件。
.jxl
PS,我知道 Windows 11 和 Android 都不原生支持 JPEG XL,但我只是想用文件而不是文件来节省硬盘上的一些空间.dng
。