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 の追加で yadif_cuda, thumbnail_cuda フィルタが使える。現状 Zeranoe FFmpeg ではこれらのフィルタは使えない。

ffmpeg に nvenc(cuda)をインストールする

scale_npp リサイズ

iw, ih の書式が使えるので手軽に半分の解像度の指定ができる。

NVDEC を使う
ffmpeg -hwaccel cuvid -c:v h264_cuvid -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 cuvid -c:v h264_cuvid -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 cuvid -c:v mpeg2_cuvid -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 cuvid -c:v mpeg2_cuvid -i input -vf "yadif_cuda" -c:v hevc_nvenc -c:a copy output.mp4

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

オプション

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

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

transpose_npp 映像回転

NVDEC, NVENC を使う。NVENC を使わないとフィルタが使えないかもしれない。
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input -vf scale_npp=format=yuv420p,transpose_npp=cclock_flip -c:v h264_nvenc -c:a copy output.mp4

オプション

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 cuvid -c:v h264_cuvid -i input -vf "thumbnail_cuda=2,hwdownload,format=nv12" -vframes 1 output.jpg
ffmpeg -hwaccel cuvid -c:v h264_cuvid -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 -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 まで

コメントを残す

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

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