【问题标题】:FFMPEG with NVENC and DVB Subtitles and Overlay option带有 NVENC 和 DVB 字幕和叠加选项的 FFMPEG
【发布时间】:2019-11-04 04:08:07
【问题描述】:

您好,我有一些关于 NVENC、DVB 潜艇和叠加功能的问题。

我设法将 dvb 字幕刻录到输入视频,但我注意到这无法在 GPU 上完全执行,因为我使用的是 FFMPEG 的 Overlay 功能,这只能通过软件实现。

当前代码在应用覆盖之前将字幕缩放到 1920x1080。我注意到这比直接在视频上覆盖字幕使用更多的 CPU。问题是我想在中底叠加字幕。当前代码将字幕置于屏幕中心(有点烦人)

最终我想要一个完整的硬件转码选项(猜想这是不可能的?是吗)

我希望字幕在中间底部未缩放(CPU 负载减少 50%) 我希望字幕在中心底部缩放 50%(cpu 负载减少 30%),这样可以使字幕更好地阅读。

当前缩放到视频大小的字幕代码(如何进行完整的硬件转码?):

代码字幕未缩放但居中。如何更改为中底:

-hwaccel_device 4 -hwaccel cuvid -vcodec h264_cuvid -resize 1920x1080 -deint 2 -drop_second_field 1 -i 'http://stream' -filter_complex "[i:0x1389]hwdownload,format=nv12[base];[base][i:0x13ee]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2[v];[v]hwupload_cuda[k]" -map "[k]" -map i:0x1393 -acodec libfdk_aac -b:a 96k -c:v h264_nvenc -gpu 4 -preset llhq -vprofile high -rc:v vbr -qmin:v 26 -qmax:v 32 -b:v 4M -maxrate 4M -bufsize 8M -threads 0 -r 25 -g 100 -f flv 'rtmp://127.0.0.1:8001/input/nvenctest.stream'

ffprobe 输出:

[mpegts @ 0x3786200] sub2video: using 1920x1080 canvas
[Parsed_showinfo_0 @ 0x3785340] config in time_base: 1/90000, frame_rate: 0/1
[Parsed_showinfo_0 @ 0x3785340] config out time_base: 0/0, frame_rate: 0/0
No information about the input framerate is available. Falling back to a default value of 25fps for output stream #0:0. Use the -r option if you want a different framerate.
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf58.3.100
    Stream #0:0: Video: wrapped_avframe, bgra, 1920x1080, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc58.9.100 wrapped_avframe
[Parsed_showinfo_0 @ 0x3785340] n:   0 pts:      0 pts_time:0       pos:       -1 fmt:bgra sar:0/1 s:1920x1080 i:P iskey:1 type:? checksum:00000000 plane_checksum:[00000000] mean:[0] stdev:[0.0]
[Parsed_showinfo_0 @ 0x3785340] n:   1 pts:      0 pts_time:0       pos:       -1 fmt:bgra sar:0/1 s:1920x1080 i:P iskey:1 type:? checksum:00000000 plane_checksum:[00000000] mean:[0] stdev:[0.0]
[Parsed_showinfo_0 @ 0x3785340] n:   2 pts:  39599 pts_time:0.439989 pos:       -1 fmt:bgra sar:0/1 s:1920x1080 i:P iskey:1 type:? checksum:00000000 plane_checksum:[00000000] mean:[0] stdev:[0.0]
[graph 0 input from stream 0:2 @ 0x37c9340] Changing frame properties on the fly is not supported by all filters.
Segmentation fault (core dumped)

【问题讨论】:

    标签: ffmpeg nvenc


    【解决方案1】:

    要重新定位缩放的字幕,请提供 x 和 y 表达式:overlay=x=0:y=H/2

    要重新定位未缩放的字幕,overlay=x=(W-w)/2:y=H-h-20

    可以使用 OpenCL 叠加过滤器,但它不会提供太多好处,因为字幕流仍然需要在软件中解码,并且上传/下载步骤会占用资源。

    【讨论】:

    • 好的,我尝试了这两个命令。第一个命令将字幕放在左下角(未缩放)第二个命令缩放字幕并将其放在正确的位置,但我不希望它被缩放...
    • 第一个命令是用于缩放的字幕,而不是未缩放的。查看 Q 中的顺序。
    • 我没有添加任何比例过滤器。您的原始命令中存在或不存在。你需要检查你的命令。
    • ffprobe stream 2> textfile
    • 信息不足,请运行ffmpeg -i stream -filter_complex "[i:0x1196]showinfo" -t 10 -vn -an -sn -dn -f null - -report 并链接到报告。
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2017-10-22
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多