Файлы, созданные с помощью "ffmpeg hevc_nven c", не воспроизводятся на телевизоре. (с видео кодом c SDK 9.1 от nvidia) - PullRequest
1 голос
/ 28 января 2020

Проблема

  • Файлы, созданные с помощью 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) hevc_nvenc metadata
  • Однако, если вы кодируете файл в libx265, информация об атрибутах вводится правильно, как показано ниже.

    • , если вам нужно больше подробная информация о файле, проверьте это Gist Link libx265 metadata

Однако при использовании hevc_nven c вся информация отсутствует.

  • я использовал опцию -show_streams -show_programs -show_format -show_data -of json -show_frames -show_log 56 в ffprobe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...