FFmpeg 在强制使用 h264_nvenc 时无法转换 webm 文件

FFmpeg 在强制使用 h264_nvenc 时无法转换 webm 文件

我一直在以下环境下工作。

==>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. 将原始呼叫者视频与被叫者音频混合以存储对话。

时间 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=stereo,volume=0.5[a2];[a1][a2]amerge,pan=stereo|c0

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

时间 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 对我们很重要,因为从存储角度来看,其他容器文件大小会变得有风险。

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

提前致谢。问候

答案1

根据支持矩阵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

相关内容