
私は以下の環境で作業してきました。
==> 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