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

色の情報の扱いについて

$
0
0

いわゆるcolor primaries、color transfer characteristics、color spaceの扱いについて。解像度とフレームレートに関わるPAL、NTSC。解像度に関わるSD、HD、UHD。輝度のダイナミックレンジに関わるSDR、HDRなどの組み合わせで最適なオプションを指定する。これらのオプションはYUVの映像をRGBのモニターに正しく、指定した設定で表示するものである。それぞれの設定の効果については正確なことが言えないのでここでは触れない。

それぞれのわかりやすい説明。
よくわかる、HDR徹底解説! HDRとは | EIZO株式会社

ffmpeg Documentation : Codec Optionsの下の方にある。それぞれ入力、出力オプションになるので入力ファイルの前、入力ファイルの後ろ(出力ファイルの前)に指定する。

基本コマンド

これらの情報はshowinfoフィルタで表示される。
ffplay -i input -vf showinfo

フレーム、サンプル単位で情報を得るshowinfo、ashowinfo

1フレーム毎に以下のようにコンソールに表示される。以下は抜粋したもの。

color_range:tv color_space:bt709 color_primaries:bt709 color_trc:bt709

ffprobeで調べるなら以下のようになる。
ffprobe -v error -f lavfi -i movie=input.mp4,showinfo -select_streams v:0 -show_frames -show_entries frame=color_range,color_space,color_primaries,color_transfer -read_intervals %+#1

ffprobe の使い方

ウェブカメラやテストソース、画像などを読み込んだときや未設定の動画を未設定でエンコードすると色の情報はunknownで不明になる。入力時点で未設定のときには入力オプションで指定し、エンコードして最終的にデータを書き込むなら出力オプションで指定する。出力オプションの代わりにビットストリームフィルタで書き込むこともできる。

ビットストリームフィルタはH.264、HEVC、VP9、AV1で指定できる。H.264、HEVCはQSVの記事でVP9はその該当記事で、AV1はまだ記事を書いていない。
QSV 対応の ffmpeg をつくる
VP9(libvpx-vp9)のエンコード設定について

一般的なHD動画に入力オプションと出力オプションをすべて指定した例。
ffmpeg -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -i input -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range tv -c:a copy output

オプション

  • -color_primaries
    • bt709
    • bt470m
    • bt470bg
    • smpte170m
    • smpte240m
    • film
    • bt2020
    • smpte428, smpte428_1
    • smpte431
    • smpte432
    • jedec-p22
  • -color_trc
    • bt709
    • gamma22
    • gamma28
    • smpte170m
    • smpte240m
    • linear
    • log, log100
    • log_sqrt, log316
    • iec61966_2_4, iec61966-2-4
    • bt1361, bt1361e
    • iec61966_2_1, iec61966-2-1
    • bt2020_10, bt2020_10bit
    • bt2020_12, bt2020_12bit
    • smpte2084:HDR
    • smpte428, smpte428_1
    • arib-std-b67:signal HLG
  • -colorspace
    • rgb
    • bt709
    • fcc
    • bt470bg
    • smpte170m
    • smpte240m
    • ycocg
    • bt2020nc, bt2020_ncl
    • bt2020c, bt2020_cl
    • smpte2085
  • -color_range
    • tv, mpeg:リミテッドレンジ
    • pc, jpeg:フルレンジ

オプション設定の目安

解像度とフレームレート、ダイナミックレンジの目安。解像度は縦のピクセル数。

  • SD:720未満
    PAL:bt470bg、bt601
    NTSC:bt470m、fcc、smpte170m、bt601
  • HD:720以上2160未満
    PAL:smpte240m、bt709
    NTSC:smpte240m、bt709
  • UHD:2160以上
    PAL:bt2020
    NTSC:bt2020
  • ダイナミックレンジ
    SDR:bt601、bt709、bt2020
    HDR:bt2020、bt2100、smpte2084

リンクのまとめ


色空間変換するcolorspace

$
0
0

カラースペースの変換を行うcolorspaceフィルタの使い方。このフィルタは高ビット深度の映像にも対応している。

基本コマンド

BT.709に統一して変換。
ffmpeg -i input -vf colorspace=all=bt709 -c:a copy output

公式Wiki:<colorspace – FFmpeg
公式ドキュメント:FFmpeg Filters Documentation : colorspace

オプション

入力した映像のshowinfoフィルタで表示されるcolor_range、color_space、color_primaries、color_trcが不明(unknown)だとエラーになり変換されない。不明のときはiall、ispace、irange、iprimaries、itrcで指定するか、入力オプションで個別に指定する。出力カラーレンジと出力カラーフォーマットは未指定だと入力値と同じ値になり変換されない。

  • all[int]
    出力時のcolor_space、color_primaries、color_trcを同時に変換する
    • 1, bt470m
    • 2, bt470bg
    • 3, bt601-6-525
    • 4, bt601-6-625
    • 5, bt709
    • 6, smpte170m
    • 7, smpte240m
    • 8, bt2020
  • space[int]
    出力時のカラースペースcolor_spaceの変換
    • 0, gbr
    • 1, 709, bt709
    • 4, fcc
    • 5, 470bg:BT.470BG、またはBT.601-6 625
    • 6, smpte170m:SMPTE-170M、またはBT.601-6 525
    • 7, smpte240m
    • 8, ycgco
    • 9, 2020_ncl, bt2020nc
  • range[int]
    出力時のカラーレンジcolor_rangeの変換
    • 1, tv, mpeg:リミテッドレンジ
    • 2, pc, jpg:フルレンジ
  • primaries[int]
    出力時のカラープライマリーcolor_primariesの変換
    • 1, bt709
    • 4, bt470m
    • 5, bt470bg
    • 6, smpte170m
    • 7, smpte240m
    • 8, film
    • 9, bt2020
    • 10, smpte428
    • 11, smpte431
    • 12, smpte432
    • 22, jedec-p22, ebu3213
  • trc[int]
    出力時のトランスファーcolor_trcの変換
    • 1, bt709
    • 4, bt470m, gamma22
    • 5, bt470bg, gamma28
    • 6, smpte170m
    • 7, smpte240m
    • 11, xvycc, iec61966-2-4
    • 13, srgb, iec61966-2-1
    • 14, 2020_10, bt2020-10:BT.2020 10ビット深度
    • 15, 2020_12, bt2020-12:BT.2020 12ビット深度
  • format[int]
    出力時のピクセルフォーマットとビット深度の指定
    • 0, yuv420p
    • 64, yuv420p10
    • 125, yuv420p12
    • 4, yuv422p
    • 66, yuv422p10
    • 129, yuv422p12
    • 5, yuv444p
    • 70, yuv444p10
    • 133, yuv444p12
  • fast[boolean]
    色度とガンマ補正を考慮しない
    既定値:0(考慮する)
    範囲:0と1
  • dither[int]
    ディザーモードの指定
    • 0, none:既定値
    • 1, fsb:Floyd-Steinberg dithering
  • wpadapt[int]
    ホワイトポイント適応法の指定
    • 0, bradford:Bradford whitepoint adaptation。既定値
    • 1, vonkries:von Kries whitepoint adaptation
    • 2, identity:identity whitepoint adaptation (i.e. no whitepoint adaptation)
  • iall[int]
    入力時のcolor_space、color_primaries、color_trcを同時に指定する。allと指定できる値は同じ
  • ispace[int]
    入力時のカラースペースの指定。spaceと指定できる値は同じ
  • irange[int]
    入力時のカラーレンジの指定。rangeと指定できる値は同じ
  • iprimaries[int]
    入力時のカラープライマリーの指定。primariesと指定できる値は同じ
  • itrc[int]
    入力時のトランスファーの指定。trcと指定できる値は同じ

