タグ別アーカイブ: encode

APNG をループ出力する

Using ffmpeg to create looping apng – Stack Overflow より、アニメGIF なら loop でループできるのに APNG ではこのオプションではループできないので plays オプションを使う。このオプションはループ回数を指定する。ただし -1 を指定して無限ループは出来ないので大きい値を指定する。

ss で開始秒、t で動画時間を指定する
ffmpeg -ss 10 -i input.mp4 -plays 10 -t 1 -vf setpts=PTS-STARTPTS output.apng

【APNG】ブロマガのサムネイルを動かす方法
ffmpeg で アニメーションWebP(Animated WebP)を作る
ffmpeg で 256色を最適化する

ffmpeg でグレースケールを扱う

フィルタでグレースケールを扱うには大まかに YUV の Y(輝度) を取り出す方法(フォーマットは YUV)と、グレーにフォーマット変換(フォーマットは GRAY)する方法の2通りがある。一般的に前者はリミテッドレンジになるので 16 から 235 の範囲に収まるが処理速度は速い。フルレンジの Y を取り出すには format=yuvj420p でフォーマット変換を行う。一方の後者はフォーマット変換を挟むので処理は遅いが 0 から 255 までのフルレンジを扱える。

extractplanes YUV の Y を取り出す(format=yuv)
-vf extractplanes=y

hue(format=yuv) で彩度を 0 にする方法
-vf hue=s=0

YUV の Y だけそのままに UV を 128 に変換する lutyuv(format=yuv)
-vf lutyuv=val:128:128

グレーにフォーマット変換する方法
-vf format=gray

グレースケール(format=gray)値を確認する
-vf datascope

グレースケール(format=gray)で動画出力するにはエンコーダに ffv1 を使う
ffmpeg -i input -vf format=gray -vcodec ffv1 output.mkv

個別チャンネルの値を映像の場所毎に確認できる datascope

関連記事
各映像チャンネルを分離する extractplanes
Windows の ffmpeg で生放送する方法 : lutyuv

ffmpeg で Twitter に投稿できる PNG に変換する

普通の PNG で投稿しても画質の悪い JPEG に変換されるのでこれを透過PNG で投稿することで PNG のまま投稿できる。

コマンド例

コマンドの説明
nullsrc:映像のテストソース。テストソースの中では一番負荷が軽い
scale2ref:映像フィルタ。2入力して、相手側の解像度に合わせることができる
lutrgb:映像フィルタ。特定のRGBに色を変更する
overlay:映像フィルタ。2映像を重ねる
alphamerge:映像フィルタ。2入力して、2入力のグレースケール具合で1入力を透過させる
palettegen:映像フィルタ。最大256色のパレットを作る
paletteuse:映像フィルタ。パレットから元映像を減色する
続きを読む ffmpeg で Twitter に投稿できる PNG に変換する

H.264/AVC でシークしやすい中間出力ファイルに変換する

適宜音声フォーマットでコピーできない場合はそれに変える。
-qp 0 は可逆圧縮、-g 1 は全フレームが I-frame になりシークバーが動かしやすくなる。

出力は YUV444
ffmpeg -i input -vcodec libx264 -qp 0 -g 1 -tune fastdecode -acodec copy output.mp4

RGB 出力の場合
ffmpeg -i input -vcodec libx264rgb -qp 0 -g 1 -tune fastdecode -acodec copy output.mp4

qsv 対応の ffmpeg をつくる

hardware acceleration の Wiki:HWAccelIntro – FFmpeg

関連記事
ffmpeg に nvenc(cuda) をインストールする

追記 2015年5月31日
Zeranoe build が ffmpeg-20150525-git-e48a9ac から対応した。
libmfx Added | Zeranoe FFmpeg

ffmpeg-20150610-git-913685f を最後に非対応になっているので必要な場合は直接保存する。理由は XP 対応 のため。
Zeranoe FFmpeg – Builds win32
Zeranoe FFmpeg – Builds win64

その後2016年3月1日より XP のサポートを終了し配布を再開した。
Windows XP Support And Intel QSV – Zeranoe FFmpeg
続きを読む qsv 対応の ffmpeg をつくる

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

ffmpeg 2.6 から使える nvenc をコンパイルする方法。別途ヘッダファイルが必要なので nvidia の公式サイトから最新の SDK をダウンロードして nvEncodeAPI.h を include ディレクトリにコピーしておく。ffmpeg 3.2 から nvEncodeAPI.h を include ディレクトリにコピーする必要がなくなった。

FFmpeg / libav | NVIDIA Developer
NVIDIA VIDEO CODEC SDK | NVIDIA Developer

hardware acceleration の Wiki:HWAccelIntro – FFmpeg
qsv 対応の ffmpeg をつくる

追記 2017年5月10日
SDK 8.0.14 にアップデートされた。新機能は

  • 10/12-bit decoding support with HEVC/VP9, enabling end-to-end HDR transcoding
  • Improved quality via weighted prediction
  • Support for OpenGL inputs (Linux only)

ドライバーのバージョンは
NVIDIA Linux display driver 378.13 以上
NVIDIA Windows display driver 378.66 以上

compat/nvenc: bump nvEncodeAPI.h to Video Codec SDK 8.0.14 – ffmpeg.git/commitdiff
avcodec/nvenc: add weighted prediction support – ffmpeg.git/commitdiff
avcodec/nvenc: add fractional CQ support – ffmpeg.git/commitdiff
続きを読む ffmpeg に nvenc(cuda) をインストールする