FFmpeg デバイス ドキュメント
1 概要
このドキュメントでは、libavdevice ライブラリが提供する入力デバイスと出力デバイスについて説明します。
2 デバイスオプション
libavdevice ライブラリは libavformat と同じインターフェースを提供します。すなわち、入力デバイスは demuxer と同様に、出力デバイスは muxer と同様に扱われ、インターフェースと汎用のデバイスオプションは libavformat が提供するものと同じである(ffmpeg-formats マニュアルを参照)。
加えて、各入力/出力デバイスはそのコンポーネント固有のいわゆるプライベートオプションをサポートすることがあります。
オプションは、FFmpeg ツールで -option value を指定するか、デバイスの AVFormatContext オプションに値を直接設定するか、プログラムから使う場合は libavutil/opt.h API を使って設定できます。
3 入力デバイス
入力デバイスとは、システムに接続されたマルチメディアデバイスから送られてくるデータへアクセスできるようにする、FFmpeg 内で構成された要素です。
FFmpeg のビルドを構成すると、サポートされる入力デバイスはすべて既定で有効になります。利用可能なものの一覧は configure オプション "–list-indevs" で表示できます。
すべての入力デバイスを無効にするには configure オプション "–disable-indevs" を使い、特定の入力デバイスを選択的に有効にするには "–enable-indev=INDEV" を、特定の入力デバイスを無効にするには "–disable-indev=INDEV" を使います。
ff* ツールの "-devices" オプションは、サポートされる入力デバイスの一覧を表示します。
以下、現在利用可能な入力デバイスを説明します。
3.1 alsa
ALSA(Advanced Linux Sound Architecture)入力デバイス。
構成時にこの入力デバイスを有効にするには、システムに libasound がインストールされている必要があります。
このデバイスを使うと ALSA デバイスからキャプチャできます。キャプチャするデバイスの名前は ALSA のカード識別子でなければなりません。
ALSA 識別子の構文は次のとおり。
hw:CARD[,DEV[,SUBDEV]]
ここで DEV と SUBDEV の要素は省略可能です。
3 つの引数(順に CARD,DEV,SUBDEV)は、カード番号または識別子、デバイス番号、サブデバイス番号を指定する(-1 は任意を意味する)。
現在システムが認識しているカードの一覧を確認するには、ファイル /proc/asound/cards と /proc/asound/devices を見ます。
たとえば、カード ID 0 の ALSA デバイスから ffmpeg でキャプチャするには、次のコマンドを実行します。
ffmpeg -f alsa -i hw:0 alsaout.wav
詳しくは次を参照: http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
3.1.1 オプション
sample_rate
サンプリングレートを Hz 単位で設定します。既定値は 48000。
channels
チャンネル数を設定します。既定値は 2。
3.2 android_camera
Android カメラ入力デバイス。
この入力デバイスは、API レベル 24 以上のデバイスで利用できる Android Camera2 NDK API を使用します。android_camera が利用可能かどうかは構成時に自動検出されます。
このデバイスを使うと、Camera2 NDK API に統合されている Android デバイス上のすべてのカメラからキャプチャできます。
利用可能なカメラは内部で列挙され、camera_index パラメータで選択できます。入力ファイル文字列は無視されます。
一般に、背面カメラはインデックス 0、前面カメラはインデックス 1 になります。
3.2.1 オプション
video_size
映像サイズを 640x480 や hd720 のような文字列で設定します。要求した映像サイズが利用できない場合や既定の場合は、Android が報告する最初の利用可能な構成にフォールバックします。
framerate
映像のフレームレートを設定します。要求したフレームレートが利用できない場合や既定(-1)の場合は、Android が報告する最初の利用可能な構成にフォールバックします。
camera_index
使用するカメラのインデックスを設定します。既定値は 0。
input_queue_size
バッファに保持するフレームの最大数を設定します。既定値は 5。
3.3 avfoundation
AVFoundation 入力デバイス。
AVFoundation は、OSX 10.7 以降および iOS でのストリームグラブに対して、Apple が現在推奨しているフレームワークです。
入力ファイル名は次の構文で指定しなければなりません。
-i "[[VIDEO]:[AUDIO]]"
最初の項目で映像入力を、後の項目で音声入力を選択します。ストリームは、デバイス一覧に表示されるデバイス名またはデバイスインデックスで指定する必要があります。あるいは、 -video_device_index
利用可能なデバイスはすべて -list_devices true で列挙でき、すべてのデバイス名と対応するインデックスを一覧表示します。
デバイス名には 2 つのエイリアスがあります。
default
対応する種別の AVFoundation 既定デバイスを選択します。
none
対応するメディア種別を記録しません。空のデバイス名またはインデックスを指定するのと同等です。
3.3.1 オプション
AVFoundation は次のオプションをサポートします。
-list_devices
true に設定すると、利用可能なすべての入力デバイスの一覧を、デバイス名とインデックスとともに表示します。
-video_device_index
映像デバイスをインデックスで指定します。入力ファイル名での指定より優先されます。
-audio_device_index
音声デバイスをインデックスで指定します。入力ファイル名での指定より優先されます。
-pixel_format
映像デバイスに特定の pixel format を使うよう要求します。指定したフォーマットがサポートされていない場合は、利用可能なフォーマットの一覧が表示され、その先頭が代わりに使われます。利用可能な pixel format は次のとおり: monob, rgb555be, rgb555le, rgb565be, rgb565le, rgb24, bgr24, 0rgb, bgr0, 0bgr, rgb0, bgr48be, uyvy422, yuva444p, yuva444p16le, yuv444p, yuv422p16, yuv422p10, yuv444p10, yuv420p, nv12, yuyv422, gray
-framerate
グラブのフレームレートを設定します。既定値は ntsc で、フレームレート 30000/1001 に相当します。
-video_size
映像のフレームサイズを設定します。
-capture_cursor
マウスポインタをキャプチャします。既定値は 0。
-capture_mouse_clicks
画面上のマウスクリックをキャプチャします。既定値は 0。
-capture_raw_data
デバイスの生データをキャプチャします。既定値は 0。このオプションを使うと、AVFoundation フレームワークに渡される元のデータを受け取ることがあります。たとえば、生 DV データをフレームワークに送る多重化デバイス(テープ式カムコーダなど)の場合、このオプションを false にすると、指定した pixel format で抽出された映像フレームだけがキャプチャされます。true にすると、生の DV ストリームをそのまま受け取ります。
3.3.2 例
-
AVFoundation がサポートするデバイスの一覧を表示して終了します:
$ ffmpeg -f avfoundation -list_devices true -i "" -
映像デバイス 0 と音声デバイス 0 から out.avi へ録画します:
$ ffmpeg -f avfoundation -i "0:0" out.avi -
映像デバイス 2 と音声デバイス 1 から out.avi へ録画します:
$ ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi -
システム既定の映像デバイスから pixel format bgr0 で録画し、音声は録音せずに out.avi へ書き出します:
$ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi -
適切な入力デバイスから生 DV データを録画し、出力を out.dv へ書き出します:
$ ffmpeg -f avfoundation -capture_raw_data true -i "zr100:none" out.dv
3.4 decklink
decklink 入力デバイスは、Blackmagic DeckLink デバイスのキャプチャ機能を提供します。
この入力デバイスを有効にするには、Blackmagic DeckLink SDK が必要であり、適切な --extra-cflags と --extra-ldflags を付けて構成する必要があります。Windows では、IDL ファイルを widl で処理する必要があります。
DeckLink はサポートするフォーマットに非常に厳しいです。入力の pixel format は raw_format で設定できます。フレームレートと映像サイズは、お使いのデバイスについて -list_formats 1 で確認する必要があります。音声のサンプリングレートは常に 48 kHz で、チャンネル数は 2、8、16 のいずれかになります。なお、すべての音声チャンネルは単一の音声トラックにまとめられます。
3.4.1 オプション
list_devices
true に設定すると、デバイスの一覧を表示して終了します。既定値は false。このオプションは非推奨であり、利用可能な入力デバイスを一覧表示するには ffmpeg の -sources オプションを使ってください。
list_formats
true に設定すると、サポートされるフォーマットの一覧を表示して終了します。既定値は false。
format_code
入力映像フォーマットを、指定した FourCC のフォーマットに設定します。お使いのデバイスでサポートされる値を確認するには list_formats を使います。'pal '(末尾にスペース)という FourCC があり、これは pal(3 文字)としても使えることに注意してください。既定の動作は、ハードウェアがサポートしていれば入力映像フォーマットの自動検出です。
raw_format
キャプチャする映像の pixel format を設定します。利用可能な値は次のとおり。
‘auto’
これが既定値であり、フォーマットの自動検出が使われる場合は 8-bit YUV 422 または 8-bit ARGB を、それ以外の場合は 8-bit YUV 422 を意味します。
‘uyvy422’
8-bit YUV 422。
‘yuv422p10’
10-bit YUV 422。
‘argb’
8-bit RGB。
‘bgra’
8-bit RGB。
‘rgb10’
10-bit RGB。
teletext_lines
非ゼロに設定すると、垂直補助データから追加のテレテキストストリームをキャプチャします。SD PAL(576i)と HD(1080i または 1080p)の両方のソースをサポートします。HD ソースの場合は OP47 パケットがデコードされます。
このオプションは、キャプチャする SD PAL VBI ラインのビットマスクで、具体的には 6 行目から 22 行目、および 318 行目から 335 行目を指す。6 行目がマスクの LSB です。選択したラインのうちテレテキスト情報を含まないものは無視されます。特別な定数 all を使えば可能なすべてのラインを選択でき、standard を使えば、一部の受信機と互換性のない 6、318、319 行目をスキップできます。
SD ソースの場合、ffmpeg は --enable-libzvbi を付けてコンパイルする必要があります。HD ソースの場合、古い(4K 以前の)DeckLink カードのモデルでは 10 bit モードでキャプチャしなければなりません。
channels
キャプチャする音声チャンネル数を指定します。‘2’、‘8’、‘16’ のいずれかでなければなりません。既定値は ‘2’。
duplex_mode
decklink デバイスの duplex/profile モードを設定します。‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ のいずれかでなければなりません。既定値は ‘unset’。
注意: DeckLink SDK 11.0 では、duplex プロパティが profile プロパティに置き換えられた。DeckLink Duo 2 と DeckLink Quad 2 では、同じコネクタを使う 2 つのサブデバイス間で 1 つの profile が共有されます。DeckLink 8K Pro では、4 つのサブデバイス全体で 1 つの profile が共有されます。したがって DeckLink 8K Pro は 4 つの profile をサポートします。
DeckLink 8K Pro(DeckLink SDK >= 11.0)で有効な profile モード: ‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 と DeckLink Duo 2 で有効な profile モード: ‘half’、‘full’
timecode_format
フレームおよび映像ストリームのメタデータに含めるタイムコードの種別。‘none’、‘rp188vitc’、‘rp188vitc2’、‘rp188ltc’、‘rp188hfr’、‘rp188any’、‘vitc’、‘vitc2’、‘serial’ のいずれかでなければなりません。既定値は ‘none’(含めません)。
50/60 fps のタイムコードを適切にサポートするため、‘rp188any’ で問い合わせるタイムコード種別の順序は、30 fps を超えるコンテンツでは HFR、VITC1、VITC2、LTC の順となります。これは DeckLink API が使う順序(HFR、VITC1、LTC、VITC2)とわずかに異なる点に注意してください。
video_input
映像入力ソースを設定します。‘unset’、‘sdi’、‘hdmi’、‘optical_sdi’、‘component’、‘composite’、‘s_video’ のいずれかでなければなりません。既定値は ‘unset’。
audio_input
音声入力ソースを設定します。‘unset’、‘embedded’、‘aes_ebu’、‘analog’、‘analog_xlr’、‘analog_rca’、‘microphone’ のいずれかでなければなりません。既定値は ‘unset’。
video_pts
映像パケットのタイムスタンプソースを設定します。‘video’、‘audio’、‘reference’、‘wallclock’、‘abs_wallclock’ のいずれかでなければなりません。既定値は ‘video’。
audio_pts
音声パケットのタイムスタンプソースを設定します。‘video’、‘audio’、‘reference’、‘wallclock’、‘abs_wallclock’ のいずれかでなければなりません。既定値は ‘audio’。
draw_bars
‘true’ に設定すると、信号が失われた際にカラーバーを描画します。既定値は ‘true’。このオプションは非推奨であり、signal_loss_action オプションを使ってください。
signal_loss_action
信号が失われた際に取る動作を設定します。次のいずれかの値を受け付けます。
1, none
信号喪失時に何もしません。通常は黒フレームになります。
2, bars
信号喪失時にカラーバーを描画します。8-bit の入力信号でのみサポートされます。
3, repeat
信号喪失時に最後の映像フレームを繰り返す。
既定値は ‘bars’。
queue_size
入力バッファの最大サイズをバイト単位で設定します。バッファリングがこの値に達すると、入ってくるフレームは破棄されます。既定値は ‘1073741824’。
audio_depth
音声サンプルのビット深度を設定します。‘16’ または ‘32’ でなければなりません。既定値は ‘16’。
decklink_copyts
true に設定すると、初期オフセットを取り除かずにタイムスタンプをそのまま転送します。既定値は false。
timestamp_align
キャプチャ開始時刻のアライメントを秒単位で指定します。非ゼロに設定すると、システムのタイムスタンプが設定値に合うまで入力フレームが破棄されます。最大 1 フレーム長分のアライメントの差は許容されます。これは、「N 重」冗長化のために配置された N 台の異なるハードウェアデバイス間で入力の同期を保つのに役立つ。このオプションを使う前に、各ハードウェアデバイスのシステム時刻を NTP や PTP などのプロトコルで同期しておいてください。なお、この方法は万全ではありません。境界条件によっては、OS のスレッドスケジューリングのジッタにより入力同期が成立しないことがあります。同期が 1 フレームずれることもあれば、まれに timestamp_align 秒ずれることもあります。既定値は ‘0’。
wait_for_tc (bool)
タイムコード付きのフレームを受け取るまでフレームを破棄します。シリアルタイムコードが最初の入力フレームと一緒に受信されないことがあります。その場合、保存されるストリームのタイムコードが不正確になります。このオプションを true に設定すると、タイムコード付きのフレームを受け取るまで入力フレームが破棄されます。timecode_format オプションを指定する必要があります。既定値は false。
enable_klv(bool)
true に設定すると、VANC から KLV データを抽出し KLV パケットを出力します。KLV VANC パケットは MID と PSC フィールドに基づいて結合され、1 つの KLV パケットに集約されます。既定値は false。
3.4.2 例
-
入力デバイスを一覧表示します:
ffmpeg -sources decklink -
サポートされるフォーマットを一覧表示します:
ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro' -
1080i50 で動画クリップをキャプチャします:
ffmpeg -format_code Hi50 -f decklink -i 'Intensity Pro' -c:a copy -c:v copy output.avi -
1080i50 10 bit で動画クリップをキャプチャします:
ffmpeg -raw_format yuv422p10 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi -
1080i50 で 16 音声チャンネルの動画クリップをキャプチャします:
ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
3.5 dshow
Windows DirectShow 入力デバイス。
DirectShow のサポートは、FFmpeg を mingw-w64 プロジェクトでビルドした場合に有効になります。現在サポートされているのは音声デバイスと映像デバイスのみです。
複数のデバイスを別々の入力として開くこともできますが、同じ入力として開くこともでき、その場合はデバイス間の同期が改善されるはずです。
入力名は次のフォーマットでなければなりません。
TYPE=NAME[:TYPE=NAME]
ここで TYPE は audio または video のいずれか、NAME はデバイスの名前または代替名です。
3.5.1 オプション
オプションを何も指定しない場合は、デバイスの既定値が使われます。要求したオプションをデバイスがサポートしていない場合は、デバイスのオープンに失敗します。
video_size
キャプチャする映像の映像サイズを設定します。
framerate
キャプチャする映像のフレームレートを設定します。
sample_rate
キャプチャする音声のサンプリングレート(Hz)を設定します。
sample_size
キャプチャする音声のサンプルサイズ(ビット)を設定します。
channels
キャプチャする音声のチャンネル数を設定します。
list_devices
true に設定すると、デバイスの一覧を表示して終了します。
list_options
true に設定すると、選択したデバイスのオプション一覧を表示して終了します。
video_device_number
同名のデバイスがある場合に映像デバイス番号を設定します(0 から始まり、既定値は 0)。
audio_device_number
同名のデバイスがある場合に音声デバイス番号を設定します(0 から始まり、既定値は 0)。
pixel_format
DirectShow が使う pixel format を選択します。これは映像 codec が未設定か rawvideo に設定されている場合にのみ設定できます。
audio_buffer_size
音声デバイスのバッファサイズをミリ秒単位で設定します(デバイスによっては、これが直接レイテンシに影響します)。既定では音声デバイスの既定のバッファサイズ(通常は 500ms の倍数)を使います。この値を低くしすぎると性能が低下することがあります。次も参照: http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx
video_pin_name
使用する映像キャプチャピンを名前または代替名で選択します。
audio_pin_name
使用する音声キャプチャピンを名前または代替名で選択します。
crossbar_video_input_pin_number
クロスバーデバイスの映像入力ピン番号を選択します。これはクロスバーデバイスの Video Decoder 出力ピンへルーティングされます。なお、この値を変更すると、システムを再起動するまで以後の呼び出しに影響する(新しい既定値が設定される)ことに注意してください。
crossbar_audio_input_pin_number
クロスバーデバイスの音声入力ピン番号を選択します。これはクロスバーデバイスの Audio Decoder 出力ピンへルーティングされます。なお、この値を変更すると、システムを再起動するまで以後の呼び出しに影響する(新しい既定値が設定される)ことに注意してください。
show_video_device_dialog
true に設定すると、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、映像フィルタのプロパティと構成を手動で変更できるようにします。なお、クロスバーデバイスでは、PAL(25 fps)と NTSC(29.97)の入力フレームレート、サイズ、インターレースなどを切り替えるために、このダイアログで値を調整する必要が生じることがあります。これらの値を変更すると、異なるスキャンレート/フレームレートを有効にしたり、画面下部の緑のバーやちらつくスキャンラインなどを回避したりできます。なお、一部のデバイスでは、これらのプロパティを変更すると、システムを再起動するまで以後の呼び出しにも影響する(新しい既定値が設定される)ことに注意してください。
show_audio_device_dialog
true に設定すると、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、音声フィルタのプロパティと構成を手動で変更できるようにします。
show_video_crossbar_connection_dialog
true に設定すると、映像デバイスを開く際に、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、クロスバーのピンルーティングを手動で変更できるようにします。
show_audio_crossbar_connection_dialog
true に設定すると、音声デバイスを開く際に、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、クロスバーのピンルーティングを手動で変更できるようにします。
show_analog_tv_tuner_dialog
true に設定すると、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、テレビのチャンネルと周波数を手動で変更できるようにします。
show_analog_tv_tuner_audio_dialog
true に設定すると、キャプチャ開始前に表示ダイアログをエンドユーザーにポップアップし、テレビ音声(モノラル/ステレオ、言語 A、B、C など)を手動で変更できるようにします。
audio_device_load
音声キャプチャフィルタデバイスを名前で検索する代わりにファイルから読み込む。フィルタがプロパティのシリアライズをサポートしていれば、追加のパラメータも読み込むことがあります。これを使うには音声キャプチャソースを指定する必要がありますが、偽のものでも何でもかまいません。
audio_device_save
現在使用中の音声キャプチャフィルタデバイスと(フィルタがサポートしていれば)そのパラメータをファイルへ保存します。同名のファイルが存在する場合は上書きされます。
video_device_load
映像キャプチャフィルタデバイスを名前で検索する代わりにファイルから読み込む。フィルタがプロパティのシリアライズをサポートしていれば、追加のパラメータも読み込むことがあります。これを使うには映像キャプチャソースを指定する必要がありますが、偽のものでも何でもかまいません。
video_device_save
現在使用中の映像キャプチャフィルタデバイスと(フィルタがサポートしていれば)そのパラメータをファイルへ保存します。同名のファイルが存在する場合は上書きされます。
use_video_device_timestamps
false に設定すると、映像フレームのタイムスタンプを、キャプチャデバイスが提供するタイムスタンプではなく、wallclock から導出します。これにより、信頼できないタイムスタンプを提供するデバイスへの回避策となります。
3.5.2 例
-
DirectShow がサポートするデバイスの一覧を表示して終了します:
$ ffmpeg -list_devices true -f dshow -i dummy -
映像デバイス Camera を開きます:
$ ffmpeg -f dshow -i video="Camera" -
Camera という名前の 2 番目の映像デバイスを開きます:
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera" -
映像デバイス Camera と音声デバイス Microphone を開きます:
$ ffmpeg -f dshow -i video="Camera":audio="Microphone" -
選択したデバイスでサポートされるオプションの一覧を表示して終了します:
$ ffmpeg -list_options true -f dshow -i video="Camera" -
キャプチャするピンを名前または代替名で指定し、代替デバイス名を指定します:
$ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone" -
クロスバーデバイスを構成し、クロスバーのピンを指定し、起動時にユーザーが映像キャプチャのプロパティを調整できるようにします:
$ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0 -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
3.6 fbdev
Linux フレームバッファ入力デバイス。
Linux フレームバッファは、コンピュータのモニタ(通常はコンソール)にグラフィックスを表示するための、グラフィックハードウェアに依存しない抽象化レイヤです。通常 /dev/fb0 というファイルデバイスノードを通じてアクセスされます。
より詳しい情報は、Linux ソースツリーに含まれるファイル Documentation/fb/framebuffer.txt を参照してください。
次も参照: http://linux-fbdev.sourceforge.net/ および fbset(1)。
ffmpeg でフレームバッファデバイス /dev/fb0 から録画するには:
ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi
次のコマンドで 1 枚のスクリーンショット画像を撮影できます。
ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg
3.6.1 オプション
framerate
フレームレートを設定します。既定値は 25。
3.7 gdigrab
Win32 の GDI ベースの画面キャプチャデバイス。
このデバイスを使うと、Windows でディスプレイの一部の領域をキャプチャできます。
入力ファイル名のオプションには次のような要素があります。
desktop
または
title=window_title
または
hwnd=window_hwnd
最初のオプションはデスクトップ全体、またはデスクトップの固定領域をキャプチャします。2 番目と 3 番目のオプションは、画面上の位置にかかわらず単一のウィンドウの内容をキャプチャします。
たとえば、ffmpeg でデスクトップ全体をグラブするには:
ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg
位置 10,20 から 640x480 の領域をグラブします:
ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg
"Calculator" という名前のウィンドウの内容をグラブします:
ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg
3.7.1 オプション
draw_mouse
マウスポインタを描画するかどうかを指定します。ポインタを描画しないには値 0 を使います。既定値は 1。
framerate
グラブのフレームレートを設定します。既定値は ntsc で、フレームレート 30000/1001 に相当します。
show_region
グラブ中の領域を画面に表示します。
show_region に 1 を指定すると、グラブ中の領域が画面に示されます。このオプションを使えば、画面の一部だけをグラブしている場合に、何がグラブされているかを把握しやすくなります。
なお、show_region は単一ウィンドウの内容のグラブとは併用できません。
例:
ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg
video_size
映像のフレームサイズを設定します。既定では、desktop を選択した場合は全画面を、title=window_title を選択した場合はウィンドウ全体のサイズをキャプチャします。
offset_x
video_size で領域をキャプチャするとき、画面またはデスクトップの左端からの距離を設定します。
なお、オフセットの計算は Windows のプライマリモニタの左上隅を起点とします。プライマリモニタの左にモニタを配置している場合、その領域をそちらのモニタへ移すには offset_x に負の値を使う必要があります。
offset_y
video_size で領域をキャプチャするとき、画面またはデスクトップの上端からの距離を設定します。
なお、オフセットの計算は Windows のプライマリモニタの左上隅を起点とします。プライマリモニタの上にモニタを配置している場合、その領域をそちらのモニタへ移すには offset_y に負の値を使う必要があります。
3.8 iec61883
libiec61883 を使う FireWire DV/HDV 入力デバイス。
この入力デバイスを有効にするには、システムに libiec61883、libraw1394、libavc1394 がインストールされている必要があります。デバイスを有効にしてコンパイルするには configure オプション --enable-libiec61883 を使います。
iec61883 キャプチャデバイスは、libiec61883 と新しい Linux FireWire スタック(juju)を使って、IEEE1394(FireWire)経由で接続された映像デバイスからのキャプチャをサポートします。これは Linux カーネル 2.6.37 以降の既定の DV/HDV 入力方式です(古い FireWire スタックが削除されたため)。
入力ファイルとして使用する FireWire ポートを指定するか、最初に接続されているポートを選ぶには "auto" を指定します。
3.8.1 オプション
dvtype
DV/HDV の自動検出を上書きします。これは自動検出が機能しない場合や、異なるデバイス種別の使用を禁止したい場合にのみ使ってください。DV デバイスを HDV として(またはその逆として)扱っても機能せず、未定義の動作となります。サポートされる値は auto、dv、hdv。
dvbuffer
入力データ用のバッファの最大サイズをフレーム単位で設定します。DV の場合、これは正確な値です。HDV の場合、HDV はフレームサイズが固定でないため、フレーム単位では正確ではありません。
dvguid
GUID を指定してキャプチャデバイスを選択します。キャプチャは指定したデバイスからのみ行われ、指定した GUID のデバイスが見つからない場合は失敗します。これは複数のデバイスが同時に接続されている場合に入力を選択するのに役立つ。GUID を調べるには /sys/bus/firewire/devices を見ます。
3.8.2 例
-
FireWire DV/HDV デバイスの入力をグラブして表示します。
ffplay -f iec61883 -i auto -
ソースが HDV の場合に 100000 パケットのパケットバッファを使って、FireWire DV/HDV デバイスの入力をグラブして録画します。
ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
3.9 jack
JACK 入力デバイス。
構成時にこの入力デバイスを有効にするには、システムに libjack がインストールされている必要があります。
JACK 入力デバイスは、音声チャンネルごとに 1 つずつ JACK の書き込み可能クライアントを作成します。名前は client_name:input_N で、client_name はアプリケーションが提供する名前、N はチャンネルを識別する番号です。各書き込み可能クライアントは、取得したデータを FFmpeg 入力デバイスへ送ります。
1 つ以上の JACK 読み取り可能クライアントを作成したら、それらを 1 つ以上の JACK 書き込み可能クライアントへ接続する必要があります。
JACK クライアントの接続や切断には jack_connect と jack_disconnect プログラムを使うか、あるいは qjackctl などのグラフィカルインターフェースで行えます。
JACK クライアントとそのプロパティを一覧表示するには jack_lsp コマンドを実行します。
以下は、ffmpeg で JACK 読み取り可能クライアントをキャプチャする方法を示す例です。
# Create a JACK writable client with name "ffmpeg".
$ ffmpeg -f jack -i ffmpeg -y out.wav
# Start the sample jack_metro readable client.
$ jack_metro -b 120 -d 0.2 -f 4000
# List the current JACK clients.
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm
# Connect metro to the ffmpeg writable client.
$ jack_connect metro:120_bpm ffmpeg:input_1
詳しくは次を参照: http://jackaudio.org/
3.9.1 オプション
channels
チャンネル数を設定します。既定値は 2。
3.10 kmsgrab
KMS 映像入力デバイス。
指定した CRTC またはプレーンに関連付けられた KMS スキャンアウトフレームバッファを、他のハードウェア機能へ渡せる DRM オブジェクトとしてキャプチャします。
実行には DRM master または CAP_SYS_ADMIN のいずれかが必要です。
これらの意味がよく分からない場合は、おそらくこのデバイスは不要です。代わりに x11grab を見てください。
3.10.1 オプション
device
キャプチャ対象の DRM デバイス。既定値は /dev/dri/card0。
format
フレームバッファの pixel format。Linux 5.7 以降を使っている場合は自動検出できますが、それ以前のバージョンでは指定する必要があります。既定値は bgr0 で、これは Linux のコンソールと Xorg X サーバが使う最も一般的なフォーマットです。
format_modifier
出力フレームで通知するフォーマット修飾子。これは一部の API へ正しくインポートするために必要です。Linux 5.7 以降を使っている場合は自動検出できますが、それ以前のバージョンで必要な場合は明示的に指定する必要があります。取り得る値は libdrm のドキュメントを参照してください。
crtc_id
キャプチャソースを定義する KMS CRTC ID。指定した CRTC 上の最初のアクティブなプレーンが使われます。
plane_id
キャプチャソースを定義する KMS プレーン ID。crtc_id も plane_id も指定されていない場合は、最初に見つかったアクティブなプレーンが既定値となります。
framerate
キャプチャするフレームレート。これはページフリップやフレームバッファの変化とは同期しておらず、フレームバッファをサンプリングする間隔を定義するだけです。フレームバッファの更新レートより速くサンプリングすると、同じ内容を持つ独立したフレームが生成されます。既定値は 30。
3.10.2 例
-
最初のアクティブなプレーンからキャプチャし、結果を通常のフレームへダウンロードしてエンコードします。これはフレームバッファがリニアかつマップ可能な場合にのみ機能します。そうでない場合、結果が乱れたりダウンロードに失敗したりすることがあります。
ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4 -
CRTC ID 42 から 60fps でキャプチャし、結果を VAAPI へマップし、NV12 へ変換して H.264 でエンコードします。
ffmpeg -crtc_id 42 -framerate 60 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -c:v h264_vaapi output.mp4 -
プレーンの一部だけをキャプチャするには出力をクロップできます。これは、絶対位置とサイズが分かっていれば単一のウィンドウをキャプチャするのに使えます。たとえば、1920x1080 のプレーンの中央 1/4 をキャプチャしてエンコードするには:
ffmpeg -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,crop=960:540:480:270,scale_vaapi=960:540:nv12' -c:v h264_vaapi output.mp4
3.11 lavfi
Libavfilter 入力仮想デバイス。
この入力デバイスは、libavfilter の filtergraph の開いた出力パッドからデータを読み取る。
filtergraph の開いた各出力について、入力デバイスは生成された出力にマップされる対応するストリームを作成します。filtergraph は graph オプションで指定します。
3.11.1 オプション
graph
入力として使う filtergraph を指定します。各映像の開いた出力には、"outN" という形式の一意な文字列でラベルを付けなければなりません。N は 0 から始まる番号で、デバイスが生成しマップされる入力ストリームに対応します。ラベルのない最初の出力は自動的に "out0" ラベルに割り当てられるが、それ以外はすべて明示的に指定する必要があります。
出力ラベルに接尾辞 "+subcc" を付けると、その出力に付随するクローズドキャプションのパケットを持つ追加ストリームを作成できます(実験的。現状は EIA-608 / CEA-708 のみ)。subcc ストリームは、すべての通常ストリームの後に、対応するストリームの順序で作成されます。たとえば "out19+subcc"、"out7+subcc" があり "out42" まである場合、ストリーム #43 はストリーム #7 の subcc、ストリーム #44 はストリーム #19 の subcc となります。
指定しない場合は、入力デバイスに指定したファイル名が既定値となります。
graph_file
読み取って他のフィルタへ渡す filtergraph のファイル名を設定します。filtergraph の構文は graph オプションで指定するものと同じです。
dumpgraph
グラフを stderr へダンプします。
3.11.2 例
-
カラー映像ストリームを作成し、
ffplayで再生します:ffplay -f lavfi -graph "color=c=pink [out0]" dummy -
前の例と同じですが、グラフ記述の指定にファイル名を使い、"out0" ラベルを省略します:
ffplay -f lavfi color=c=pink -
3 つの異なる映像テストフィルタソースを作成して再生します:
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3 -
amovie ソースを使ってファイルから音声ストリームを読み取り、
ffplayで再生します:ffplay -f lavfi "amovie=test.wav" -
音声ストリームと映像ストリームを読み取り、
ffplayで再生します:ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]" -
デコードしたフレームを画像へ、クローズドキャプションを RCWT バックアップへダンプします:
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
3.12 libcdio
libcdio ベースの Audio-CD 入力デバイス。
構成時にこの入力デバイスを有効にするには、システムに libcdio がインストールされている必要があります。configure オプション --enable-libcdio が必要です。
このデバイスを使うと、Audio-CD から再生やグラブができます。
たとえば、ffmpeg で /dev/sr0 にある Audio-CD 全体をコピーするには、次のコマンドを実行します。
ffmpeg -f libcdio -i /dev/sr0 cd.wav
3.12.1 オプション
speed
ドライブの読み取り速度を設定します。既定値は 0。
速度は CD-ROM の速度単位で指定します。速度は libcdio の cdio_cddap_speed_set 関数を通じて設定されます。多くの CD-ROM ドライブでは、大きすぎる値を指定すると最速の速度が使われます。
paranoia_mode
paranoia の復旧モードフラグを設定します。次のいずれかの値を受け付けます。
‘disable’ ‘verify’ ‘overlap’ ‘neverskip’ ‘full’
既定値は ‘disable’。
利用可能な復旧モードについての詳細は、paranoia プロジェクトのドキュメントを参照してください。
3.13 libdc1394
libdc1394 と libraw1394 をベースとした IIDC1394 入力デバイス。
configure オプション --enable-libdc1394 が必要です。
3.13.1 オプション
framerate
フレームレートを設定します。既定値は ntsc で、フレームレート 30000/1001 に相当します。
pixel_format
pixel format を選択します。既定値は uyvy422。
video_size
映像サイズを 640x480 や hd720 のような文字列で設定します。既定値は qvga。
3.14 openal
OpenAL 入力デバイスは、動作する OpenAL 1.1 実装を備えたすべてのシステムで音声キャプチャを提供します。
構成時にこの入力デバイスを有効にするには、システムに OpenAL のヘッダとライブラリがインストールされている必要があり、FFmpeg を --enable-openal を付けて構成する必要があります。
OpenAL のヘッダとライブラリは、OpenAL 実装の一部として、または追加のダウンロード(SDK)として提供されるはずです。インストール状況によっては、ビルドシステムが OpenAL のヘッダとライブラリを見つけられるよう、--extra-cflags と --extra-ldflags で追加のフラグを指定する必要があるかもしれません。
OpenAL 実装の一覧(網羅的ではない)を次に示します。
Creative
公式の Windows 実装で、サポートするデバイスでのハードウェアアクセラレーションとソフトウェアフォールバックを提供します。http://openal.org/ を参照してください。
OpenAL Soft
移植性のあるオープンソース(LGPL)のソフトウェア実装。Windows、Linux、Solaris、BSD オペレーティングシステムで最も一般的なサウンド API のバックエンドを含みます。http://kcat.strangesoft.net/openal.html を参照してください。
Apple
OpenAL は、Mac OS X の公式音声インターフェースである Core Audio の一部です。http://developer.apple.com/technologies/mac/audio-and-video.html を参照してください。
このデバイスを使うと、OpenAL を通じて扱う音声入力デバイスからキャプチャできます。
キャプチャするデバイスの名前は、ファイル名として指定します。空文字列を指定すると、デバイスは自動的に既定のデバイスを選択します。サポートされるデバイスの一覧は list_devices オプションで取得できます。
3.14.1 オプション
channels
キャプチャする音声のチャンネル数を設定します。現在サポートされているのは値 1(モノラル)と 2(ステレオ)のみです。既定値は 2。
sample_size
キャプチャする音声のサンプルサイズ(ビット)を設定します。現在サポートされているのは値 8 と 16 のみです。既定値は 16。
sample_rate
キャプチャする音声のサンプリングレート(Hz)を設定します。既定値は 44.1k。
list_devices
true に設定すると、デバイスの一覧を表示して終了します。既定値は false。
3.14.2 例
OpenAL がサポートするデバイスの一覧を表示して終了します:
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
PulseAudio 経由で OpenAL デバイス DR-BT101 からキャプチャします:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
既定のデバイスからキャプチャする(ファイル名として空文字列 ” を指定する点に注意してください):
$ ffmpeg -f openal -i '' out.ogg
同じ ffmpeg コマンド内で 2 つのデバイスから同時にキャプチャし、2 つの異なるファイルへ書き出します:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
注意: すべての OpenAL 実装が複数同時キャプチャをサポートするわけではありません。上記が動作しない場合は、最新の OpenAL Soft を試してください。
3.15 oss
Open Sound System 入力デバイス。
入力デバイスに与えるファイル名は、OSS 入力デバイスを表すデバイスノードであり、通常は /dev/dsp に設定されます。
たとえば ffmpeg で /dev/dsp からグラブするには、次のコマンドを使います。
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
OSS についての詳細は次を参照: http://manuals.opensound.com/usersguide/dsp.html
3.15.1 オプション
sample_rate
サンプリングレートを Hz 単位で設定します。既定値は 48000。
channels
チャンネル数を設定します。既定値は 2。
3.16 pulse
PulseAudio 入力デバイス。
この出力デバイスを有効にするには、FFmpeg を --enable-libpulse を付けて構成する必要があります。
入力デバイスに与えるファイル名は、ソースデバイスまたは文字列 "default" です。
PulseAudio のソースデバイスとそのプロパティを一覧表示するには pactl list sources コマンドを実行します。
PulseAudio についての詳細は http://www.pulseaudio.org にあります。
3.16.1 オプション
server
IP アドレスで指定した特定の PulseAudio サーバへ接続します。指定しない場合は既定のサーバが使われます。
name
PulseAudio がアクティブなクライアントを表示する際に使うアプリケーション名を指定します。既定では LIBAVFORMAT_IDENT 文字列です。
stream_name
PulseAudio がアクティブなストリームを表示する際に使うストリーム名を指定します。既定では "record" です。
sample_rate
サンプリングレートを Hz 単位で指定します。既定では 48kHz が使われます。
channels
使用するチャンネル数を指定します。既定では 2(ステレオ)が設定されます。
frame_size
このオプションは何もせず、非推奨です。
fragment_size
PulseAudio における最小バッファリングフラグメントのサイズをバイト単位で指定します。これは音声のレイテンシに影響します。既定では 50 ms 分のデータに設定されます。
wallclock
現在時刻を使って初期 PTS を設定します。既定値は 1。
3.16.2 例
既定のデバイスからストリームを録音します:
ffmpeg -f pulse -i default /tmp/pulse.wav
3.17 sndio
sndio 入力デバイス。
構成時にこの入力デバイスを有効にするには、システムに libsndio がインストールされている必要があります。
入力デバイスに与えるファイル名は、sndio 入力デバイスを表すデバイスノードであり、通常は /dev/audio0 に設定されます。
たとえば ffmpeg で /dev/audio0 からグラブするには、次のコマンドを使います。
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
3.17.1 オプション
sample_rate
サンプリングレートを Hz 単位で設定します。既定値は 48000。
channels
チャンネル数を設定します。既定値は 2。
3.18 video4linux2, v4l2
Video4Linux2 入力映像デバイス。
"v4l2" は "video4linux2" のエイリアスとして使えます。
FFmpeg が v4l-utils サポート付き(configure オプション --enable-libv4l2 を使用)でビルドされている場合、-use_libv4l2 入力デバイスオプションを使って利用できます。
グラブするデバイスの名前はファイルデバイスノードです。通常 Linux システムでは、デバイス(USB ウェブカメラなど)がシステムに接続されると、そのようなノードを自動的に作成する傾向があり、/dev/videoN という名前を持ちます。N はそのデバイスに関連付けられた番号です。
Video4Linux2 デバイスは通常、限られた組み合わせの widthxheight サイズとフレームレートをサポートします。どれがサポートされるかは Video4Linux2 デバイスに対して -list_formats all で確認できます。TV カードなど一部のデバイスは 1 つ以上の規格をサポートします。サポートされる規格はすべて -list_standards all で一覧表示できます。
タイムスタンプの時間基準は 1 マイクロ秒です。カーネルのバージョンと構成によって、タイムスタンプはリアルタイムクロック(起点は Unix エポック)または単調クロック(起点は通常ブート時で、NTP やクロックの手動変更の影響を受けない)から導出されます。-timestamps abs または -ts abs オプションを使うと、リアルタイムクロックへの変換を強制できます。
ffmpeg と ffplay での video4linux2 デバイスの使用例をいくつか示します。
-
video4linux2 デバイスでサポートされるフォーマットを一覧表示します:
ffplay -f video4linux2 -list_formats all /dev/video0 -
video4linux2 デバイスの入力をグラブして表示します:
ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0 -
video4linux2 デバイスの入力をグラブして録画します。フレームレートとサイズは以前に設定したままにします:
ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
Video4Linux についての詳細は http://linuxtv.org/ を確認してください。
3.18.1 オプション
standard
規格を設定します。サポートされる規格の名前でなければなりません。サポートされる規格の一覧を得るには list_standards オプションを使います。
channel
入力チャンネル番号を設定します。既定値は -1 で、これは以前に選択したチャンネルを使うことを意味します。
video_size
映像のフレームサイズを設定します。引数は WIDTHxHEIGHT の形式の文字列、または有効なサイズの略称でなければなりません。
pixel_format
pixel format を選択します(raw 映像入力でのみ有効)。
input_format
優先する pixel format(raw 映像の場合)または codec 名を設定します。このオプションを使うと、複数の入力フォーマットが利用可能な場合に入力フォーマットを選択できます。
framerate
優先する映像フレームレートを設定します。
list_formats
利用可能なフォーマット(サポートされる pixel format、codec、フレームサイズ)を一覧表示して終了します。
利用可能な値は次のとおり。
‘all’
利用可能なフォーマット(圧縮および非圧縮)をすべて表示します。
‘raw’
raw 映像(非圧縮)フォーマットのみを表示します。
‘compressed’
圧縮フォーマットのみを表示します。
list_standards
サポートされる規格を一覧表示して終了します。
利用可能な値は次のとおり。
‘all’
サポートされるすべての規格を表示します。
timestamps, ts
グラブしたフレームのタイムスタンプの種別を設定します。
利用可能な値は次のとおり。
‘default’
カーネルのタイムスタンプを使います。
‘abs’
絶対タイムスタンプ(wall clock)を使います。
‘mono2abs’
単調タイムスタンプから絶対タイムスタンプへの変換を強制します。
既定値は default。
use_libv4l2
libv4l2(v4l-utils)の変換関数を使います。既定値は 0。
3.19 vfwcap
VfW(Video for Windows)キャプチャ入力デバイス。
入力として渡すファイル名はキャプチャドライバ番号で、0 から 9 の範囲です。ドライバの一覧を表示するには、ファイル名として "list" を使ってもかまいません。それ以外のファイル名はデバイス番号 0 と解釈されます。
3.19.1 オプション
video_size
映像のフレームサイズを設定します。
framerate
グラブのフレームレートを設定します。既定値は ntsc で、フレームレート 30000/1001 に相当します。
3.20 x11grab
X11 映像入力デバイス。
構成時にこの入力デバイスを有効にするには、システムに libxcb がインストールされている必要があります。これは構成時に自動的に検出されます。
このデバイスを使うと、X11 ディスプレイの一部の領域をキャプチャできます。
入力として渡すファイル名は次の構文を持ちます。
[hostname]:display_number.screen_number[+x_offset,y_offset]
hostname:display_number.screen_number は、グラブ元となる画面の X11 ディスプレイ名を指定します。hostname は省略でき、既定値は "localhost" です。環境変数 DISPLAY には既定のディスプレイ名が入っています。
x_offset と y_offset は、グラブ領域の X11 画面の左上端を基準としたオフセットを指定します。既定値は 0 です。
より詳しい情報は X11 のドキュメント(man X など)を確認してください。
X11 ディスプレイのプロパティに関する基本情報を得るには xdpyinfo プログラムを使います("name" や "dimensions" を grep するなど)。
たとえば、ffmpeg で :0.0 からグラブするには:
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
位置 10,20 でグラブします:
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
3.20.1 オプション
select_region
ポインタを使ってグラブ領域をグラフィカルに選択するかどうかを指定します。値 1 を指定すると、クリックとドラッグでグラブ領域をグラフィカルに選択するようユーザーに促します。ドラッグせずに 1 回クリックすると画面全体を選択します。幅または高さがゼロの領域も画面全体を選択します。このオプションは video_size、grab_x、grab_y のオプションを上書きします。既定値は 0。
draw_mouse
マウスポインタを描画するかどうかを指定します。値 0 はポインタを描画しないことを指定します。既定値は 1。
follow_mouse
グラブ領域をマウスに追従させる。引数は centered か、ピクセル数 PIXELS のいずれかです。
"centered" を指定すると、グラブ領域がマウスポインタに追従し、ポインタを領域の中央に保ちます。それ以外の場合、マウスポインタが領域の端から PIXELS(ゼロより大きい)以内に達したときにのみ領域が追従します。
例:
ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
マウスポインタが端から 100 ピクセル以内に達したときにのみ追従させる:
ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
framerate
グラブのフレームレートを設定します。既定値は ntsc で、フレームレート 30000/1001 に相当します。
show_region
グラブ中の領域を画面に表示します。
show_region に 1 を指定すると、グラブ中の領域が画面に示されます。このオプションを使えば、画面の一部だけをグラブしている場合に、何がグラブされているかを把握しやすくなります。
region_border
-show_region 1 を使う場合に領域の枠線の太さを設定します。範囲は 1 から 128 で、既定値は 3(XCB ベースの x11grab のみ)。
例:
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
follow_mouse と併用する場合:
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
window_id
画面全体ではなく、このウィンドウをグラブします。既定値は 0 で、これは画面全体(root ウィンドウ)にマップされます。
ウィンドウの id は xwininfo プログラムで調べられます(必要に応じてオプション -tree や -root を付けます)。
ウィンドウが後で拡大されても、新しい領域は記録されません。ウィンドウが閉じられたり、アンマップ(つまりアイコン化)されたり、映像サイズ(既定では初期のウィンドウサイズ)より小さく縮小されたりすると、映像は終了します。
このオプションは follow_mouse と select_region のオプションを無効にします。
video_size
映像のフレームサイズを設定します。既定値はデスクトップ全体またはウィンドウ全体です。
grab_x grab_y
グラブ領域の座標を設定します。これらは X11 ウィンドウの左上隅からのオフセットとして表され、デバイス名内の x_offset と y_offset パラメータに対応します。両オプションの既定値は 0 です。
4 出力デバイス
出力デバイスとは、システムに接続された出力デバイスへマルチメディアデータを書き込める、FFmpeg 内で構成された要素です。
FFmpeg のビルドを構成すると、サポートされる出力デバイスはすべて既定で有効になります。利用可能なものの一覧は configure オプション "–list-outdevs" で表示できます。
すべての出力デバイスを無効にするには configure オプション "–disable-outdevs" を使い、特定の出力デバイスを選択的に有効にするには "–enable-outdev=OUTDEV" を、特定の入力デバイスを無効にするには "–disable-outdev=OUTDEV" を使います。
ff* ツールの "-devices" オプションは、有効な出力デバイスの一覧を表示します。
以下、現在利用可能な出力デバイスを説明します。
4.1 alsa
ALSA(Advanced Linux Sound Architecture)出力デバイス。
4.1.1 例
-
既定の ALSA デバイスでファイルを再生します:
ffmpeg -i INPUT -f alsa default -
サウンドカード 1、音声デバイス 7 でファイルを再生します:
ffmpeg -i INPUT -f alsa hw:1,7
4.2 AudioToolbox
AudioToolbox 出力デバイス。
OSX 上の CoreAudio デバイスへのネイティブ出力を可能にします。
出力ファイル名は、システム既定の出力デバイスを指す場合は空(または -)にできます。あるいは -list_devices true で表示されるデバイスインデックスを指す番号を指定できます。
あるいは、 -audio_device_index
利用可能なデバイスはすべて -list_devices true で列挙でき、すべてのデバイス名、UID、対応するインデックスを一覧表示します。
4.2.1 オプション
AudioToolbox は次のオプションをサポートします。
-audio_device_index
音声デバイスをインデックスで指定します。出力ファイル名での指定より優先されます。
4.2.2 例
-
サポートされるデバイスの一覧を表示し、既定のデバイスへサイン波を出力します:
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true - -
インデックス 2 のデバイスへサイン波を出力し、出力ファイル名を上書きします:
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
4.3 caca
CACA 出力デバイス。
この出力デバイスを使うと、映像ストリームを CACA ウィンドウに表示できます。アプリケーションごとに CACA ウィンドウは 1 つしか許されないため、1 つのアプリケーション内でこの出力デバイスのインスタンスは 1 つしか持てません。
この出力デバイスを有効にするには、FFmpeg を --enable-libcaca を付けて構成する必要があります。libcaca は、ピクセルの代わりにテキストを出力するグラフィックスライブラリです。
libcaca についての詳細は次を確認してください: http://caca.zoy.org/wiki/libcaca
4.3.1 オプション
window_title
CACA ウィンドウのタイトルを設定します。指定しない場合は、出力デバイスに指定したファイル名が既定値となります。
window_size
CACA ウィンドウのサイズを設定します。widthxheight の形式の文字列、または映像サイズの略称を指定できます。指定しない場合は入力映像のサイズが既定値となります。
driver
ディスプレイドライバを設定します。
algorithm
ディザリングアルゴリズムを設定します。レンダリングする画像は通常、利用可能なパレットよりはるかに多くの色を持つため、ディザリングが必要となります。受け付ける値は -list_dither algorithms で一覧表示されます。
antialias
アンチエイリアス手法を設定します。アンチエイリアスはレンダリングされた画像を滑らかにし、よく見られる階段状の効果を回避します。受け付ける値は -list_dither antialiases で一覧表示されます。
charset
テキストのレンダリングに使う文字を設定します。受け付ける値は -list_dither charsets で一覧表示されます。
color
テキストのレンダリングに使う色を設定します。受け付ける値は -list_dither colors で一覧表示されます。
list_drivers
true に設定すると、利用可能なドライバの一覧を表示して終了します。
list_dither
引数に関連する利用可能なディザオプションを一覧表示します。引数は algorithms、antialiases、charsets、colors のいずれかでなければなりません。
4.3.2 例
-
次のコマンドは、
ffmpegの出力を CACA ウィンドウに表示し、そのサイズを 80x25 に強制します:ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca - -
利用可能なドライバの一覧を表示して終了します:
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true - -
利用可能なディザの色の一覧を表示して終了します:
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
4.4 decklink
decklink 出力デバイスは、Blackmagic DeckLink デバイスの再生機能を提供します。
この出力デバイスを有効にするには、Blackmagic DeckLink SDK が必要であり、適切な --extra-cflags と --extra-ldflags を付けて構成する必要があります。Windows では、IDL ファイルを widl で処理する必要があります。
DeckLink はサポートするフォーマットに非常に厳しいです。pixel format は常に uyvy422 です。フレームレート、フィールド順、映像サイズは、お使いのデバイスについて -list_formats 1 で確認する必要があります。音声のサンプリングレートは常に 48 kHz です。
4.4.1 オプション
list_devices
true に設定すると、デバイスの一覧を表示して終了します。既定値は false。このオプションは非推奨であり、利用可能な出力デバイスを一覧表示するには ffmpeg の -sinks オプションを使ってください。
list_formats
true に設定すると、サポートされるフォーマットの一覧を表示して終了します。既定値は false。
preroll
映像をプリロールする時間を秒単位で指定します。既定値は 0.5。
duplex_mode
decklink デバイスの duplex/profile モードを設定します。‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ のいずれかでなければなりません。既定値は ‘unset’。
注意: DeckLink SDK 11.0 では、duplex プロパティが profile プロパティに置き換えられた。DeckLink Duo 2 と DeckLink Quad 2 では、同じコネクタを使う 2 つのサブデバイス間で 1 つの profile が共有されます。DeckLink 8K Pro では、4 つのサブデバイス全体で 1 つの profile が共有されます。したがって DeckLink 8K Pro は 4 つの profile をサポートします。
DeckLink 8K Pro(DeckLink SDK >= 11.0)で有効な profile モード: ‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 と DeckLink Duo 2 で有効な profile モード: ‘half’、‘full’
timing_offset
使用する出力での genlock タイミングのピクセルオフセットを設定します。既定値は ‘unset’。
link
使用する出力での SDI 映像リンク構成を設定します。‘unset’、‘single’ link SDI、‘dual’ link SDI、‘quad’ link SDI のいずれかでなければなりません。既定値は ‘unset’。
sqd
Quad-link SDI 出力に対して Square Division Quad Split モードを有効にします。‘unset’、‘true’、‘false’ のいずれかでなければなりません。既定値は unset。
level_a
使用する出力で SMPTE Level A モードを有効にします。‘unset’、‘true’、‘false’ のいずれかでなければなりません。既定値は unset。
vanc_queue_size
VANC データ用の出力バッファの最大サイズをバイト単位で設定します。バッファリングがこの値に達すると、出ていく VANC データは破棄されます。既定値は ‘1048576’。
4.4.2 例
-
出力デバイスを一覧表示します:
ffmpeg -sinks decklink -
サポートされるフォーマットを一覧表示します:
ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor' -
動画クリップを再生します:
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor' -
標準外のフレームレートまたは映像サイズで動画クリップを再生します:
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
4.5 fbdev
Linux フレームバッファ出力デバイス。
Linux フレームバッファは、コンピュータのモニタ(通常はコンソール)にグラフィックスを表示するための、グラフィックハードウェアに依存しない抽象化レイヤです。通常 /dev/fb0 というファイルデバイスノードを通じてアクセスされます。
より詳しい情報は、Linux ソースツリーに含まれるファイル Documentation/fb/framebuffer.txt を参照してください。
4.5.1 オプション
xoffset yoffset
左上隅の x/y 座標を設定します。既定値は 0。
4.5.2 例
フレームバッファデバイス /dev/fb0 でファイルを再生します。必要な pixel format は現在のフレームバッファ設定によって異なります。
ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
次も参照: http://linux-fbdev.sourceforge.net/ および fbset(1)。
4.6 oss
OSS(Open Sound System)出力デバイス。
4.7 pulse
PulseAudio 出力デバイス。
この出力デバイスを有効にするには、FFmpeg を --enable-libpulse を付けて構成する必要があります。
PulseAudio についての詳細は http://www.pulseaudio.org にあります。
4.7.1 オプション
server
IP アドレスで指定した特定の PulseAudio サーバへ接続します。指定しない場合は既定のサーバが使われます。
name
PulseAudio がアクティブなクライアントを表示する際に使うアプリケーション名を指定します。既定では LIBAVFORMAT_IDENT 文字列です。
stream_name
PulseAudio がアクティブなストリームを表示する際に使うストリーム名を指定します。既定では、指定した出力名に設定されます。
device
使用するデバイスを指定します。指定しない場合は既定のデバイスが使われます。出力デバイスの一覧は pactl list sinks コマンドで取得できます。
buffer_size buffer_duration
PulseAudio バッファのサイズと長さを制御します。バッファが小さいほど制御性は高まりますが、より頻繁な更新が必要になります。
buffer_size はサイズをバイト単位で指定し、buffer_duration は長さをミリ秒単位で指定します。
両方のオプションを指定した場合は、大きい方の値が使われます(長さはストリームパラメータを使ってバイトへ再計算されます)。0 に設定した場合(既定)、デバイスは PulseAudio の既定の長さの値を使います。既定では PulseAudio はバッファの長さを約 2 秒に設定します。
prebuf
プリバッファリングのサイズをバイト単位で指定します。サーバは、バッファに少なくとも prebuf バイトが利用可能になるまで再生を開始しません。既定では、このオプションは buffer_size または buffer_duration のうち大きい方と同じ値に初期化されます。
minreq
最小リクエストサイズをバイト単位で指定します。サーバはクライアントから minreq バイト未満を要求せず、代わりにバッファに十分な空きができてから一度により多くのバイトを要求するまで待ちます。このオプションは設定しないことを推奨します。そうすればサーバが妥当と判断する値に初期化されます。
4.7.2 例
既定のサーバの既定のデバイスでファイルを再生します:
ffmpeg -i INPUT -f pulse "stream name"
4.8 sndio
sndio 音声出力デバイス。
4.9 v4l2
Video4Linux2 出力デバイス。
4.10 xv
XV(XVideo)出力デバイス。
この出力デバイスを使うと、映像ストリームを X Window System のウィンドウに表示できます。
4.10.1 オプション
display_name
ハードウェアのディスプレイ名を指定します。これにより、使用するディスプレイと通信ドメインが決まります。
ディスプレイ名または DISPLAY 環境変数は、hostname[:number[.screen_number]] の形式の文字列にできます。
hostname は、ディスプレイが物理的に接続されているホストマシンの名前を指定します。number は、そのホストマシン上のディスプレイサーバの番号を指定します。screen_number は、そのサーバ上で使う画面を指定します。
指定しない場合は、DISPLAY 環境変数の値が既定値となります。
たとえば、dual-headed:0.1 は、"dual-headed" という名前のマシン上のディスプレイ 0 の画面 1 を指定します。
ディスプレイ名の形式に関する詳細は、X11 の仕様を確認してください。
window_id
非ゼロの値に設定すると、デバイスは新しいウィンドウを作成せず、指定した window_id の既存のウィンドウを使います。既定ではこのオプションはゼロに設定され、デバイスは自身のウィンドウを作成します。
window_size
作成するウィンドウのサイズを設定します。widthxheight の形式の文字列、または映像サイズの略称を指定できます。指定しない場合は入力映像のサイズが既定値となります。window_id を設定した場合は無視されます。
window_x window_y
作成するウィンドウの X と Y のオフセットを設定します。両方とも既定値は 0。これらの値はウィンドウマネージャによって無視されることがあります。window_id を設定した場合は無視されます。
window_title
ウィンドウのタイトルを設定します。指定しない場合は、出力デバイスに指定したファイル名が既定値となります。window_id を設定した場合は無視されます。
XVideo についての詳細は http://www.x.org/ を参照してください。
4.10.2 例
-
ffmpegで映像入力のデコード、表示、エンコードを同時に行う:ffmpeg -i INPUT OUTPUT -f xv display -
入力映像をデコードし、複数の X11 ウィンドウに表示します:
ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
5 関連項目
ffmpeg, ffplay, ffprobe, libavdevice
6 著者
FFmpeg の開発者たち。
著者の詳細については、プロジェクトの Git 履歴(https://git.ffmpeg.org/ffmpeg)を参照してください。たとえば FFmpeg のソースディレクトリで git log コマンドを入力するか、オンラインリポジトリ https://git.ffmpeg.org/ffmpeg を閲覧します。
特定のコンポーネントの保守担当者は、ソースコードツリーのファイル MAINTAINERS に記載されています。
ホスティングは telepoint.bg の提供によるものです。