我一直在以下环境下工作。
==>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