色の変換色を変更するcolormatrix

$
0
0

YUVの変換式の変換を行うcolormatrixフィルタの使い方。このフィルタは8ビット深度の映像限定である。

基本コマンド

BT.470-2 System B,GからBT.709に変換。
ffmpeg -i input -vf colormatrix=bt470bg:bt709 -c:a copy output

公式Wiki:<colorspace – FFmpeg
公式ドキュメント:FFmpeg Filters Documentation : colormatrix

オプション

  • src[int]
    入力した映像の変換式の指定。unknownではなくて入力値があると-1の自動指定や省略も可能
    • -1:入力値と同じ。既定値
    • 0, bt709
    • 1, fcc
    • 2, bt601, bt470, bt470bg, smpte170m
    • 3, smpte240m
    • 4, bt2020
  • dst[int]
    出力した映像の変換式の指定。必須項目
    • 0, bt709
    • 1, fcc
    • 2, bt601, bt470, bt470bg, smpte170m
    • 3, smpte240m
    • 4, bt2020

カラーレンジを記述するsetrange

$
0
0

入力した映像のカラーレンジを記述するsetrangeフィルタの使い方。 入力映像は変更しないがフィルタやエンコーダの処理方法に影響を与える。

汎用に出力時の色情報を記述するsetparamsフィルタもある。
フィールドタイプや色域を記述するsetparams

基本コマンド

このフィルタはフィルタ内でしか反映されないので実際の出力内容に反映させるには出力オプションに-color_rangeを指定する。
ffmpeg -i input -vf setrange=tv -color_range tv -c:a copy output

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

オプション

range[int]

  • -1, auto:入力値と同じ。既定値
  • 0, unspecified, unknown:未定義、不明
  • 1, limited, tv, mpeg:リミテッドレンジ
  • 2, full, pc, jpeg:フルレンジ

ビットストリームフィルタのまとめ

$
0
0

H.264、HEVC、VP9、AV1、Proresのビットストリームフィルタで色関係のまとめ。各コーデックで出力したときにcolor_range、color_primaries、color_trc、color_spaceの情報を書き込む。

オプションでの色の設定。
色の情報の扱いについて

H.264、HEVC

以下のコマンドですべての内容を調べられるが設定値までは載っていない。H.264、HEVCもほとんど同じ。
ffmpeg -h bsf=h264_metadata
ffmpeg -h bsf=hevc_metadata

セクションのE.2.1と、テーブルE-3、E-4、E-5を参照:
H.264 : Advanced video coding for generic audiovisual services
FFmpeg Bitstream Filters Documentation : h264_metadata

セクションのE.3.1と、テーブルE.3、E.4、E.5を参照:
H.265 : High efficiency video coding
FFmpeg Bitstream Filters Documentation : hevc_metadata

ffmpeg -i input -c:v libx264 -bsf:v h264_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 -c:a copy output.mp4
ffmpeg -i input -c:v libx265 -bsf:v hevc_metadata=colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 -c:a copy output.mp4

  • colour_primaries[int]
    • 1:BT.709
    • 4:BT.470 System M
    • 5:BT.601 PAL
    • 6:BT.601 NTSC
    • 7:SMPTE 240M
    • 8:Generic film
    • 9:BT.2020
    • 10:XYZ, smpte428, smpte428_1
    • 11:DCI P3, smpte431
    • 12:Display P3, smpte432
  • transfer_characteristics[int]
    • 1:BT.709
    • 4:BT.470 System M
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:Linear
    • 9:Logarithmic (100:1)
    • 10:Logarithmic (316.22777:1)
    • 11:xvYCC
    • 12:BT.1361
    • 13:sRGB/sYCC
    • 14:BT.2020 (10-bit)
    • 15:BT.2020 (12-bit)
    • 16:PQ
    • 17:SMPTE
    • 18:HLG
  • matrix_coefficients[int]
    • 1:BT.709
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:YCgCo
    • 9:BT.2020 non-constant
    • 10:BT.2020 constant
    • 11:Y’D’zD’x
    • 12:Chromaticity-derived non-constant
    • 13:Chromaticity-derived constant
    • 14:ICtCp

VP9

RGBに設定されているフレームは、暗黙のうちにフルレンジに設定され、プロファイルの0と2とは互換性がない。
ffmpeg -h bsf=vp9_metadata

FFmpeg Bitstream Filters Documentation : vp9_metadata

ffmpeg -i input -c:v libvpx-vp9 -crf 30 -b:v 0 -qmin 3 -qmax 40 -bsf:v vp9_metadata=color_space=bt709:color_range=tv -c:a libopus -b:a 96k output.webm

VP9(libvpx-vp9)のエンコード設定について

  • color_space
    • unknown
    • bt601
    • bt709
    • smpte170
    • smpte240
    • bt2020
    • rgb
  • color_range
    • tv
    • pc

AV1

colorのスペルがH.264、HEVCのcolourでないことに注意。
ffmpeg -h bsf=av1_metadata

セクションの6.4.2を参照:
AV1 Bitstream & Decoding Process Specification : Color config semantics
FFmpeg Bitstream Filters Documentation : av1_metadata

Encode/AV1 – FFmpeg

ffmpeg -i input -c:v libaom-av1 -crf 30 -b:v 0 -strict experimental -bsf:v av1_metadata=color_primarie=1:transfer_characteristics=1:matrix_coefficients=1 -c:a copy output.mkv

  • color_primaries[int]
    • 1:BT.709
    • 4:BT.470 System M
    • 5:BT.601 PAL
    • 6:BT.601 NTSC
    • 7:SMPTE 240M
    • 8:Generic film
    • 9:BT.2020
    • 10:XYZ, smpte428, smpte428_1
    • 11:DCI P3, smpte431
    • 12:Display P3, smpte432
  • transfer_characteristics[int]
    • 1:BT.709
    • 4:BT.470 System M
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:Linear
    • 9:Logarithmic (100:1)
    • 10:Logarithmic (316.22777:1)
    • 11:xvYCC
    • 12:BT.1361
    • 13:sRGB/sYCC
    • 14:BT.2020 (10-bit)
    • 15:BT.2020 (12-bit)
    • 16:PQ
    • 17:SMPTE
    • 18:HLG
  • matrix_coefficients[int]
    • 1:BT.709
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:YCgCo
    • 9:BT.2020 non-constant
    • 10:BT.2020 constant
    • 11:Y’D’zD’x
    • 12:Chromaticity-derived non-constant
    • 13:Chromaticity-derived constant
    • 14:ICtCp

Prores

Proresの承認関係の話:

