m-ab-s/media-autobuild_suiteで調べたところ、–enable-ffnvcodec –enable-cuda –enable-cuvid –enable-nvenc –enable-nvdecを基本に、–enable-libnpp –enable-nonfreescale_npp, transpose_nppフィルタが使え、–enable-cuda-llvmの追加でscale_cuda、yadif_cuda、thumbnail_cuda、overlay_cudaフィルタが使える。

scale_cuda リサイズ

libnppを使わないリサイズフィルタ。

NVDECを使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_cuda=-2:720:interp_algo=lanczos,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDECを使わない。
ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -vf "hwupload_cuda,scale_cuda=-2:720:interp_algo=lanczos,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC、 NVENCを使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_cuda=-2:720:interp_algo=lanczos" -c:v hevc_nvenc -c:a copy output.mp4

公式ドキュメントはない。

オプション

  • w[string]
    出力解像度の横幅。-nが使える
    既定値:”iw”(入力横幅)
  • h[string]
    出力解像度の縦幅。-nが使える
    既定値:”ih”(入力縦幅)
  • interp_algo[int]
    アルゴリズムの指定
    • 1, nearest
    • 2, bilinear
    • 3, bicubic
    • 4, lanczos
  • passthrough[boolean]
    Do not process frames at all if parameters match
    既定値:1(有効)
  • force_original_aspect_ratio[int]
    アスペクト比を強制する
    • 0, disable:保持する。既定値
    • 1, decrease:切り捨て
    • 2, increase:繰り上げ
  • force_divisible_by[int]
    割り切れるピクセル数の倍数の指定。w、hの-nを優先する
    既定値:1
    範囲:1から256まで

scale_npp リサイズ

scale_cudaフィルタよりも使えるアルゴリズムが多い。同じアルゴリズムなら速度は変わらない。

NVDECを使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_npp=-2:720:interp_algo=lanczos,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDECを使わない。
ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -vf "hwupload_cuda,scale_npp=-2:720:interp_algo=lanczos,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

NVDEC、 NVENCを使う。
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_npp=-2:720:interp_algo=lanczos" -c:v hevc_nvenc -c:a copy output.mp4

公式ドキュメント:FFmpeg Filters Documentation : scale_npp

