當 h264_nvenc 強制時 FFmpeg 無法轉換 webm 檔案

當 h264_nvenc 強制時 FFmpeg 無法轉換 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.sample_rates=44100:channel_layouts=stereo,volume=0. [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=立體聲,音量=0.5[a2]; [a1][a2]合併,平移=立體聲|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:擴充=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 可以毫無問題地使用。 。

如果您分享您的意見和回饋以繼續處理此問題,我將不勝感激。

提前致謝。問候

答案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

相關內容