Proresコーデックはprores、prores_aw、prores_ksの3種類あるが、prores、prores_ksはほとんど同じと考え、prores_ksだけ4444プロファイルに対応していて設定できる内容が多い。

エンコード設定の例。10ビット422で出力する。
ffmpeg -i input -c:v prores_ks -profile 4444xq -vendor Lavc -pix_fmt yuv422p10 -c:a copy prores_ks.mkv

ffmpeg -h encoder=prores_ks

  • -mbs_per_slice[int]
    既定値:8
    範囲:1から8まで
  • -profile[int]
    • -1, auto:既定値
    • 0, proxy:apco
    • 1, lt:apcs
    • 2, standard:acpn
    • 3, hq:apch
    • 4, 4444:ap4h
    • 5, 4444xq:ap4x
  • -vendor[string]
    vendor IDの指定。文字は4バイト限定。apl0にするとAppleエンコーダから出力したIDになる
    既定値:Lavc
  • -bits_per_mb[int]
    1つのマクロブロックあたりに求めるビット数
    既定値:0
    範囲:0から8192まで
  • -quant_mat[int]
    定量化マトリクスの指定
    • -1, auto:既定値
    • 0, proxy
    • 2, lt
    • 3, standard
    • 4, hq
    • 6, default
  • -alpha_bits[int]
    アルファチャンネルのビット数
    既定値:16
    範囲:0(無効)、8、16

ffmpeg -h bsf=prores_metadata

FFmpeg Bitstream Filters Documentation : prores_metadata

ffmpeg -i input -c:v prores_ks -profile 4444xq -vendor Lavc -pix_fmt yuv422p10 -bsf:v prores_metadata=color_primarie=1:color_trc=1:colorspace=1 -c:a copy prores_ks.mkv

  • color_primarie[int]
    • -1, auto:既定値
    • 0, unknown
    • 1, bt709
    • 5, bt470bg
    • 6, smpte170m
    • 9, bt2020
    • 11, smpte431
    • 12, smpte432
  • color_trc[int]
    • -1, auto:既定値
    • 0, unknown
    • 1, bt709
    • 16, smpte2084
    • 18, arib-std-b67
  • colorspace[int]
    • -1, auto:既定値
    • 0, unknown
    • 1, bt709
    • 6, smpte170m
    • 9, bt2020nc

色関係の設定のまとめ

$
0
0

ここ最近、連続投稿していた記事のまとめ。

入力オプションで色の情報を宣言し、出力オプションで出力設定を行う。
色の情報の扱いについて

色の出力設定を行う。上の出力オプションのほうが汎用性が高い。
ビットストリームフィルタのまとめ

フィルタ内で色の情報を宣言する。
カラーレンジを記述するsetrange
フィールドタイプや色域を記述するsetparams

フィルタ内で色の情報を変換する。
色空間変換するcolorspace
色の変換色を変更するcolormatrix

ハードウェア支援フィルタのまとめ

$
0
0

Windowsで使えるハードウェア支援フィルタ、QSV、CUDA、OpenCL、Vulkanのまとめ。それぞれ個別記事になっているのでフィルタの内容をグラフにまとめた。

OpenCLで検索

ネイティブフィルタの記事とハードウェア支援フィルタとの対応表。一部記事を書いてないので公式ドキュメントへリンク。

説明 QSV CUDA OpenCL Vulkan native filter 記事
色調整 ✔ hue hue_with_ffmpeg
インターレース解除 ✔ ✔ yadif yadif_with_ffmpeg
映像回転 ✔ transpose transpose_with_ffmpeg
エッジ検出 ✔ prewitt, roberts, sobel sobel_prewitt_with_ffmpeg
オーバーレイ ✔ ✔ ✔ overlay overlay_with_ffmpeg
切り取り ✔ crop crop_with_ffmpeg
クロマキー ✔ colorkey ffmpeg_with_chroma_key_by_colorkey
コンボリューション ✔ convolution convolution_with_ffmpeg
色収差 ✔ chromashift chromashift_with_ffmpeg
シャープ ✔ ✔ unsharp ffmpeg_with_unsharp
デノイズ ✔ ✔ nlmeans nlmeans_with_ffmpeg
手揺れ補正 ✔ deshake ffmpeg-filters.html#deshake
トーンマップ ✔ tonemap ffmpeg-filters.html#tonemap-1
フェード ✔ xfade xfade_with_ffmpeg
ブラー ✔ ✔ avgblur, boxblur avgblur_with_ffmpeg
余白追加 ✔ pad pad_with_ffmpeg
リサイズ ✔ ✔ ✔ scale scale_with_ffmpeg
連番画像 ✔ thumbnail blog-entry-1187.html

指定したチャンネルの周波数帯の音量を変えるequalizer

$
0
0

指定したチャンネルの周波数帯の音量を変えられるequalizerフィルタの使い方。チャンネル毎に設定でき、設定方法も直感的なので使いやすい。

基本コマンド

1000Hzで帯域幅200Hzに10dB減退させる。
ffmpeg -i input -af equalizer=f=1000:t=h:width=200:g=-10 -c:v copy output

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

オプション

  • frequency, f[double]
    フィルタを当てる周波数の中央の指定。単位はHz
    既定値:0
    範囲:0から999999まで
  • width_type, t[int]
    widthで指定する単位
    • 1, h:Hz
    • 2, o:octave
    • 3, q:Q-Factor。既定値
    • 4, s:slope
    • 5, k:kHz
  • width, w[double]
    frequencyの帯域幅の指定
    既定値:1
    範囲:0から99999まで
  • gain, g[double]
    ゲインの指定。単位はdB
    既定値:0
    範囲:-900から900まで
  • mix, m[double]
    数値が小さいほどフィルタの効果がなくなる
    既定値:1
    範囲:0から1まで
  • channels, c[channel_layout]
    フィルタを当てるチャンネルの指定
    16進数の指定方法よりレイアウト名の方がわかりやすい
    既定値:0xffffffffffffffff(すべてのチャンネル)
  • normalize, n[boolean]
    DC応答の大きさを0dBに正規化する
    既定値:0(正規化しない)

音声のチャンネルレイアウトを変えるchannelmap

$
0
0

ステレオの左右を入れ替えたり、3つの音声を合わせると2.1チャンネル、3チャンネル(前)、3チャンネル(後)など推定できないときにレイアウトを明示するのに使うchannelmapフィルタの使い方。

左右を入れ替えたり、混ぜたり音量を変えるpanフィルタや、複数ファイルを入力して複数チャンネルにするamergeフィルタがある。

各チャンネルの音声を合わせたり調整する pan
入力した音声ストリーム順にチャンネル配置する amerge

基本コマンド

左右の音声を入れ替える。
ffmpeg -i input -af "channelmap=map=FL-FR|FR-FL:channel_layout=stereo" -c:v copy output
ffplay -i input -af "channelmap=map=FL-FR|FR-FL:channel_layout=stereo"

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

オプション

チャンネル名やチャンネルレイアウトは公式ドキュメントを参照

  • map[string]
    現在の配置を左に、で続けて目的の配置先を指定し別のチャンネルには|で区切って指定する
    例:”map=FL-FR|FR-FL”
  • channel_layout[string]
    チャンネルレイアウトの指定

