
Ich versuche, ein benutzerdefiniertes ICC-Profil in ein MP4 einzubetten, kann aber nicht herausfinden, wie das mit ffmpeg geht.
Ich habe die Einzelbilder einer Animation als PNGs mit einem eingebetteten benutzerdefinierten ICC-Profil gespeichert. Die PNGs werden farbverwaltet und in einem profilierten breiten Farbraum angezeigt.
Ich habe erfolglos versucht, dasselbe ICC-Profil in Videos zu schreiben.
Beihttps://ffmpeg.org/ffmpeg-codecs.htmlIch habe die „flags2 icc_profiles“ gefunden, aber da ich keine Möglichkeit sehe, die ICC-Datei anzugeben, bin ich davon ausgegangen, dass das im ersten PNG eingebettete Profil verwendet wird. Aber das funktioniert nicht.
Beihttps://vectronic.io/posts/ffmpeg-now-supports-icc-profiles-in-mp4/Es gibt eine MP4-Datei mit eingebettetem ICC-Profil, aber keine Erklärung, wie das Profil in das Beispiel geschrieben wurde.
Mein Batch-Befehl lautet:
ffmpeg -i "frame%%4d.png" -c:v libsvtav1 -pix_fmt yuv420p10le -color_range pc -svtav1-params crf=10:mbr=20M -movflags faststart output.mp4
(„color_range“ macht in meinem Fall keinen Unterschied)
Wenn ich die Optionen „-colorspace bt709 -color_primaries bt709 -color_trc bt709“ verwende, zeigen Firefox und Ffplay das Video farbverwaltet an (sieht aus wie BT709 oder ist ähnlich).
Wenn ich „movflags +write_colr+prefer_icc“ verwende, wird das Video auch farbverwaltet (und sieht genauso aus wie BT709 oben).
BEARBEITEN (Protokoll):
C:\icctest>"C:\icctest\ffmpeg.exe" -y -framerate 30 -i "C:\icctest\frames\frame%4d.png" -c:v libsvtav1 -pix_fmt yuv420p10le -flags2 icc_profiles -color_range pc -svtav1-params crf=10:mbr=20M:keyint=2s -movflags faststart "C:\icctest\output.mp4"
ffmpeg version 2022-08-22-git-f23e3ce858-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 12.1.0 (Rev2, 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-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --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-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --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 57. 33.101 / 57. 33.101
libavcodec 59. 42.102 / 59. 42.102
libavformat 59. 30.100 / 59. 30.100
libavdevice 59. 8.101 / 59. 8.101
libavfilter 8. 46.103 / 8. 46.103
libswscale 6. 8.103 / 6. 8.103
libswresample 4. 8.100 / 4. 8.100
libpostproc 56. 7.100 / 56. 7.100
Input #0, image2, from 'C:\icctest\frames\frame%4d.png':
Duration: 00:00:00.30, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb48be(pc), 1920x1080 [SAR 3780:3780 DAR 16:9], 30 fps, 30 tbr, 30 tbn
Stream mapping:
Stream #0:0 -> #0:0 (png (native) -> av1 (libsvtav1))
Press [q] to stop, [?] for help
[image2 @ 000002a6a9063cc0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 1)
Svt[info]: -------------------------------------------
Svt[info]: SVT [version]: SVT-AV1 Encoder Lib v1.2.1-7-g5f4c0fe8
Svt[info]: SVT [build] : GCC 12.2.0 64 bit
Svt[info]: LIB Build date: Aug 21 2022 13:29:44
Svt[info]: -------------------------------------------
Svt[info]: Number of logical cores available: 4
Svt[info]: Number of PPCS 37
Svt[info]: [asm level on system : up to avx2]
Svt[info]: [asm level selected : up to avx2]
Svt[info]: -------------------------------------------
Svt[info]: SVT [config]: main profile tier (auto) level (auto)
Svt[info]: SVT [config]: width / height / fps numerator / fps denominator : 1920 / 1080 / 30 / 1
Svt[info]: SVT [config]: bit-depth / color format / compressed 10-bit format : 10 / YUV420 / 0
Svt[info]: SVT [config]: preset / tune / pred struct : 10 / PSNR / random access
Svt[info]: SVT [config]: gop size / mini-gop size / key-frame type : 61 / 16 / key frame
Svt[info]: SVT [config]: BRC mode / rate factor / max bitrate (kbps) : capped CRF / 10 / 20000
Svt[info]: -------------------------------------------
Output #0, mp4, to 'C:\icctest\output.mp4':
Metadata:
encoder : Lavf59.30.100
Stream #0:0: Video: av1 (av01 / 0x31307661), yuv420p10le(pc, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 30 fps, 15360 tbn
Metadata:
encoder : Lavc59.42.102 libsvtav1
Side data:
cpb: bitrate max/min/avg: 20000000/0/0 buffer size: 0 vbv_delay: N/A
frame= 0 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kb[mp4 @ 000002a6a90730c0] Starting second pass: moving the moov atom to the beginning of the file
frame= 9 fps=5.5 q=10.0 Lsize= 2431kB time=00:00:00.26 bitrate=74668.8kbits/s speed=0.163x
video:2430kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.036133%
EDIT2 (ffprobe):
C:\icctest>"C:\icctest\ffprobe.exe" "C:\icctest\output.mp4"
ffprobe version 2022-08-22-git-f23e3ce858-full_build-www.gyan.dev Copyright (c) 2007-2022 the FFmpeg developers
built with gcc 12.1.0 (Rev2, 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-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --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-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --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 57. 33.101 / 57. 33.101
libavcodec 59. 42.102 / 59. 42.102
libavformat 59. 30.100 / 59. 30.100
libavdevice 59. 8.101 / 59. 8.101
libavfilter 8. 46.103 / 8. 46.103
libswscale 6. 8.103 / 6. 8.103
libswresample 4. 8.100 / 4. 8.100
libpostproc 56. 7.100 / 56. 7.100
[libdav1d @ 0000026b98308e40] libdav1d 1.0.0-46-gcd5e415
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\icctest\output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomav01iso2mp41
encoder : Lavf59.30.100
Duration: 00:00:00.30, start: 0.000000, bitrate: 66372 kb/s
Stream #0:0[0x1](und): Video: av1 (Main) (av01 / 0x31307661), yuv420p10le(pc, progressive), 1920x1080, 66347 kb/s, SAR 1:1 DAR 16:9, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc59.42.102 libsvtav1
[libdav1d @ 0000026b988a3c80] libdav1d 1.0.0-46-gcd5e415
Antwort1
Bei der Suche in der FFmpeg-Dokumentation stellt sich heraus, dass das Hinzufügen eines benutzerdefinierten ICC-Profils zur MP4-Datei nicht unterstützt wird.
Wir können verwendenMP4Boxstattdessen:
- Erstellen Sie das MP4-Video ohne das eingebettete ICC-Profil.
- Extrahieren Sie das ICC-Profil aus dem PNG-Bild mitBildMagickoderExiftool.
- Verwenden von ImageMagick:
magick icc_image.png profile.icc
- Verwenden von Exiftool:
exiftool -icc_profile -b icc_image.png > profile.icc
- Verwenden von ImageMagick:
- Fügen Sie das ICC-Profil mit MP4Box zur MP4-Videodatei hinzu (erstellen Sie eine neue Videodatei mit dem ICC-Profil als Nebendaten):
MP4Box -add video.mp4#video:colr=prof,profile.icc -new icc_video.mp4
Beispiel:
Ich habe GIMP verwendet, um ein ICC-Profil hinzuzufügen zuchelsea.png:
icc_chelsea.png
:
MP4-Video ohne ICC-Profil erstellen (zum Testen):
ffmpeg -y -loop 1 -framerate 1 -i icc_chelsea.png -vcodec libx265 -t 10 chelsea.mp4
Extrahieren des ICC-Profils:
magick icc_chelsea.png profile.icc
Hinzufügen des ICC-Profils zur MP4-Videodatei mit MP4Box:
MP4Box -add video.mp4#video:colr=prof,profile.icc -new icc_video.mp4
Testen mit FFprobe:
ffprobe icc_chelsea.mp4
Ergebnis:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'icc_chelsea.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isom
creation_time : 2022-08-26T09:15:00.000000Z
Duration: 00:00:10.00, start: 0.000000, bitrate: 44 kb/s
Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 / 0x31766568), gbrp(pc, gbr/unknown/unknown, progressive), 385x256 [SAR 1:1 DAR 385:256], 40 kb/s, 1 fps, 1 tbr, 16384 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc59.37.100 libx265
Side data:
ICC Profile