Quantcast
Channel: FFmpeg | ニコラボ
Viewing all articles
Browse latest Browse all 310

Vulkan を使ったハードウェアアクセレーションフィルタのまとめ

$
0
0

ffmpeg 4.3 から使える予定のフィルタ。GPU を取り付けていると使える Vulkan フィルタのまとめ。現状ビルドスクリプトは対応していない。フィルタの使い方の公式ドキュメントはまだない。

CUDA を使ったハードウェアアクセレーションフィルタのまとめ

以下のコマンドでGPUが対応しているか調べられる。
ffmpeg -hide_banner -v verbose -init_hw_device vulkan

scale_vulkan リサイズ

iw, ih の書式が使えるので手軽に半分の解像度の指定ができる。ただし片方に -n が使えないのでアスペクト比に合わせたリサイズはできない。

NVDEC を使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,scale_vulkan=1280:720,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,scale_vulkan=1280:720,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC を使わない。
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,scale_vulkan=1280:720,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,scale_vulkan=1280:720,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

リサイズする scale
Zライブラリを使ったリサイズフィルタ zscale

オプション

  • w[string]
    出力解像度の横幅。-n が使えない
    既定値:”iw”(入力横幅)
  • h[string]
    出力解像度の縦幅。-n が使えない
    既定値:”ih”(入力縦幅)
  • scaler[int]
    • 0, bilinear:Bilinear interpolation (fastest)。既定値
    • 1, nearest:Nearest (useful for pixel art)
  • format[string]
    出力フォーマットの指定
  • out_range[int]
    • 1, limited, mpeg, tv
    • 2, full, jpeg, pc

overlay_vulkan オーバーレイ

NVDEC を使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input1.mp4 -hwaccel cuda -hwaccel_output_format cuda -i input2.mp4 -filter_complex "[0:v]hwdownload,format=nv12,hwupload[0v];[1:v]hwdownload,format=nv12,hwupload[1v];[0v][1v]overlay_vulkan=x=100:y=200,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input1.mp4 -hwaccel cuda -hwaccel_output_format cuda -i input2.mp4 -filter_complex "[0:v]hwdownload,format=nv12,hwupload[0v];[1:v]hwdownload,format=nv12,hwupload[1v];[0v][1v]overlay_vulkan=x=100:y=200,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC を使わない。
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]format=nv12,hwupload[0v];[1:v]format=nv12,hwupload[1v];[0v][1v]overlay_vulkan=x=100:y=200,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input1.mp4 -i input2.mp4 -filter_complex "[0:v]format=nv12,hwupload[0v];[1:v]format=nv12,hwupload[1v];[0v][1v]overlay_vulkan=x=100:y=200,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

映像の上に映像をのせる overlay

オプション

  • x[string]
    オーバーレイする映像の左上の横座標。W, H, t, n などは使えない
  • y[string]
    オーバーレイする映像の左上の縦座標。W, H, t, n などは使えない

avgblur_vulkan ブラー

NVDEC を使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,avgblur_vulkan=sizeX=3:planes=7:sizeY=7,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,avgblur_vulkan=sizeX=3:planes=7:sizeY=7,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC を使わない。
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,avgblur_vulkan=sizeX=3:planes=7:sizeY=7,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,avgblur_vulkan=sizeX=3:planes=7:sizeY=7,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

平均ブラー avgblur

オプション

  • sizeX[int]
    横軸のカーネルのサイズ。大きい値ほどぼける
    既定値:3
    範囲:1 から 32 まで
  • planes[int]
    フィルタを当てるチャンネル指定
    詳しくは ffmpeg について | チャンネルの順番と注意点 を参照
    既定値:15(すべてのチャンネル)
    範囲:0 から 15 まで
  • sizeY[int]
    縦軸のカーネルのサイズ
    既定値:3
    範囲:1 から 32 まで

chromaber_vulkan 色収差

NVDEC を使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,chromaber_vulkan=dist_x=5:dist_y=5,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "hwdownload,format=nv12,hwupload,chromaber_vulkan=dist_x=5:dist_y=5,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC を使わない。
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,chromaber_vulkan=dist_x=5:dist_y=5,hwdownload" -c:v h264_qsv -c:a copy output.mp4
ffmpeg -init_hw_device vulkan=vk:0 -filter_hw_device vk -i input.mp4 -vf "format=nv12,hwupload,chromaber_vulkan=dist_x=5:dist_y=5,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

オプション

彩度を上下左右にずらす。

  • dist_x[float]
    プラスで右に、マイナスで左にずれる
    既定値:0
    範囲:-10 から 10 まで
  • dist_y[float]
    プラスで下に、マイナスで上にずれる
    既定値:0
    範囲:-10 から 10 まで

Viewing all articles
Browse latest Browse all 310

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>