音量の統計を調べるvolumedetect

$
0
0

サンプル数と音量の根二乗平均、サンプル毎の最大値、最大値から上位千分の1によるヒストグラムの統計を調べるvolumedetectフィルタの使い方。オプション指定はない。

基本コマンド

ffmpeg -i input -af volumedetect -vn -f null -

ログ出力例。

n_samples: 19200000
mean_volume: -26.5 dB
max_volume: -8.1 dB
histogram_8db: 19
histogram_9db: 128
histogram_10db: 565
histogram_11db: 1812
histogram_12db: 5697
histogram_13db: 15192

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

Zeranoe ffmpeg、9月18日に閉鎖へ

$
0
0

FFmpeg Builds – Zeranoe

ffmpeg.zeranoe.com will close on Sep 18, 2020, and all builds will be removed. If you’re using Zeranoe FFmpeg Builds in your product, please ensure that you have a hosting strategy in place by the 18th. Thank you to everyone who supported the project along the way!

WindowsとmacOSのffmpegを配布しているffmpeg.zeranoe.comは過去のアーカイブも削除して2020年9月18日に閉鎖する。これに対して個人でffmpegを用意するにはビルドスクリプトを使う方法がある。

FFmpeg useful links : ffmpegより、

Target: Windows
Host: Windows native; MSYS2/MinGW
https://github.com/jb-alvarado/media-autobuild_suite

Target: Windows
Host: Linux cross-compile –or– Windows Cgywin
https://github.com/rdp/ffmpeg-windows-build-helpers

Target: OS X or Linux
Host: same as target OS
https://github.com/markus-perl/ffmpeg-build-script

一方で配布を受け継ぐ人も現れる。

ffmpeg.zeranoe.com will close on Sep 18, 2020 : ffmpegより、

If someone can provide hosting space, I can provide 64-bit static Windows builds twice a week, starting the 18th.

フィルタのコミッターで有名なGyan氏が配布場所の提供があれば18日から週に2回にWinodwsの64bit用の静的ビルドを配布できると。どれくらい帯域が必要だろうか。この界隈で外国にも利用者の多いrigaya氏のサイトを見るとdropboxとonedriveを併用している。Devの開発用と、Sharedの動的リンク、32bit用のffmpegは言及されていないので前もって保存しておくのがよさそう。

rigayaの日記兼メモ帳

The post Zeranoe ffmpeg、9月18日に閉鎖へ first appeared on ニコラボ.

技術書典9でFFmpegのオーディオフィルタ本が出ます

$
0
0

ブログではビデオフィルタばかり書いているが、今回はオーディオフィルタを使って音量の調整や、デノイズ、簡単な解析に特化した内容になる。前回は100ページを超える大作だったが、今回は30ページ、電子版は最後の白紙ページを除いた28ページになる。価格は電子版、物理本どちらも500円になり、電子版だけと、電子版と物理本のセットの2種類になる。電子版と物理本のセットは技術書典9開催期間中だけの販売となる。物理本は50部の予定なので売り切れたら終了、残ったらBOOTHでの委託販売も考えている。

2020年9月12日10時から販売開始予定。
FFmpegのオーディオフィルタの本:ニコラボ

同時に前回頒布したFFmpegの本も大きく改訂し、レイアウトや誤字脱字、内容の更新を行っている。前回はWordからPDF出力だったのを今回はVisual Studio CodeのプラグインからPDF出力に挑戦している。結果的に文章を書いて校正する作業効率は上がったが、最後のPDF出力で目次にページ番号がついてないのに気づくのが遅く、結果としてオーディオフィルタの本は目次にページ番号がなく、FFmpegの本の物理本は諦めることになった。

技術書典9開催期間中は改訂版のFFmpegの本を100円安く販売するのでこちらからお求めください。
FFmpeg の本:ニコラボ

前回頒布したFFmpegの本のサンプルを更新しているのでv2.0をご覧ください。BOOTH版は技術書典9が終了次第内容を更新する予定。
【サンプル】FFmpegの本【PDF】 – ニコラボの本屋 – BOOTH

2章の部分は前回のFFmpegの本と同じ内容になっている。

オーディオフィルタの本の目次
• 1. はじめに
o 1.1. この本の対象者
o 1.2. 日本語訳について
o 1.3. ファイル名について
o 1.4. 読む順番について
o 1.5. 扱わない、扱いが少ない内容
o 1.6. 免責事項
• 2. フィルタの書き方
o 2.1. エスケープ処理
o 2.2. 評価式
o 2.3. タイムライン編集
• 3. よく使うオーディオフィルタ
o 3.1. 音量関係のフィルタ
 3.1.1. 全体の音量を調整する
 3.1.2. ハイパスフィルタ
 3.1.3. ローパスフィルタ
 3.1.4. 任意の周波数帯の音量を変える
 3.1.5. の周波数帯に分けて音量を変える
 3.1.6. 音量を基準に別の音量に変える
 3.1.7. 聞き取りやすい音量に自動的に変える
 3.1.8. 目標のラウドネスレベルに音量を揃える
o 3.2. 解析関係のフィルタ
 3.2.1. 音量の統計を調べる
 3.2.2. 音量のダイナミックレンジを調べる
o 3.3. ノイズ低減関係のフィルタ
 3.3.1. FFTノイズ低減フィルタ
 3.3.2. nlmeansノイズ低減フィルタ
 3.3.3. RNNで学習したノイズ低減フィルタ
 3.3.4. 2つのファイルを参照しノイズをなくす
o 3.4. 無音関係のフィルタ
 3.4.1. 無音検出
 3.4.2. 無音削除
 3.4.3. 先頭に無音を挿入する
 3.4.4. 末尾に無音を挿入する
o 3.5. サンプリング周波数関係のフィルタ
 3.5.1. サンプリング周波数の変更
 3.5.2. ピッチの変更
• 4. 後書き
o 4.1. 著者説明
• 5. オーディオフィルタ一覧とブログ記事のリンク

2020年のコロナ禍で仕事の減少により現在求職中。
ロべルト(ニコラボ)に対する仕事依頼 – Google フォーム

The post 技術書典9でFFmpegのオーディオフィルタ本が出ます first appeared on ニコラボ.

FFmpegのオーディオフィルタの本を頒布した技術書典9を振り返る

$
0
0

前回参加記事
FFmpegの本を頒布した技術書典7を振り返る

告知記事
技術書典9でFFmpegのオーディオフィルタ本が出ます

サークルページ
ニコラボ | 技術書典

新刊。BOOTH版は目次の頭文字数字の項目を直している。
FFmpegのオーディオフィルタの本:ニコラボ | 技術書典
【PDF】FFmpegのオーディオフィルタの本 – ニコラボの本屋 – BOOTH

現在技術書典内では電子版と物理本は販売終了し、電子版は一時的に販売停止になっている。

既刊のFFmpegの本は技術書典7のときと同じように1500円で販売し、オーディオフィルタの本は、電子版は500円で、物理本とセットで1000円で販売した。価格については電子版の最低価格が0円か500円以上になっていたので500円に設定。物理本も同じ価格の500円に設定。結果はどうなったかというと、電子版だけとセットはおよそ3対1になった。物理本の価格が他の本と見比べる中で高く予想よりも売れなかった。他の人が販売している物理本はセットで無料になったり数百円程度で電子版と同じ価格はほとんどなかったように思う。そして物理本を刷らないサークルも多かった。

