Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
![]() |
#1 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
how to use ffmpeg to encode to mp4-avc-HDR-4k
OK, call me stupid.
Googled for a couple of hours, found a plethora of semi-conflicting information, and am still not much clearer on what ffmpeg commandline switches to use to convert (re-encode) a 4K HDR webm video, eg vp9.2, (and other similar samples in various formats from across the web) into an mp4 container as avc/HDR/4k, presmably profile high10 level 5.1 an mkv container as avc/HDR/4k, presmably profile high10 level 5.1 an mp4 container as hevc/HDR/4k an mkv container as hevc/HDR/4k equivalent in quality to the avc I'd prefer to use ffmpeg rather than x264 and x265 if possible. Any example commandlines and/or link(s) would be very greatly appreciated. So far I've seem something like this Code:
ffmpeg_10bit.exe -i <infile.i420.bt2020nc.yuv420p10le.webm> -input-depth 10 -c:a libopus -c:v libx265 -tag:v hvc1 -crf 15 -pix_fmt yuv420p10le -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc" -f mp4 -y "outfile.mp4" Code:
ffmpeg.exe -i <infile.i420.bt2020nc.yuv420p10le.webm> --input-depth 10 -c:a libopus -c:v libx264 --preset slow -crf 15 -no-open-gop -profile high10 -level:v 5.1 -level-idc 5.1 -pix_fmt yuv420p10le -colorprim bt2020 -colormatrix bt2020nc -transfer smpte-st-2084 -x264opts "" -movflags faststart -f mp4 -y "output.mp4" Last edited by hydra3333; 10th February 2018 at 05:48. |
![]() |
![]() |
![]() |
#2 | Link |
Registered User
Join Date: Oct 2001
Location: Germany
Posts: 7,034
|
at least for x265 you will have to add master-display and max-cll to the command line as parameters
"colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,10)" and may be ':max-cll=0,0' don't think there is an option in ffmpeg to passthrough these settings to libx265 |
![]() |
![]() |
![]() |
#3 | Link |
Registered User
Join Date: Dec 2002
Posts: 5,565
|
And don't simply copy them from Selur's example. You have to read them from the source. Try MediaInfo to show the values. If that doesn't work try mkvinfo for VP9/WebM, a stream analyzer like ffprobe or Zond for HEVC.
You may need to calculate the values. They are set (stored) differently than they appear in MediaInfo: http://x265.readthedocs.io/en/defaul...master-display https://matroska.org/technical/specs/index.html#Colour HDR in H.264, albeit possible, is uncommon. I would not use it for lack of compatibility. I think x264 does not even implement the mastering display colour volume SEI yet. (You can flag the mkv container, though.) Last edited by sneaker_ger; 10th February 2018 at 12:23. |
![]() |
![]() |
![]() |
#4 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
OK, thank you for the information !
I'd mistakenly thought h.264 10bit HDR was now "a thing", so I will avoid that and stick with h.265 HDR. As you both suggest, I'll start looking into the meanings of master-display and colorprim and max-cll and read these docs http://x265.readthedocs.io/en/defaul...master-display https://matroska.org/technical/specs/index.html#Colour and at the info produced by MediaInfo, mkvinfo and ffprobe. Thank you, now I have a useful place to start, a lot better than aimless wandering ![]() |
![]() |
![]() |
![]() |
#5 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
OK, ffprobe seems to show the most info.
From the ffprobe output below, these seem to be the most relevant items which can be "extracted" from an ffprobe output. Although, I'm not sure where the 2 values for "max-cll=0,0" come from. Further advice welcomed. Code:
pix_fmt=yuv420p10le color_range=tv color_space=bt2020nc color_transfer=smpte2084 (does this need to be transformed into "smpte-st-2084" ?) color_primaries=bt2020 red_x=34000/50000 (discard eveything on and after the "/") red_y=16000/50000 (discard eveything on and after the "/") green_x=13248/50000 (discard eveything on and after the "/") green_y=34500/50000 (discard eveything on and after the "/") blue_x=7500/50000 (discard eveything on and after the "/") blue_y=3000/50000 (discard eveything on and after the "/") white_point_x=15634/50000 (discard eveything on and after the "/") white_point_y=16450/50000 (discard eveything on and after the "/") min_luminance=50/10000 (discard eveything on and after the "/") max_luminance=10000000/10000 (discard eveything on and after the "/") Code:
ffmpeg.exe -input-depth 10 -pix_fmt %pix_fmt% -i "G:\HDTV\0nvencc\vp9_2_HDR10_UHD_4K_Demo.webm" -i input.vp9.2.webm -an -c:v libx265 -preset slow -crf 15 -x265-params "colorprim=%color_primaries% :transfer=%color_transfer% :colormatrix=%color_space% :master-display=G(%green_x%,%green_y%)B(%blue_x%,%blue_y%)R(%red_x%,%red_y%)WP(%white_point_x%,%white_point_y%)L(%max_luminance%,%min_luminance%) :max-cll=0,0:hdr" -profile:v main10 -level:v 5.1 -crf 18 -output-depth=10 -movflags faststart -f mp4 -y output.mp4 Code:
"C:\SOFTWARE\ffmpeg\0-homebuilt-x64\ffprobe.exe" -prefix -unit -pretty -show_streams -i "G:\HDTV\0nvencc\vp9_2_HDR10_UHD_4K_Demo.webm" [STREAM] index=0 codec_name=vp9 codec_long_name=Google VP9 profile=Profile 2 codec_type=video codec_time_base=317/19001 codec_tag_string=[0][0][0][0] codec_tag=0x0000 width=3840 height=2160 coded_width=3840 coded_height=2160 has_b_frames=0 sample_aspect_ratio=1:1 display_aspect_ratio=16:9 pix_fmt=yuv420p10le level=-99 color_range=tv color_space=bt2020nc color_transfer=smpte2084 color_primaries=bt2020 chroma_location=unspecified field_order=unknown timecode=N/A refs=1 id=N/A r_frame_rate=19001/317 avg_frame_rate=19001/317 time_base=1/1000 start_pts=0 start_time=0:00:00.000000 duration_ts=N/A duration=N/A bit_rate=N/A max_bit_rate=N/A bits_per_raw_sample=N/A nb_frames=N/A nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 DISPOSITION:timed_thumbnails=0 TAG:language=eng [SIDE_DATA] side_data_type=Mastering display metadata red_x=34000/50000 red_y=16000/50000 green_x=13248/50000 green_y=34500/50000 blue_x=7500/50000 blue_y=3000/50000 white_point_x=15634/50000 white_point_y=16450/50000 min_luminance=50/10000 max_luminance=10000000/10000 [/SIDE_DATA] [/STREAM] ffprobe version N-89991-gdd5208aaf5 Copyright (c) 2007-2018 the FFmpeg developers built with gcc 7.3.0 (GCC) configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=/home/u/Desktop/ffmpeg-windows-build-helpers-withOpenCL-master/sandbox/cross_compilers/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --pkg-config=pkg-config --pkg-config-flags=--static --enable-gray --enable-version3 --disable-debug --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-w32threads --enable-nvenc --enable-cuda --enable-cuvid --enable-d3d11va --enable-libsoxr --enable-fontconfig --enable-libass --enable-libbluray --enable-iconv --enable-libtwolame --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++ --extra-libs=-lpng --extra-libs=-loleaut32 --enable-libmp3lame --enable-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-libfreetype --enable-libopus --enable-bzlib --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --enable-libgme --enable-dxva2 --enable-gray --enable-libopenh264 --enable-libmysofa --enable-libflite --enable-lzma --enable-libsnappy --enable-libzimg --enable-libbs2b --enable-gmp --enable-libfribidi --enable-cross-compile --enable-pic --extra-libs=-lpsapi --extra-libs=-lspeexdsp --disable-schannel --extra-cflags=-DLIBTWOLAME_STATIC --extra-cflags=-DMODPLUG_STATIC --extra-cflags=-DCACA_STATIC --enable-gpl --enable-avisynth --enable-frei0r --enable-filter=frei0r --enable-librubberband --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-amf --enable-avresample --enable-libcdio --extra-cflags='-mtune=generic' --extra-cflags=-O3 --enable-static --disable-shared --prefix=/home/u/Desktop/ffmpeg-windows-build-helpers-withOpenCL-master/sandbox/cross_compilers/mingw-w64-x86_64/x86_64-w64-mingw32 --enable-nonfree --enable-decklink --enable-libfdk-aac --enable-opencl --enable-runtime-cpudetect --extra-libs=-lcrypt32 --extra-libs=-lshlwapi --extra-libs=-lstdc++ --extra-libs=-lass --extra-libs=-lfontconfig --extra-libs=-lexpat --extra-libs=-lfribidi --extra-libs=-lfreetype --extra-libs=-lharfbuzz --extra-libs=-lbz2 --extra-libs=-llzma --extra-libs=-liconv --extra-libs=-lcdio --extra-libs=-lcdio_paranoia --extra-libs=-lz --extra-libs=-lpsapi --extra-libs=-lspeexdsp --extra-libs=-lgdi32 --extra-libs=-lwinmm libavutil 56. 7.100 / 56. 7.100 libavcodec 58. 10.100 / 58. 10.100 libavformat 58. 9.100 / 58. 9.100 libavdevice 58. 1.100 / 58. 1.100 libavfilter 7. 11.101 / 7. 11.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 libpostproc 55. 0.100 / 55. 0.100 Input #0, matroska,webm, from 'G:\HDTV\0nvencc\vp9_2_HDR10_UHD_4K_Demo.webm': Metadata: encoder : google/video-file Duration: 00:03:17.61, start: 0.000000, bitrate: 16593 kb/s Stream #0:0(eng): Video: vp9 (Profile 2), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 1k tbn, 1k tbc (default) Side data: Mastering Display Metadata, has_primaries:1 has_luminance:1 r(0.6800,0.3200) g(0.2650,0.6900) b(0.1500 0.0600) wp(0.3127, 0.3290) min_luminance=0.005000, max_luminance=1000.000000 Last edited by hydra3333; 11th February 2018 at 10:51. Reason: also asked about profile level |
![]() |
![]() |
![]() |
#6 | Link |
Registered User
Join Date: Oct 2001
Location: Germany
Posts: 7,034
|
Not each source has max-cll value flags set, your source probably hasn't.
![]() In case it's present MediaInfo reports them as: Code:
Maximum Content Light Level : 1000 cd/m2 Maximum Frame-Average Light Level : 400 cd/m2 |
![]() |
![]() |
![]() |
#7 | Link | |
Registered User
Join Date: Dec 2002
Posts: 5,565
|
For me it's reported directly below the other values.
Quote:
|
|
![]() |
![]() |
![]() |
#8 | Link | |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
Thank you. ffprobe was from a build from git as of last night
![]() mediainfo is the latest 17.12 and doesn't show it. re-trying ffproble from latest git ... edit: no, not shown anywhere Quote:
I wonder what would happen if I added ":max-cll=0,0" Last edited by hydra3333; 11th February 2018 at 13:56. |
|
![]() |
![]() |
![]() |
#11 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
it seems not to be there no matter what I try...
Ah. Another sample has it though ... Code:
"C:\SOFTWARE\ffmpeg\0-homebuilt-x64\ffprobe.exe" -prefix -unit -show_streams -report -i "G:\HDTV\0nvencc\Shot_in_Real_HDR_Smpte_2084.webm" [STREAM] index=0 codec_name=vp9 codec_long_name=Google VP9 profile=Profile 2 codec_type=video codec_time_base=1/24 codec_tag_string=[0][0][0][0] codec_tag=0x0000 width=3840 height=2160 coded_width=3840 coded_height=2160 has_b_frames=0 sample_aspect_ratio=1:1 display_aspect_ratio=16:9 pix_fmt=yuv420p10le level=-99 color_range=tv color_space=bt2020nc color_transfer=smpte2084 color_primaries=bt2020 chroma_location=unspecified field_order=unknown timecode=N/A refs=1 id=N/A r_frame_rate=24/1 avg_frame_rate=24/1 time_base=1/1000 start_pts=0 start_time=0.000000 s duration_ts=N/A duration=N/A bit_rate=N/A max_bit_rate=N/A bits_per_raw_sample=N/A nb_frames=N/A nb_read_frames=N/A nb_read_packets=N/A DISPOSITION:default=1 DISPOSITION:dub=0 DISPOSITION:original=0 DISPOSITION:comment=0 DISPOSITION:lyrics=0 DISPOSITION:karaoke=0 DISPOSITION:forced=0 DISPOSITION:hearing_impaired=0 DISPOSITION:visual_impaired=0 DISPOSITION:clean_effects=0 DISPOSITION:attached_pic=0 DISPOSITION:timed_thumbnails=0 TAG:language=eng [SIDE_DATA] side_data_type=Content light level metadata max_content=1550 max_average=520 [/SIDE_DATA] [SIDE_DATA] side_data_type=Mastering display metadata red_x=34000/50000 red_y=15998/50000 green_x=13247/50000 green_y=34498/50000 blue_x=7500/50000 blue_y=2999/50000 white_point_x=15635/50000 white_point_y=16448/50000 min_luminance=49/10000 max_luminance=15500000/10000 [/SIDE_DATA] [/STREAM] Last edited by hydra3333; 11th February 2018 at 14:31. |
![]() |
![]() |
![]() |
#12 | Link |
Registered User
Join Date: Oct 2001
Location: Germany
Posts: 7,034
|
I would probably stick with the default x265 uses (max-cll “1000,400”) or simply not set the value.
![]() Code:
--hdr can be used to ensure that max-cll and max-fall values are always signaled (even if 0,0). Last edited by Selur; 11th February 2018 at 14:43. |
![]() |
![]() |
![]() |
#13 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
OK. This batch file will probably crack out the values I need and do something if I drag and drop a .webm file onto it.
Code:
@echo off @setlocal ENABLEDELAYEDEXPANSION @setlocal enableextensions REM Drop a media file on this, eg a .webm file set logfile=%~1.log set ffprobe_inputfile=%~1.ffprobe.log set outputmp4=%~1.h265.mp4 set nvencc_x64=C:\SOFTWARE\NVEncC\NVEncC64.exe set ffmpeg_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\ffmpeg.exe set ffprobe_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\ffprobe.exe set mp4box_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\MP4Box.exe set x264_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\x264.exe set x265_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\x265.exe set mediainfo_x64=c:\software\mediainfo\mediainfo.exe set mkvinfo_x64=C:\SOFTWARE\mkvtoolnix\mkvinfo.exe set muxer_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\muxer.exe set remuxer_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\remuxer.exe set rtmpdump_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\rtmpdump.exe REM probe the file characteristics if exist "%logfile%" del "%logfile%" if exist "%ffprobe_inputfile%" del "%ffprobe_inputfile%" @echo on "%ffprobe_x64%" -prefix -unit -show_streams -report -i "%~1" > "%ffprobe_inputfile%" 2>&1 @echo off REM get the characteristics we are interested in into DOS variables @echo off REM set defaults first set vmax_average=1000" set vmax_content=400" set vwidth= set vheight= set vcoded_width= set vcoded_height= set vhas_b_frames= set vsample_aspect_ratio= set vdisplay_aspect_ratio= set vpix_fmt= set vlevel= set vcolor_range= set vcolor_space= set vcolor_transfer= set vcolor_primaries= set vr_frame_rate= set vavg_frame_rate= set vside_data_type= set vmax_content= set vmax_average= set vside_data_type= set vred_x= set vred_y= set vgreen_x= set vgreen_y= set vblue_x= set vblue_y= set vwhite_point_x= set vwhite_point_y= set vmin_luminance= set vmax_luminance= @echo off for /f "tokens=1,2 delims==" %%a in (' find "=" ^< "%ffprobe_inputfile%" ') do ( set "var=" for %%c in (%%~a) do set "var=!var!,%%~c" set var=!var:~1! set "val=" for %%d in (%%~b) do set "val=!val!,%%~d" set val=!val:~1! REM @echo on REM echo .!var!.=.!val!. IF "!var!" == "width" set v!var!=!val! IF "!var!" == "height" set v!var!=!val! IF "!var!" == "coded_width" set v!var!=!val! IF "!var!" == "coded_height" set v!var!=!val! IF "!var!" == "has_b_frames" set v!var!=!val! IF "!var!" == "sample_aspect_ratio" set v!var!=!val! IF "!var!" == "display_aspect_ratio" set v!var!=!val! IF "!var!" == "pix_fmt" set v!var!=!val! IF "!var!" == "level" set v!var!=!val! IF "!var!" == "color_range" set v!var!=!val! IF "!var!" == "color_space" set v!var!=!val! IF "!var!" == "color_transfer" set v!var!=!val! IF "!var!" == "color_primaries" set v!var!=!val! IF "!var!" == "r_frame_rate" set v!var!=!val! IF "!var!" == "avg_frame_rate" set v!var!=!val! IF "!var!" == "max_content" set v!var!=!val! IF "!var!" == "max_average" set v!var!=!val! IF "!var!" == "side_data_type" set v!var!=!val! IF "!var!" == "red_x" set v!var!=!val! IF "!var!" == "red_y" set v!var!=!val! IF "!var!" == "green_x" set v!var!=!val! IF "!var!" == "green_y" set v!var!=!val! IF "!var!" == "blue_x" set v!var!=!val! IF "!var!" == "blue_y" set v!var!=!val! IF "!var!" == "white_point_x" set v!var!=!val! IF "!var!" == "white_point_y" set v!var!=!val! IF "!var!" == "min_luminance" set v!var!=!val! IF "!var!" == "max_luminance" set v!var!=!val! REM @echo off ) REM split off trailing "/" etc from some of them for /f "tokens=1,2 delims=/" %%a in ("%vwidth%") do (set vwidth=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vheight%") do (set vheight=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcoded_width%") do (set vcoded_width=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcoded_height%") do (set vcoded_height=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vhas_b_frames%") do (set vhas_b_frames=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vsample_aspect_ratio%") do (set vsample_aspect_ratio=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vdisplay_aspect_ratio%") do (set vdisplay_aspect_ratio=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vpix_fmt%") do (set vpix_fmt=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vlevel%") do (set vlevel=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_range%") do (set vcolor_range=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_space%") do (set vcolor_space=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_transfer%") do (set vcolor_transfer=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_primaries%") do (set vcolor_primaries=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vr_frame_rate%") do (set vr_frame_rate=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vavg_frame_rate%") do (set vavg_frame_rate=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_content%") do (set vmax_content=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_average%") do (set vmax_average=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vside_data_type%") do (set vside_data_type=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vred_x%") do (set vred_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vred_y%") do (set vred_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vgreen_x%") do (set vgreen_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vgreen_y%") do (set vgreen_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vblue_x%") do (set vblue_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vblue_y%") do (set vblue_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vwhite_point_x%") do (set vwhite_point_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vwhite_point_y%") do (set vwhite_point_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmin_luminance%") do (set vmin_luminance=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_luminance%") do (set vmax_luminance=%%a) REM not transforms IF /I "%vcolor_range%" == "tv" set vcolor_range=limited IF /I NOT "%vcolor_range%" == "limited" set vcolor_range=full REM echo vwidth=%vwidth% echo vheight=%vheight% echo vcoded_width=%vcoded_width% echo vcoded_height=%vcoded_height% echo vhas_b_frames=%vhas_b_frames% echo vsample_aspect_ratio=%vsample_aspect_ratio% echo vdisplay_aspect_ratio=%vdisplay_aspect_ratio% echo vpix_fmt=%vpix_fmt% echo vlevel=%vlevel% echo vcolor_range=%vcolor_range% echo vcolor_space=%vcolor_space% echo vcolor_transfer=%vcolor_transfer% echo vcolor_primaries=%vcolor_primaries% echo vr_frame_rate=%vr_frame_rate% echo vavg_frame_rate=%vavg_frame_rate% echo vmax_content=%vmax_content% echo vmax_average=%vmax_average% echo vside_data_type=%vside_data_type% echo vred_x=%vred_x% echo vred_y=%vred_y% echo vgreen_x=%vgreen_x% echo vgreen_y=%vgreen_y% echo vblue_x=%vblue_x% echo vblue_y=%vblue_y% echo vwhite_point_x=%vwhite_point_x% echo vwhite_point_y=%vwhite_point_y% echo vmin_luminance=%vmin_luminance% echo vmax_luminance=%vmax_luminance% rem @ECHO ON "%ffmpeg_x64%" -hide_banner -i "%~1" -an -c:v libx265 -pix_fmt "%vpix_fmt%" -preset ultrafast -x265-params "profile=main10:level-idc=5.1:crf=15:no-open-gop=1:aq-mode=1:range=%vcolor_range%:colorprim=%vcolor_primaries%:transfer=%vcolor_transfer%:colormatrix=%vcolor_space%:master-display=G(%vgreen_x%,%vgreen_y%)B(%vblue_x%,%blue_y%)R(%vred_x%,%vred_y%)WP(%vwhite_point_x%,%vwhite_point_y%)L(%vmax_luminance%,%vmin_luminance%):max-cll=%vmax_content%,%vmax_average%:hdr" -profile:v main10 -level:v 5.1 -crf 15 -movflags faststart -f mp4 -y "%outputmp4%" "%ffprobe_x64%" -prefix -unit -show_streams -report -i "%outputmp4%" > "%outputmp4%.ffprobe.log" 2>&1 pause exit PS appreciate the links. Last edited by hydra3333; 12th February 2018 at 15:23. |
![]() |
![]() |
![]() |
#14 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
Well, so much for that. ffprobe on the resulting mp4 said
Code:
pix_fmt=yuv420p10le level=150 color_range=tv color_space=unknown color_transfer=unknown color_primaries=unknown chroma_location=unspecified Code:
pix_fmt=yuv420p10le level=-99 color_range=tv color_space=bt2020nc color_transfer=smpte2084 color_primaries=bt2020 |
![]() |
![]() |
![]() |
#16 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
Thank you. I got a tad "brute forcey" with it and this seemed to work, transferring the input file (eg vp9.2) 4k/HDR 10-bit colour characteristics over to the output file when transcoding into h.265 ...
Its a slow as a wet whistle even with ultrafast preset ![]() Code:
@echo off @setlocal ENABLEDELAYEDEXPANSION @setlocal enableextensions REM Drop a media file on this, eg a .webm file set logfile=%~1.log set ffprobe_inputfile=%~1.ffprobe.log set outputmp4=%~1.h265.mp4 set outputwebm=%~1.h265.webm set nvencc_x64=C:\SOFTWARE\NVEncC\NVEncC64.exe set ffmpeg_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\ffmpeg.exe set ffprobe_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\ffprobe.exe set mp4box_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\MP4Box.exe set x264_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\x264.exe set x265_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\x265.exe set mediainfo_x64=c:\software\mediainfo\mediainfo.exe set mkvinfo_x64=C:\SOFTWARE\mkvtoolnix\mkvinfo.exe set muxer_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\muxer.exe set remuxer_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\remuxer.exe set rtmpdump_x64=C:\SOFTWARE\ffmpeg\0-homebuilt-x64\rtmpdump.exe REM probe the file characteristics if exist "%logfile%" del "%logfile%" if exist "%ffprobe_inputfile%" del "%ffprobe_inputfile%" @echo on "%ffprobe_x64%" -prefix -unit -show_streams -report -i "%~1" > "%ffprobe_inputfile%" 2>&1 @echo off REM get the characteristics we are interested in into DOS variables @echo off REM set defaults first set vmax_average=1000" set vmax_content=400" set vwidth= set vheight= set vcoded_width= set vcoded_height= set vhas_b_frames= set vsample_aspect_ratio= set vdisplay_aspect_ratio= set vpix_fmt= set vlevel= set vcolor_range= set vcolor_space= set vcolor_transfer= set vcolor_primaries= set vr_frame_rate= set vavg_frame_rate= set vside_data_type= set vmax_content= set vmax_average= set vside_data_type= set vred_x= set vred_y= set vgreen_x= set vgreen_y= set vblue_x= set vblue_y= set vwhite_point_x= set vwhite_point_y= set vmin_luminance= set vmax_luminance= @echo off for /f "tokens=1,2 delims==" %%a in (' find "=" ^< "%ffprobe_inputfile%" ') do ( set "var=" for %%c in (%%~a) do set "var=!var!,%%~c" set var=!var:~1! set "val=" for %%d in (%%~b) do set "val=!val!,%%~d" set val=!val:~1! REM @echo on REM echo .!var!.=.!val!. IF "!var!" == "width" set v!var!=!val! IF "!var!" == "height" set v!var!=!val! IF "!var!" == "coded_width" set v!var!=!val! IF "!var!" == "coded_height" set v!var!=!val! IF "!var!" == "has_b_frames" set v!var!=!val! IF "!var!" == "sample_aspect_ratio" set v!var!=!val! IF "!var!" == "display_aspect_ratio" set v!var!=!val! IF "!var!" == "pix_fmt" set v!var!=!val! IF "!var!" == "level" set v!var!=!val! IF "!var!" == "color_range" set v!var!=!val! IF "!var!" == "color_space" set v!var!=!val! IF "!var!" == "color_transfer" set v!var!=!val! IF "!var!" == "color_primaries" set v!var!=!val! IF "!var!" == "r_frame_rate" set v!var!=!val! IF "!var!" == "avg_frame_rate" set v!var!=!val! IF "!var!" == "max_content" set v!var!=!val! IF "!var!" == "max_average" set v!var!=!val! IF "!var!" == "side_data_type" set v!var!=!val! IF "!var!" == "red_x" set v!var!=!val! IF "!var!" == "red_y" set v!var!=!val! IF "!var!" == "green_x" set v!var!=!val! IF "!var!" == "green_y" set v!var!=!val! IF "!var!" == "blue_x" set v!var!=!val! IF "!var!" == "blue_y" set v!var!=!val! IF "!var!" == "white_point_x" set v!var!=!val! IF "!var!" == "white_point_y" set v!var!=!val! IF "!var!" == "min_luminance" set v!var!=!val! IF "!var!" == "max_luminance" set v!var!=!val! REM @echo off ) REM split off trailing "/" etc from some of them for /f "tokens=1,2 delims=/" %%a in ("%vwidth%") do (set vwidth=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vheight%") do (set vheight=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcoded_width%") do (set vcoded_width=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcoded_height%") do (set vcoded_height=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vhas_b_frames%") do (set vhas_b_frames=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vsample_aspect_ratio%") do (set vsample_aspect_ratio=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vdisplay_aspect_ratio%") do (set vdisplay_aspect_ratio=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vpix_fmt%") do (set vpix_fmt=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vlevel%") do (set vlevel=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_range%") do (set vcolor_range=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_space%") do (set vcolor_space=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_transfer%") do (set vcolor_transfer=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vcolor_primaries%") do (set vcolor_primaries=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vr_frame_rate%") do (set vr_frame_rate=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vavg_frame_rate%") do (set vavg_frame_rate=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_content%") do (set vmax_content=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_average%") do (set vmax_average=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vside_data_type%") do (set vside_data_type=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vred_x%") do (set vred_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vred_y%") do (set vred_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vgreen_x%") do (set vgreen_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vgreen_y%") do (set vgreen_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vblue_x%") do (set vblue_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vblue_y%") do (set vblue_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vwhite_point_x%") do (set vwhite_point_x=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vwhite_point_y%") do (set vwhite_point_y=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmin_luminance%") do (set vmin_luminance=%%a) for /f "tokens=1,2 delims=/" %%a in ("%vmax_luminance%") do (set vmax_luminance=%%a) REM not transforms REM IF /I "%vcolor_range%" == "tv" set vcolor_range=limited REM IF /I NOT "%vcolor_range%" == "limited" set vcolor_range=full REM echo vwidth=%vwidth% echo vheight=%vheight% echo vcoded_width=%vcoded_width% echo vcoded_height=%vcoded_height% echo vhas_b_frames=%vhas_b_frames% echo vsample_aspect_ratio=%vsample_aspect_ratio% echo vdisplay_aspect_ratio=%vdisplay_aspect_ratio% echo vpix_fmt=%vpix_fmt% echo vlevel=%vlevel% echo vcolor_range=%vcolor_range% echo vcolor_space=%vcolor_space% echo vcolor_transfer=%vcolor_transfer% echo vcolor_primaries=%vcolor_primaries% echo vr_frame_rate=%vr_frame_rate% echo vavg_frame_rate=%vavg_frame_rate% echo vmax_content=%vmax_content% echo vmax_average=%vmax_average% echo vside_data_type=%vside_data_type% echo vred_x=%vred_x% echo vred_y=%vred_y% echo vgreen_x=%vgreen_x% echo vgreen_y=%vgreen_y% echo vblue_x=%vblue_x% echo vblue_y=%vblue_y% echo vwhite_point_x=%vwhite_point_x% echo vwhite_point_y=%vwhite_point_y% echo vmin_luminance=%vmin_luminance% echo vmax_luminance=%vmax_luminance% rem @ECHO ON set ffpreset=medium "%ffmpeg_x64%" -hide_banner -i "%~1" -an -c:v libx265 -pix_fmt "%vpix_fmt%" -preset %ffpreset% -color_trc %vcolor_transfer% -color_primaries %vcolor_primaries% -colorspace %vcolor_space% -color_range %vcolor_range% -x265-params "profile=main10:level-idc=5.1:crf=15:no-open-gop=1:aq-mode=1:range=%vcolor_range%:colorprim=%vcolor_primaries%:transfer=%vcolor_transfer%:colormatrix=%vcolor_space%:master-display=G(%vgreen_x%,%vgreen_y%)B(%vblue_x%,%blue_y%)R(%vred_x%,%vred_y%)WP(%vwhite_point_x%,%vwhite_point_y%)L(%vmax_luminance%,%vmin_luminance%):max-cll=%vmax_content%,%vmax_average%:hdr" -profile:v main10 -level:v 5.1 -crf 15 -movflags faststart -f mp4 -y "%outputwebm%" "%ffprobe_x64%" -prefix -unit -show_streams -report -i "%outputwebm%" > "%outputwebm%.ffprobe.log" 2>&1 "%ffmpeg_x64%" -hide_banner -i "%~1" -an -c:v libx265 -pix_fmt "%vpix_fmt%" -preset %ffpreset% -color_trc %vcolor_transfer% -color_primaries %vcolor_primaries% -colorspace %vcolor_space% -color_range %vcolor_range% -x265-params "profile=main10:level-idc=5.1:crf=15:no-open-gop=1:aq-mode=1:range=%vcolor_range%:colorprim=%vcolor_primaries%:transfer=%vcolor_transfer%:colormatrix=%vcolor_space%:master-display=G(%vgreen_x%,%vgreen_y%)B(%vblue_x%,%blue_y%)R(%vred_x%,%vred_y%)WP(%vwhite_point_x%,%vwhite_point_y%)L(%vmax_luminance%,%vmin_luminance%):max-cll=%vmax_content%,%vmax_average%:hdr" -profile:v main10 -level:v 5.1 -crf 15 -movflags faststart -f mp4 -y "%outputmp4%" "%ffprobe_x64%" -prefix -unit -show_streams -report -i "%outputmp4%" > "%outputmp4%.ffprobe.log" 2>&1 pause exit Last edited by hydra3333; 14th February 2018 at 11:05. |
![]() |
![]() |
![]() |
#17 | Link |
Registered User
Join Date: Oct 2009
Location: crow-land
Posts: 540
|
Seeking advice about the error below piping 4k hdr from ffmpeg.exe into x265.exe (where the video characteristics are not known in advance, they are deduced from parsing output from ffprobe).
Code:
G:\HDTV\0nvencc\hdr>"C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\ffmpeg.exe" -i "G:\HDTV\0nvencc\hdr\3.Real_4K_HDR_60fps_-_Wipe_of_SDR_vs_HDR_UHD_Chromecast_Ultra.webm" -an -strict -1 -pix_fmt yuv420p10le -f yuv4mpegpipe - | "C:\SOFTWARE\ffmpeg\0-homebuilt-x64\built_for_generic_opencl\x64_10bit\x265.exe" --input - --y4m --output "G:\HDTV\0nvencc\hdr\3.Real_4K_HDR_60fps_-_Wipe_of_SDR_vs_HDR_UHD_Chromecast_Ultra.webm.h265" --preset medium --output-depth 10 --profile main10 --level-idc 5.1 --open-gop --crf 18 --crf-min 5 --crf-max 40 --aq-mode 1 --range tv --colorprim bt2020 --transfer smpte2084 --colormatrix bt2020nc --master-display "G(13247,34499)B(7500,2999)R(34000,15999)WP(15634,16449)L(40000000,99)" --max-cll="4000,300" --hdr --info --hrd 1>>"G:\HDTV\0nvencc\hdr\3.Real_4K_HDR_60fps_-_Wipe_of_SDR_vs_HDR_UHD_Chromecast_Ultra.webm.log" 2>&1 ffmpeg version N-89991-gdd5208aaf5 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 7.3.0 (GCC) configuration: <snip too long> libavutil 56. 7.100 / 56. 7.100 libavcodec 58. 10.100 / 58. 10.100 libavformat 58. 9.100 / 58. 9.100 libavdevice 58. 1.100 / 58. 1.100 libavfilter 7. 11.101 / 7. 11.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 0.101 / 5. 0.101 libswresample 3. 0.101 / 3. 0.101 libpostproc 55. 0.100 / 55. 0.100 Input #0, matroska,webm, from 'G:\HDTV\0nvencc\hdr\3.Real_4K_HDR_60fps_-_Wipe_of_SDR_vs_HDR_UHD_Chromecast_Ultra.webm': Metadata: encoder : google Duration: 00:02:36.06, start: 0.000000, bitrate: 16895 kb/s Stream #0:0(eng): Video: vp9 (Profile 2), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 1k tbn, 1k tbc (default) Side data: Content Light Level Metadata, MaxCLL=4000, MaxFALL=300 Mastering Display Metadata, has_primaries:1 has_luminance:1 r(0.6800,0.3200) g(0.2649,0.6900) b(0.1500 0.0600) wp(0.3127, 0.3290) min_luminance=0.009900, max_luminance=4000.000000 Stream mapping: Stream #0:0 -> #0:0 (vp9 (native) -> wrapped_avframe (native)) Press [q] to stop, [?] for help [yuv4mpegpipe @ 000001b3a4a0cf40] Warning: generating non standard YUV stream. Mjpegtools will not work. Output #0, yuv4mpegpipe, to 'pipe:': Metadata: encoder : Lavf58.9.100 Stream #0:0(eng): Video: wrapped_avframe, yuv420p10le, 3840x2160 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 59.94 fps, 59.94 tbn, 59.94 tbc (default) Metadata: encoder : Lavc58.10.100 wrapped_avframe Side data: Content Light Level Metadata, MaxCLL=4000, MaxFALL=300 Mastering Display Metadata, has_primaries:1 has_luminance:1 r(0.6800,0.3200) g(0.2649,0.6900) b(0.1500 0.0600) wp(0.3127, 0.3290) min_luminance=0.009900, max_luminance=4000.000000 av_interleaved_write_frame(): Invalid argument Error writing trailer of pipe:: Invalid argument frame= 1 fps=0.0 q=-0.0 Lsize= 24300kB time=00:00:00.01 bitrate=11932275.5kbits/s speed=0.17x video:1kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4642301.000000% Conversion failed! |
![]() |
![]() |
![]() |
#19 | Link |
ffx264/ffhevc author
Join Date: May 2007
Location: Belgium
Posts: 1,782
|
you have --max-cll="4000,300"
shouldn't it be --max-cll "4000,300" ? without the equal sign?
__________________
TV: Samsung 50" QE50Q60T AVR: Yamaha RX-V481 5.1 CD Player: Yamaha CD-S300 DAB+ Tuner: Yamaha T-D500 BD Player: Samsung UBD-M8500 UHD Speakers: Klipsch 5.1 Reference Phono: Audio-Technica AT-LP120XUSB |
![]() |
![]() |
![]() |
Thread Tools | Search this Thread |
Display Modes | |
|
|