强制h264_nvenc时,FFmpeg无法转换webm文件


2

我一直在以下环境工作。

==> Ubuntu 16.04.3

==> FFmpeg:3.4.2

- 配置: - prefix = / usr / local / ffmpeg_new / --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags = -I / usr / local / cuda / include --extra-ldflags = -L / usr / local / cuda / lib64 --enable-libvpx --enable-libvorbis --enable-libfreetype

==> Cuda 9.1.85

==> GPU:GeForce GTX 1080ti

我的目的是通过GPU源加速视频修改,因为我的媒体服务器上存在高速率流量。

以下是我的流程的主要步骤:

1.来电的分割视频和音频。

时间ffmpeg -y -i 230087_caller.webm -vn -ab 256 230087_caller.wav

2.被叫分割的视频和音频

时间ffmpeg -y -i 230087_callee.webm -vn -ab 256 230087_callee.wav

3.Mux原始来电视频与被叫方音频存储对话。

time ffmpeg -y -i 230087_caller.webm -i 230087_callee.wav -filter_complex'[0:a] aformat = sample_fmts = fltp:sample_rates = 44100:channel_layouts = stereo,volume = 0.5 [a1]; [1:A] aformat = sample_fmts = fltp:sample_rates = 44100:channel_layouts =立体声,体积= 0.5 [A2]; [A1] [A2] amerge,锅=立体声| C0

4.将时间字体文件添加到caller_temp文件中,该文件失败并出现以下错误。

time ffmpeg -y -i caller_temp.webm -vf drawtext = fontfile = / usr / share / fonts / truetype / dejavu / DejaVuSans-Bold.ttf:x = 8:y = 8:fontsize = 16:fontcolor = yellow @ 1: expansion = strftime:basetime = 1518172680000000:text ='%Y-%m-%d%H-%M-%S'-strict -2 -shortest -c:a libvorbis -c:v h264_nvenc final_font_test.webm

[webm @ 0x29e8540] WebM仅支持VP8或VP9视频以及Vorbis或Opus音频和WebVTT字幕。 av_interleaved_write_frame():参数无效 编写output_temwp.webm的预告片时出错:参数无效

==================================

以下是我的webm文件的详细信息:

流#0:0(eng):视频:vp8,yuv420p,640x480,SAR 1:1 DAR 4:3,27.58 tbr,1k tbn,1k tbc(默认) 元数据: 标题:视频 流#0:1(eng):音频:opus,48000 Hz,立体声,fltp(默认)

==================================

我看一下nvidia视频编码/解码支持矩阵,我的gpu似乎应该支持这种转换。

https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

=================================

但是,当我将输出文件格式更改为mp4 / avi / mpeg时,GPU可以毫无问题地使用。但是,webm对我们很重要,因为其他容器文件大小随着存储视角而变得有风险。

如果您分享您的意见和反馈以继续解决此问题,我将不胜感激。

提前致谢。 问候


您正在使用WebM容器不支持的H264编码器。您需要一个使用nvidia硬件的VP8 / 9编码器,但我没有看到可用的编码器。
Gyan

感谢Mulvya的反馈。关于哪些硬件可以支持vp8 / vp9编码而不是nvidia geforce,你有任何建议吗?或者您是否有任何建议可以使用现有GPU获得最佳输出性能,我的意思是不同类型的输出容器。
oktay eşgül

你可以保存到MKV。
Gyan

对支持GPU硬件的vp8 / vp9的任何评论。
oktay eşgül

在linux上,您可以使用VAAPI将英特尔GPU用于VP8 / 9。
Gyan

Answers:


0

根据 支持矩阵 NVENC仅支持AVCHD(H.264)和HEVC(H.265)。

在给定兼容GPU的情况下,您可以使用NVDEC解码VP8 / 9。

有关VP8 / VP9的硬件支持编码,请检查 FFMPEG中的VAAPI编码器支持

要对某些输入使用默认解码器,请将帧上传到VAAPI并使用VP9和默认设置进行编码:

ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf 'format=nv12,hwupload' -c:v vp9_vaapi output.webm

Mesa VAAPI驱动程序使用UVD(统一视频解码器)和VCE(视频编码引擎)硬件 在所有最近的AMD显卡和APU中都可以找到
der_michael

Quicksync支持 自阿波罗湖以来,自Braswell和VP9以来的VP8编码 ,见: trac.ffmpeg.org/wiki/Hardware/QuickSync
der_michael
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.