既刊。技術書典9のバージョンを追加した。購入者は再ダウンロードできる。
【PDF】FFmpegの本 – ニコラボの本屋 – BOOTH

物理本が思ったほど売れなかったので委託販売の数が多くなってしまったのと、長期間委託するのも気分が乗らなかったのでBOOTH委託を断念した。手売りできる時期が来たら持って行く予定。

The post FFmpegのオーディオフィルタの本を頒布した技術書典9を振り返る first appeared on ニコラボ.

ffmpegでBlackmagic Designの製品を扱う

$
0
0

保有しているIntensity Proをffmpegで入力したり、出力したりする。ずいぶん昔のハードウェアなのでキャプチャー解像度は1080p30まで。音声は6チャンネルのサラウンドも読み込める(実際に音が含まれているかは未確認)。接続方法にHDMIとコンポーネント端子、RCA端子(黄白赤)がある。解像度やフレームレート、インターレースなど対応内容に一致しないと扱えない。HDMI以外のアナログ入力はffmpegで扱う方法がよくわからなかった。OBSではアナログでも出力を480iに入力解像度を合わせれば表示できた。RCA端子(黄白赤)入力には8(緑)、14(白)、 15(赤)に接続。

現在のffmpegでは出力に使う–enable-decklinkをつけるには–enable-nonfreeも必要なので配布バイナリには含まれていない。用意するだけならmedia-autobuild_suiteを使うのが手軽。SDKの利用にm-ab-s / decklink-headers · GitLabを使っている。

扱う方法は映像と音声を合わせた–enable-decklink-f decklinkと、-f dshowの映像2種類Decklink Video Captureと、Blackmagic WDM Capture。音声2種類ライン入力 (Blackmagic Audio)Decklink Audio Captureがある。

まずはドライバを現在の最新版である、Desktop Video 11.6をインストールする。古いバージョンをインストールしていれば先にアンインストールする。

サポートセンター | Blackmagic Design

Nintendo SwitchをHDMIに入力し、HDMIの出力からPCモニターに接続したところ、入力映像をアクティブ、例えばffplayやffmpeg、OBSでデバイスを読み込むと入力と同時に出力も行う。

decklinkデバイスで使う

接続しているデバイス名を表示する。
ffmpeg -sinks decklink

Auto-detected sinks for decklink:
  30:00000000:001e0300 [Intensity Pro]

映像と音声が同時に入力できる。対応した映像のフォーマット一覧。-sinks decklinkで表示した内容を入力デバイスに指定する。これらに揃えた映像を入出力できる。
ffmpeg -f decklink -list_formats 1 -i "Intensity Pro"

Supported formats for 'Intensity Pro':
        format_code     description
        ntsc            720x486 at 30000/1001 fps (interlaced, lower field first)
        nt23            720x486 at 24000/1001 fps
        pal             720x576 at 25000/1000 fps (interlaced, upper field first)
        ntsp            720x486 at 60000/1001 fps
        palp            720x576 at 50000/1000 fps
        23ps            1920x1080 at 24000/1001 fps
        24ps            1920x1080 at 24000/1000 fps
        Hp25            1920x1080 at 25000/1000 fps
        Hp29            1920x1080 at 30000/1001 fps
        Hp30            1920x1080 at 30000/1000 fps
        Hi50            1920x1080 at 25000/1000 fps (interlaced, upper field first)
        Hi59            1920x1080 at 30000/1001 fps (interlaced, upper field first)
        Hi60            1920x1080 at 30000/1000 fps (interlaced, upper field first)
        hp50            1280x720 at 50000/1000 fps
        hp59            1280x720 at 60000/1001 fps
        hp60            1280x720 at 60000/1000 fps

接続した映像と-format_codeが一致しないとエラーになる。
ffmpeg -f decklink -format_code hp60 -i "Intensity Pro" output

出力ならピクセルフォーマットと解像度、フレームレートを揃える。以下テストソースを出力する例。
ffmpeg -re -f lavfi -i testsrc2=s=1280x720:r=60 -pix_fmt uyvy422 -format_code hp60 -f decklink "Intensity Pro"

それぞれ無圧縮データになり、音声のサンプリング周波数は48KHz。

Found Decklink mode 1280 x 720 with rate 60.00
Output #0, decklink, to 'Intensity Pro':
  Metadata:
    encoder         : Lavf58.62.100
    Stream #0:0: Video: wrapped_avframe, uyvy422(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 60 fps, 60
 tbn, 60 tbc
    Metadata:
      encoder         : Lavc58.111.101 wrapped_avframe
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
    Metadata:
      encoder         : Lavc58.111.101 pcm_s16le

入力オプション

ffmpeg -h demuxer=decklink

公式ドキュメント:FFmpeg Filters Documentation : Input Device decklink

  • -list_devices[int]
    decklinkデバイスで扱えるデバイス名の表示
    例:ffmpeg -list_devices 1 -f decklink -i “Intensity Pro”
  • -list_formats[int]
    decklinkデバイスで扱えるフォーマットの表示
    例:ffmpeg -f decklink -list_formats 1 -i “Intensity Pro”
  • -format_code[string]
    扱うフォーマットの指定。-list_formatsの一覧から選ぶ
  • -raw_format[int]
    扱うピクセルフォーマットの指定。ハードウェアが対応してないとエラーになる
    • auto:既定値
    • uyvy422
    • yuv422p10
    • argb
    • bgra
    • rgb10
  • -enable_klv[boolean]
  • -teletext_lines[int64]
  • -channels[int]
    音声チャンネルの指定。2、8、16しか選べない
    既定値:2
  • -duplex_mode[int]
  • -timecode_format[int]
  • -video_input[int]
    映像入力のデバイス指定。通常は無指定でよい
    • 0, unset:既定値。複数接続しているときに指定する
    • 1, sdi
    • 2, hdmi
    • 3, optical_sdi
    • 4, component
    • 5, composite
    • 6, s_video
  • -audio_input[int]
    音声入力のデバイス指定。通常は無指定でよい
    • 0, unset:既定値。複数接続しているときに指定する
    • 1, embedded
    • 2, aes_ebu
    • 3, analog
    • 4, analog_xlr
    • 5, analog_rca
    • 6, microphone
  • -audio_pts[int]
  • -video_pts[int]
  • -draw_bars[boolean]
    入力信号を失ったらカラーバーを表示する
    既定値:1(表示する)
  • -queue_size[int64]
  • -audio_depth[int]
    音声のビット深度の指定
    既定値:16
    範囲:16と32
  • -decklink_copyts[boolean]
  • -timestamp_align[duration]
  • -wait_for_tc[boolean]

出力オプション

ffmpeg -h muxer=decklink

