2

问题

  • 使用 hevc_nvenc 创建的文件不能在电视上播放。(三星智能电视,型号未知)与我的 ffmpeg 构建相关的内容如下。

FFmpeg 构建配置

$ 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_~”的原因如下。

  • 使用 nvidia 硬件加速器创建 bt2020 + smpte2084 视频后的 HDR 视频。(我正在学习制作HDR视频。我不确定这是否正确。)

如何使用 ffmpeg hevc_nvenc 制作视频并在电视上播放?


我做过的事情

这是我研究过的为什么它不起作用。- 标题信息未正确包含在生成的视频文件中。所以我用了一个叫nvhsp的程序在视频里面添加SEI和VUI信息。有关使用的命令和日志,请参见下文。

nvhsp是用于在原始视频中编写 VUI 和 SEI 位串的开源软件。nvhsp 链接

# 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_nvenc 编码视频时正常生成元数据。

  • 我想通过 hevc_nvenc 创建视频并在支持 10 位色深的智能电视上播放 HDR 视频。


额外的

  • ffmpeg hevc_nvenc 在生成的视频文件中不生成元数据是否正常?或者它是一个错误?

  • 请参考下图。(*'알 수 없음' 意思是“未知”)

    • 如果您需要更详细的文件信息,请查看此Gist 链接 (由 ffprobe 提供) hevc_nvenc 元数据
  • 但是,如果您在 libx265 中对文件进行编码,则会正确输入属性信息,如下所示。

    • 如果您需要更详细的文件信息,请查看此Gist Link libx265 元数据

但是,在使用 hevc_nvenc 时,所有信息都丢失了。

  • -show_streams -show_programs -show_format -show_data -of json -show_frames -show_log 56我在 ffprobe使用了选项
4

0 回答 0