オプション

  • w[string]
    出力解像度の横幅。-nが使える
    既定値:”iw”(入力横幅)
  • h[string]
    出力解像度の縦幅。-nが使える
    既定値:”ih”(入力縦幅)
  • format[string]
    出力フォーマットの指定
    既定値:”same”
  • interp_algo[int]
    アルゴリズムの指定
      • 1, nn:Nearest Neighbour
      • 2, linear:Linear
      • 4, cubic:Cubic
      • 5, cubic2p_bspline:2-parameter Cubic (B=1, C=0)
      • 6, cubic2p_catmullrom:2-parameter Cubic (B=0, C=1/2)
      • 7, cubic2p_b05c03:2-parameter Cubic (B=1/2, C=3/10)
      • 8, super:Supersampling
      • 16, lanczos:Lanczos

    yadif_cuda インターレース解除

    フレームを間引くならフィルタの最後にdecimateフィルタを追加する。

    NVDECを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "yadif_cuda,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

    NVDECを使わない。
    ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -vf "hwupload_cuda,yadif_cuda,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

    NVDEC、 NVENCを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "yadif_cuda" -c:v hevc_nvenc -c:a copy output.mp4

    公式ドキュメント:FFmpeg Filters Documentation : yadif_cuda

    オプション

    yadifフィルタとオプション内容は同じ。

    • mode[int]
      モード指定
      • 0, send_frame
        2枚のフィールドから1枚のフレームを作る。既定値
      • 1, send_field
        1枚のフィールドから1枚のフレームを作る
        いわゆる片フィールド補間でフレーム数が2倍になる
      • 2, send_frame_nospatial
        0 に似ているが空間軸のチェックを行わない
      • 3, send_field_nospatial
        1 に似ているが空間軸のチェックを行わない
    • parity[int]
      フィールドタイプを指定する。自動で判断できなければ tff と判断する
      • 0, tff
        トップフィールドファースト
      • 1, bff
        ボトムフィールドファースト
      • -1, auto
        自動指定。既定値
    • deint[int]
      どのフレームを処理するか
      • 0, all
        すべて。既定値
      • 1, interlaced
        インターレースフラグがあるのだけ

    transpose_npp 映像回転

    NVDECを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_npp=format=yuv420p,transpose_npp=cclock_flip,hwdownload,format=yuv420p" -c:v libx264 -c:a copy output.mp4

    NVDEC、 NVENCを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "scale_npp=format=yuv420p,transpose_npp=cclock_flip" -c:v h264_nvenc -c:a copy output.mp4

    公式ドキュメント:FFmpeg Filters Documentation : transpose_npp

    オプション

    transposeフィルタとオプション内容は同じ。

    • dir[int]
      回転方向の設定
      • 0, cclock_flip
        反時計回りに90度回転し上下反転。既定値
      • 1, clock
        時計回りに90度回転
      • 2, cclock
        反時計回りに90度回転
      • 3, clock_flip
        時計回りに90度回転し上下反転
    • passthrough[int]
      フィルタを当てた後の縦と横の解像度を比較して回転をそのままにするかやめるかの設定
      • 0, none
        なにもしない。既定値
      • 1, landscape
        横解像度が縦解像度以上になるとフィルタの効果を打ち消す
      • 2, portrait
        縦解像度が横解像度以上になるとフィルタの結果そのまま返す

    thumbnail_cuda サムネイル出力

    一定フレーム間隔で画像出力するときに使うフィルタ。考えられる用途はライブ配信サイトで見られるサムネイルの定期更新やVODのシークサムネイルが考えられる。しかしこのフィルタは-filter_complexで複数出力すると出力しなかったりで扱いが難しい。もしかして GPU の制限かもしれない。

    NVDECを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -vf "thumbnail_cuda=2,hwdownload,format=nv12" -vframes 1 output.jpg
    ffmpeg -hwaccel cuvid -c:v h264_cuvid -hwaccel_output_format cuda -i input -vf "thumbnail_cuda=1800,hwdownload,format=nv12" -vsync 0 output-%03d.jpg

    NVDECを使わない。
    ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -vf "hwupload_cuda,thumbnail_cuda=2,hwdownload,format=nv12" -vframes 1 output.jpg
    ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -vf "hwupload_cuda,thumbnail_cuda=1800,hwdownload,format=nv12" -vsync 0 output-%03d.jpg

    ffmpeg ではデコードできない Animated WebPに出力。setptsフィルタの分数とthumbnail_cudaフィルタの値をそろえる。
    ffmpeg -hwaccel cuvid -c:v h264_cuvid -hwaccel_output_format cuda -i input -vf "setpts=(PTS-STARTPTS)/300,thumbnail_cuda=300,hwdownload,format=nv12" -vsync 0 -vframes 100 -loop 0 output.webp

    映像と音声の pts を扱う setpts, asetpts

    動画出力しながらサムネイルも出力。fpsフィルタの値の逆数とthumbnail_cudaフィルタの値の積(例では10×10)から、その秒間隔で画像出力する。
    ffmpeg -init_hw_device cuda=cuda -hwaccel cuda -filter_hw_device cuda -i input -c:v libx264 -c:a copy output.mp4 -vf "fps=1/10,format=nv12,hwupload_cuda,thumbnail_cuda=10,hwdownload,format=nv12" -vsync 0 output-%03d.jpg

    公式ドキュメントはない。

    オプション

    thumbnailフィルタと同じ。

    n[int]
    おおよそのフレーム間隔で出力する
    既定値:100
    範囲:2からINT_MAXまで

    overlay_cuda オーバーレイ

    NVDECを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input1 -hwaccel cuda -hwaccel_output_format cuda -i input2 -filter_complex "overlay_cuda=x=100:y=200,hwdownload,format=nv12" -c:v libx264 -c:a copy output.mp4

    NVDEC、 NVENCを使う。
    ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input1 -hwaccel cuda -hwaccel_output_format cuda -i input2 -filter_complex "overlay_cuda=x=100:y=200" -c:v hevc_nvenc -c:a copy output.mp4

    公式ドキュメント:FFmpeg Filters Documentation : overlay_cuda

    オプション

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)