公式ドキュメント:FFmpeg Filters Documentation : Output Device decklink

  • -list_devices[int]
    decklinkデバイスで扱えるデバイス名の表示
    例:ffmpeg -list_devices 1 -f decklink -i “Intensity Pro”
  • -list_formats[int]
    decklinkデバイスで扱えるフォーマットの表示
    例:ffmpeg -f decklink -list_formats 1 -i “Intensity Pro”
  • -preroll[double]
    映像が表示するまでの遅延
    既定値:0.5
    範囲:0から5まで
  • -duplex_mode[int]
  • -timing_offset[int]

dshowデバイスで使う

映像と音声は別入力になる。こちらも対応フォーマットに揃えないと入出力できない。

扱えるデバイス名の取得。映像と音声ともに2種類あり扱える内容が少し異なる。
ffmpeg -f dshow -list_devices 1 -i dummy

DirectShow video devices (some may be both video and audio devices)
 "Blackmagic WDM Capture"
    Alternative name "@device_pnp_\\?\decklink#avstream#5&347363ba&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\decklinkcapture1"
 "Decklink Video Capture"
    Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{44A8B5C7-13B6-4211-BD40-35B629D9E6DF}"
DirectShow audio devices
 "ライン入力 (Blackmagic Audio)"
    Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\ライン入力 (Blackmagic Audio)"
 "Decklink Audio Capture"
    Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{AAA22F7E-5AA0-49D9-8C8D-B52B1AA92EB7}"

コマンド例。
ffmpeg rtbufsize 10MB -f dshow -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -channels 2 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -pix_fmt yuv420p output

-channels 6で5.1チャンネルサラウンドも入力できるが、3チャンネル以降の音がのってない。abitscopeフィルタで映像化している。
ffmpeg rtbufsize 10MB -f dshow -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -channels 6 -i video="Decklink Video Capture":audio="Decklink Audio Capture" -pix_fmt yuv420p -t 10 output.mp4
ffmpeg -i output.mp4 -filter_complex abitscope,realtime -f sdl -

各チャンネルの音声のビットスコープを映像化する abitscope

デバイス毎の扱えるフォーマットの表示。
ffmpeg -list_options true -f dshow -i video="Blackmagic WDM Capture"

DirectShow video device options (from video devices)
 Pin "Video Capture" (alternative pin name "0")
  pixel_format=uyvy422  min s=720x480 fps=23.976 max s=720x486 fps=23.976
  vcodec=v210  min s=720x480 fps=23.976 max s=720x486 fps=23.976
  pixel_format=uyvy422  min s=720x480 fps=29.97 max s=720x486 fps=29.9701
  vcodec=v210  min s=720x480 fps=29.97 max s=720x486 fps=29.9701
  pixel_format=uyvy422  min s=720x480 fps=59.9402 max s=720x486 fps=59.9402
  vcodec=v210  min s=720x480 fps=59.9402 max s=720x486 fps=59.9402
  pixel_format=uyvy422  min s=720x576 fps=25 max s=720x576 fps=25
  vcodec=v210  min s=720x576 fps=25 max s=720x576 fps=25
  pixel_format=uyvy422  min s=720x576 fps=50 max s=720x576 fps=50
  vcodec=v210  min s=720x576 fps=50 max s=720x576 fps=50
  pixel_format=uyvy422  min s=1280x720 fps=50 max s=1280x720 fps=50
  pixel_format=uyvy422  min s=1280x720 fps=59.9402 max s=1280x720 fps=59.9402
  pixel_format=uyvy422  min s=1280x720 fps=59.9999 max s=1280x720 fps=60.0002
  pixel_format=uyvy422  min s=1920x1080 fps=25 max s=1920x1080 fps=25
  pixel_format=uyvy422  min s=1920x1080 fps=29.97 max s=1920x1080 fps=29.9701
  pixel_format=uyvy422  min s=1920x1080 fps=30 max s=1920x1080 fps=30
  pixel_format=uyvy422  min s=1920x1080 fps=23.976 max s=1920x1080 fps=23.976
  pixel_format=uyvy422  min s=1920x1080 fps=24 max s=1920x1080 fps=24
 Pin "Audio Capture" (alternative pin name "1")

ffmpeg -list_options true -f dshow -i video="Decklink Video Capture"

DirectShow video device options (from video devices)
 Pin "Capture" (alternative pin name "1")
  pixel_format=uyvy422  min s=720x486 fps=29.97 max s=720x486 fps=29.97
  pixel_format=uyvy422  min s=720x486 fps=23.976 max s=720x486 fps=23.976
  pixel_format=uyvy422  min s=720x576 fps=25 max s=720x576 fps=25
  pixel_format=uyvy422  min s=720x486 fps=59.9402 max s=720x486 fps=59.9402
  pixel_format=uyvy422  min s=720x576 fps=50 max s=720x576 fps=50
  pixel_format=uyvy422  min s=1920x1080 fps=23.976 max s=1920x1080 fps=23.976
  pixel_format=uyvy422  min s=1920x1080 fps=24 max s=1920x1080 fps=24
  pixel_format=uyvy422  min s=1920x1080 fps=25 max s=1920x1080 fps=25
  pixel_format=uyvy422  min s=1920x1080 fps=29.97 max s=1920x1080 fps=29.97
  pixel_format=uyvy422  min s=1920x1080 fps=30 max s=1920x1080 fps=30
  pixel_format=uyvy422  min s=1280x720 fps=50 max s=1280x720 fps=50
  pixel_format=uyvy422  min s=1280x720 fps=59.9402 max s=1280x720 fps=59.9402
  pixel_format=uyvy422  min s=1280x720 fps=60.0002 max s=1280x720 fps=60.0002
video=Decklink Video Capture: Immediate exit requested

44.1KHzまでステレオだけの制限がある。
ffmpeg -list_options true -f dshow -i audio="ライン入力 (Blackmagic Audio)"

min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100

モノラルやサラウンドを入力するならこちら。48KHzしか選べない。
ffmpeg -list_options true -f dshow -i audio="Decklink Audio Capture"

DirectShow audio only device options (from audio devices)
 Pin "Capture" (alternative pin name "1")
  min ch=1 bits=16 rate= 48000 max ch=1 bits=16 rate= 48000
  min ch=2 bits=16 rate= 48000 max ch=2 bits=16 rate= 48000
  min ch=4 bits=16 rate= 48000 max ch=4 bits=16 rate= 48000
  min ch=6 bits=16 rate= 48000 max ch=6 bits=16 rate= 48000
  min ch=8 bits=16 rate= 48000 max ch=8 bits=16 rate= 48000
  min ch=10 bits=16 rate= 48000 max ch=10 bits=16 rate= 48000
  min ch=12 bits=16 rate= 48000 max ch=12 bits=16 rate= 48000
  min ch=16 bits=16 rate= 48000 max ch=16 bits=16 rate= 48000

オプション

dshowでよく使うオプション。

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

ffmpeg -h demuxer=dshow

すべて-list_optionsの一覧から選ぶ。

  • -video_size[image_size]
    解像度の指定
  • -pixel_format[pix_fmt]
    ピクセルフォーマットの指定
  • -framerate[string]
    フレームレートの指定
  • -sample_rate[int]
    サンプリング周波数の指定
  • -channels[int]
    音声チャンネル数の指定

The post ffmpegでBlackmagic Designの製品を扱う first appeared on ニコラボ.

千円HDMIキャプチャ、Y&H HDMIキャプチャカード

