Проблема
- Файлы, созданные с помощью hevc_nven c, не воспроизводятся на телевизоре. (Samsung Smart TV, модель неизвестна) Ниже приведена моя сборка ffmpeg.
FFmpeg build conf
$ ffmpeg -buildconf
--enable-cuda
--enable-cuvid
--enable-nvenc
--enable-nonfree
--enable-libnpp
--extra-cflags=-I/path/cuda/include
--extra-ldflags=-L/path/cuda/lib64
--prefix=/prefix/ffmpeg_build
--pkg-config-flags=--static
--extra-libs='-lpthread -lm'
--extra-cflags=-I/prefix/ffmpeg_build/include
--extra-ldflags=-L/prefix/ffmpeg_build/lib
--enable-gpl
--enable-nonfree
--enable-version3
--disable-stripping
--enable-avisynth
--enable-libass
--enable-libfontconfig
--enable-libfreetype
--enable-libfribidi
--enable-libgme
--enable-libgsm
--enable-librubberband
--enable-libshine
--enable-libsnappy
--enable-libssh
--enable-libtwolame
--enable-libwavpack
--enable-libzvbi
--enable-openal
--enable-sdl2
--enable-libdrm
--enable-frei0r
--enable-ladspa
--enable-libpulse
--enable-libsoxr
--enable-libspeex
--enable-avfilter
--enable-postproc
--enable-pthreads
--enable-libfdk-aac
--enable-libmp3lame
--enable-libopus
--enable-libtheora
--enable-libvorbis
--enable-libvpx
--enable-libx264
--enable-libx265
--disable-ffplay
--enable-libopenjpeg
--enable-libwebp
--enable-libxvid
--enable-libvidstab
--enable-libopenh264
--enable-zlib
--enable-openssl
Команда ffmpeg
- Команда о кодировке FFmpeg
ffmpeg -ss 1800 -vsync 0 -hwaccel cuvid -hwaccel_device 0 \
-c:v h264_cuvid -i /data/input.mp4 -t 10 \
-filter_complex "\
[0:v]hwdownload,format=nv12,format=yuv420p,\
scale=iw*2:ih*2" -gpu 0 -c:v hevc_nvenc -pix_fmt yuv444p16le -preset slow -rc cbr_hq -b:v 5000k -maxrate 7000k -bufsize 1000k -acodec aac -ac 2 -dts_delta_threshold 1000 -ab 128k -flags global_header ./makevideo_nvenc_hevc.mp4
Полный журнал об этой команде - проверить этот полный журнал
Причина добавления " -color_ ~ "в команде выглядит следующим образом.
- HDR-видео после создания видео bt2020 + smpte2084 с использованием аппаратного ускорителя nvidia. (Я учусь снимать HDR-видео. Я не уверен, что это правильно.)
Как сделать видео с помощью ffmpeg hevc_nven c и воспроизвести его по телевизору?
То, что я сделал
Вот что я исследовал, почему это не работает. - Информация заголовка неправильно включена в итоговый видеофайл. Поэтому я использовал программу nvhsp для добавления информации SEI и VUI в видео. Ниже приведены используемые команды и журналы.
nvhsp
- открытый исходный код для записи битовых строк VUI и SEI в необработанном видео. nvhsp link
# make rawvideo for nvhsp
$ ffmpeg -vsync 0 -hwaccel cuvid -hwaccel_device 0 -c:v h264_cuvid \
-i /data/input.mp4 -t 10 \
-filter_complex "[0:v]hwdownload,format=nv12,\
format=yuv420p,scale=iw*2:ih*2" \
-gpu 0 -c:v hevc_nvenc -f rawvideo output_for_nvhsp.265
# use nvhsp
$ python nvhsp.py ./output_for_nvhsp.265 -colorprim bt2020 \
-transfer smpte-st-2084 -colormatrix bt2020nc \
-maxcll "1000,300" -videoformat ntsc -full_range tv \
-masterdisplay "G (13250,34500) B (7500,3000 ) R (34000,16000) WP (15635,16450) L (10000000,1)" \
./after_nvhsp_proc_output.265
Parsing the infile:
==========================
Prepending SEI data
Starting new SEI NALu ...
SEI message with MaxCLL = 1000 and MaxFall = 300 created in SEI NAL
SEI message Mastering Display Data G (13250,34500) B (7500,3000) R (34000,16000) WP (15635,16450) L (10000000,1) created in SEI NAL
Looking for SPS ......... [232, 22703552]
SPS_Nals_addresses [232, 22703552]
SPS NAL Size 488
Starting reading SPS NAL contents
Reading of SPS NAL finished. Read 448 of SPS NALu data.
Making modified SPS NALu ...
Made modified SPS NALu-OK
New SEI prepended
Writing new stream ...
Progress: 100%
=====================
Done!
File nvhsp_after_output.mp4 created.
# after process
$ ffmpeg -y -f rawvideo -r 25 -s 3840x2160 -pix_fmt yuv444p16le -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -color_range tv -i ./1/after_nvhsp_proc_output.265 -vcodec copy ./1/result.mp4 -hide_banner
Truncating packet of size 49766400 to 3260044
[rawvideo @ 0x40a6400] Estimating duration from bitrate, this may be inaccurate
Input #0, rawvideo, from './1/nvhsp_after_output.265':
Duration: N/A, start: 0.000000, bitrate: 9953280 kb/s
Stream #0:0: Video: rawvideo (Y3[0][16] / 0x10003359), yuv444p16le(tv, bt2020nc/bt2020/smpte2084), 3840x2160, 9953280 kb/s, 25 tbr, 25 tbn, 25 tbc
[mp4 @ 0x40b0440] Could not find tag for codec rawvideo in stream #0, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Last message repeated 1 times
Цель
Я хочу генерировать метаданные в обычном режиме при кодировании видео через hevc_nven c.
Я хочу создать видео через hevc_nven c и воспроизводить HDR-видео на Smart TV с поддержкой глубины цвета 10 бит.
Дополнительно
Это нормально для ffmpeg hevc_nven c, чтобы не генерировать метаданные в результирующем видеофайле? или это ошибка?
Пожалуйста, обратитесь к изображению ниже. (* '알 수 없음' означает 'неизвестно')
- , если вам нужна более подробная информация о файле, проверьте это Gist Link (от ffprobe)
Однако, если вы кодируете файл в libx265, информация об атрибутах вводится правильно, как показано ниже.
- , если вам нужно больше подробная информация о файле, проверьте это Gist Link
Однако при использовании hevc_nven c вся информация отсутствует.
- я использовал опцию
-show_streams -show_programs -show_format -show_data -of json -show_frames -show_log 56
в ffprobe