$
0
0

千円で有名になったHDMIキャプチャカードだが、複数の販売元では送料込みで700円を割り込んでいる。公式画像では「Shenzhen Yonghui Fashion Co., Ltd」の配送になるが、今回購入したのは「XBOW」から。「今すぐ買う」のボタンの下から選択できる。最初の頃に言われていた音声がおかしい問題は解決されて1280×720の60fpsのMJPGで取り込めて、手軽なHDMI出力の画面表示に使える。

Y&H HDMIキャプチャカード HD 1080P 録画 配信用、HDMI キャプチャー、ビデオキャプチャ DSLR ビデオカメラ ミラーレス Xbox 360 One PS4 Wii U Switch 対応 HDVC2(Amazonにリンクしています)

Y&H HDMIキャプチャカードのパッケージ

基本コマンド

ffmpegではdshowで扱える。以下のコマンドでデバイス名を取得する。映像と音声とそれぞれの代替名が表示される。
ffmpeg -list_devices true -f dshow -i dummy

"USB Video"
   Alternative name "@device_pnp_\\?\usb#vid_534d&pid_2109&mi_00#6&16c1d60c&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
"デジタル オーディオ インターフェイス (USB Digital Audio)"
   Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{265CAD41-EAB9-411E-B22A-0DBBA727C917}"

コマンド例。-vcodec mjpeg読み込みなのでJPG特有のノイズがある。
ffmpeg -rtbufsize 10MB -f dshow -video_size 1280x720 -framerate 60 -vcodec mjpeg -i video="USB Video":audio="デジタル オーディオ インターフェイス (USB Digital Audio)" -pix_fmt yuv420p output
ffplay -rtbufsize 10MB -f dshow -video_size 1280x720 -framerate 60 -vcodec mjpeg -i video="USB Video":audio="デジタル オーディオ インターフェイス (USB Digital Audio)"

無圧縮データを扱うなら-pixel_format yuyv422を指定する。解像度毎に扱えるフレームレート数の上限が異なる。
fffplay -rtbufsize 10MB -f dshow -video_size 1920x1080 -framerate 5 -pixel_format yuyv422 -i video="USB Video":audio="デジタル オーディオ インターフェイス (USB Digital Audio)"
fffplay -rtbufsize 10MB -f dshow -video_size 1280x720 -framerate 10 -pixel_format yuyv422 -i video="USB Video":audio="デジタル オーディオ インターフェイス (USB Digital Audio)"
ffplay -rtbufsize 10MB -f dshow -video_size 720x480 -framerate 30 -pixel_format yuyv422 -i video="USB Video":audio="デジタル オーディオ インターフェイス (USB Digital Audio)"

気になった点はffmpegやVLCで読み込むときは映像と音声はズレないが映像が送れて流れるので操作が必要な映像を見るには向かない。MPC-HCで読み込むときは音声が遅延しているが映像の遅延はない。オプションを開いて再生->キャプチャより、映像に「USB Video」、音声に「デジタル オーディオ インターフェイス (USB Digital Audio)」、地域に「81 – Japan – NTSC M J」をプルダウンから選び適用してプレイヤー画面左上の「デバイスを開く」。

MPC-HCの設定画面

OBSでは問題が無い。こちらは「オーディオの詳細プロバティ」から同期オフセットで遅らせることもできる。

OBSの設定画面

扱える解像度とフレームレートなどの情報

個別のデバイスで扱える内容を取得する。無圧縮のyuyv422はフレームレート上限が低くなる。mjpegで解像度1280×720より大きい値でもfps=60.0002になっているが扱えない。
ffmpeg -list_options true -f dshow -i video="USB Video"

  vcodec=mjpeg  min s=1920x1080 fps=10 max s=1920x1080 fps=60.0002
  vcodec=mjpeg  min s=1600x1200 fps=10 max s=1600x1200 fps=60.0002
  vcodec=mjpeg  min s=1360x768 fps=10 max s=1360x768 fps=60.0002
  vcodec=mjpeg  min s=1280x1024 fps=10 max s=1280x1024 fps=60.0002
  vcodec=mjpeg  min s=1280x960 fps=10 max s=1280x960 fps=60.0002
  vcodec=mjpeg  min s=1280x720 fps=10 max s=1280x720 fps=60.0002
  vcodec=mjpeg  min s=1024x768 fps=10 max s=1024x768 fps=60.0002
  vcodec=mjpeg  min s=800x600 fps=10 max s=800x600 fps=60.0002
  vcodec=mjpeg  min s=720x576 fps=10 max s=720x576 fps=60.0002
  vcodec=mjpeg  min s=720x480 fps=10 max s=720x480 fps=60.0002
  vcodec=mjpeg  min s=640x480 fps=10 max s=640x480 fps=60.0002
  pixel_format=yuyv422  min s=1920x1080 fps=5 max s=1920x1080 fps=5
  pixel_format=yuyv422  min s=1600x1200 fps=5 max s=1600x1200 fps=5
  pixel_format=yuyv422  min s=1360x768 fps=8 max s=1360x768 fps=8
  pixel_format=yuyv422  min s=1280x1024 fps=8 max s=1280x1024 fps=8
  pixel_format=yuyv422  min s=1280x960 fps=8 max s=1280x960 fps=8
  pixel_format=yuyv422  min s=1280x720 fps=10 max s=1280x720 fps=10
  pixel_format=yuyv422  min s=1024x768 fps=10 max s=1024x768 fps=10
  pixel_format=yuyv422  min s=800x600 fps=5 max s=800x600 fps=20
  pixel_format=yuyv422  min s=720x576 fps=5 max s=720x576 fps=25
  pixel_format=yuyv422  min s=720x480 fps=5 max s=720x480 fps=30
  pixel_format=yuyv422  min s=640x480 fps=5 max s=640x480 fps=30

ffmpeg -list_options true -f dshow -i audio="デジタル オーディオ インターフェイス (USB Digital Audio)"

 min ch=1 bits=8 rate= 11025 max ch=2 bits=16 rate= 44100

オプション

dshowでよく使うオプション。

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

ffmpeg -h demuxer=dshow

  • -video_size[image_size]
    解像度の指定
  • -pixel_format[pix_fmt]
    ピクセルフォーマットの指定
  • -framerate[string]
    フレームレートの指定
  • -sample_rate[int]
    サンプリング周波数の指定
  • -channels[int]
    音声チャンネル数の指定

The post 千円HDMIキャプチャ、Y&H HDMIキャプチャカード first appeared on ニコラボ.


2つの映像がどれだけ同じかを調べるidentity

$
0
0

ffmpeg 4.4から使える予定のフィルタ。2つの映像は同じ解像度、ピクセルフォーマットでなければならない。メタデータに出力できるのでffprobe連携しやすい。
ffprobe の使い方

framesyncに対応しているので片方の出力が終わったら終了するようにできる。
2ファイル入力するフィルタの挙動設定 framesync

基本コマンド

オプション設定はなし。出力値は0から1までの小数。
ffmpeg -i 調べたい動画 -i 元の動画 -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[0v];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[1v];[0v][1v]scale2ref=flags=bicubic,identity=shortest=1:repeatlast=0" -an -f null -

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

メタデータ出力内容。

  • lavfi.identity.identity.Y
  • lavfi.identity.identity.U
  • lavfi.identity.identity.V
  • lavfi.identity.identity_avg

ffprobe連携例。出力時間は-read_intervalsで指定。
ffprobe -f lavfi -i movie=enc.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[0];movie=orig.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[1];[0][1]scale2ref=flags=bicubic,msad -show_entries packet_tags=lavfi.identity.identity_avg -read_intervals "%1" > identity_avg.txt

The post 2つの映像がどれだけ同じかを調べるidentity first appeared on ニコラボ.

2つの映像の差の絶対値の合計平均を調べるmsad

$
0
0

ffmpeg 4.4から使える予定のフィルタ。2つの映像は同じ解像度、ピクセルフォーマットでなければならない。メタデータに出力できるのでffprobe連携しやすい。
ffprobe の使い方

framesyncに対応しているので片方の出力が終わったら終了するようにできる。
2ファイル入力するフィルタの挙動設定 framesync

基本コマンド

オプション設定はなし。出力値は0から1までの小数。
ffmpeg -i 調べたい動画 -i 元の動画 -filter_complex "[0:v]settb=1/AVTB,setpts=PTS-STARTPTS[0v];[1:v]settb=1/AVTB,setpts=PTS-STARTPTS[1v];[0v][1v]scale2ref=flags=bicubic,msad=shortest=1:repeatlast=0" -an -f null -

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

メタデータ出力内容。

  • lavfi.msad.msad.Y
  • lavfi.msad.msad.U
  • lavfi.msad.msad.V
  • lavfi.msad.msad_avg

ffprobe連携例。出力時間は-read_intervalsで指定。
ffprobe -f lavfi -i movie=enc.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[0];movie=orig.mp4,settb=1/AVTB,setpts=PTS-STARTPTS[1];[0][1]scale2ref=flags=bicubic,msad -show_entries packet_tags=lavfi.msad.msad_avg -read_intervals "%1" > msad_avg.txt

The post 2つの映像の差の絶対値の合計平均を調べるmsad first appeared on ニコラボ.

ffmpeg 4.4 リリース

$
0
0

およそ10か月ぶりの更新で2021年4月9日にffmpeg 4.4 “Rao“がリリースされた。今回のリリースはメジャーアップデートとなり、セキュリティ対応や4.3以降に追加された新機能の中からマスターにしか追加されていなかったフィルタやデコーダの新機能が全て取り込まれた。

git.videolan.org Git – ffmpeg.git/shortlog : n4.4

今回のリリースで気になった部分を列挙すると、次世代コーデックのハードウェアデコーダが多く追加されている。

  • AV1 encoding support SVT-AV1(-c:v libsvtav1)
  • Cineform HD encoder(-c:v cfhd)
  • DAT demuxer
  • aax demuxer
  • Cintel RAW decoder
  • NVDEC AV1 hwaccel
  • VDPAU accelerated HEVC 10/12bit decoding
  • VDPAU accelerated VP9 10/12bit decoding
  • DXVA2/D3D11VA hardware accelerated AV1 decoding
  • Dolby E parser
  • TTML subtitle encoder and muxer(拡張子は.ttml)
  • gophers protocol
  • RIST protocol via librist

新しく入ったフィルタ記事の更新がほとんどなくこの大型連休にかけて調べる予定。
2つの映像がどれだけ同じかを調べるidentity
2つの映像の差の絶対値の合計平均を調べるmsad

Window用のバイナリ。
FFmpeg Builds – gyan.dev
Releases · BtbN/FFmpeg-Builds

前回記事。
ffmpeg 4.3 リリース

リリースノート。
git.videolan.org Git – RELEASE_NOTES

4.3以降に取り込まれた機能の一覧。
git.videolan.org Git – Changelog

The post ffmpeg 4.4 リリース first appeared on ニコラボ.

クロミナンスノイズ低減フィルタchromanr

$
0
0

色彩のデノイズを行うchromanrフィルタの使い方。軽く当てると明るさ成分には影響なく、あまり色彩を失わずにデノイズできる。変化度合いのしきい値が指定できるので調整しやすい。タイムライン編集に対応。フレーム間の色彩デノイズ、いわゆるちらつき除去はhqdn3dフィルタを使う。

Windows の ffmpeg で生放送する方法 – 3次元デノイズフィルタ

基本コマンド

ffmpeg -i input -vf chromanr output
ffplay -i input -vf chromanr

効果を左半分に分割し、左にchromanrフィルタを当てて、右はオリジナルを表示し、bitplanenoiseフィルタでノイズを調べ、drawtextでノイズ係数を描写する。
ffplay -i input -vf split[2],chromanr=thres=30,bitplanenoise=7,crop=iw/2:ih:0:0,drawtext=y=20:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:line_spacing=2:textfile=bitplanenoise_drawtext.txt[l];[2]bitplanenoise=7,crop=iw/2:ih:0:0,drawtext=y=20:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:line_spacing=2:textfile=bitplanenoise_drawtext.txt[r];[l][r]hstack

上と同様に分割せずにYUVのUVだけを表示する。YUVの数値は読みにくいので描写しない。
ffplay -i input -vf split[2],chromanr=thres=30,bitplanenoise=7,extractplanes=u+v,vstack[l];[2]bitplanenoise=7,extractplanes=u+v,vstack[r];[l][r]hstack

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

オプション

  • thres[float]
    UVの値を平均するしきい値の設定。現在のYUVピクセル値の和と隣のYUVピクセル値の和の絶対値の差の合計がこのしきい値より低いときに平均する
    既定値:30
    範囲:1から200まで
  • sizew[int]
    平均に使う矩形の横方向の半径サイズの指定
    既定値:5
    範囲:1から100まで
  • sizeh[int]
    平均に使う矩形の縦方向の半径サイズの指定
    既定値:5
    範囲:1から100まで
  • stepw[int]
    平均に使う横方向のステップ指定
    既定値:1
    範囲:1から50まで
  • steph[int]
    平均に使う縦方向のステップ指定
    既定値:1
    範囲:1から50まで
  • threy[float]
    thresで使うYの最大許容値
    既定値:1
    範囲:1から200まで
  • threu[float]
    thresで使うUの最大許容値
    既定値:1
    範囲:1から200まで
  • threv[float]
    thresで使うVの最大許容値
    既定値:1
    範囲:1から200まで
The post クロミナンスノイズ低減フィルタchromanr first appeared on ニコラボ.

フィールドオーダーを変更するfieldorder

$
0
0

フィールドオーダーを書き換えて順番を入れ替えるfieldorderフィルタの使い方。フィールドオーダーの明示がなくフラグを立てるのはsetfieldフィルタ。

フィールドオーダーのフラグを建てるsetfield

基本コマンド

ffmpeg -i input -vf fieldorder=order=tff output
ffplay -i input -vf fieldorder

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

オプション

order[int]
フィールドオーダーの指定
bff, 0:ボトムフィールドファースト
tff, 1:トップフィールドファースト。既定値

The post フィールドオーダーを変更するfieldorder first appeared on ニコラボ.
Viewing all 310 articles
Browse latest View live


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