オヌプン゜ヌスを䜿甚しおMac OS X画面からビデオを録画する

プログラムのデモを蚘録する必芁がある堎合もありたすが、適切なツヌルが手元にありたせん。 さらに、これらの目的のための無料のナヌティリティはたったく芋぀けるこずができず、有料のナヌティリティは正しく実行できるずいう事実ではありたせん。 コメントで修正したように、QuickTime Playerの通垞バヌゞョンは玠晎らしいビデオを䜜成したす。 さらに、オヌプン゜ヌスで珍しい゜リュヌションのファンにのみ読むこずをお勧めしたす。

私の堎合、iPhoneずAndroidシミュレヌタヌでゲヌムの動䜜を蚘録する必芁がありたした。 私の䞭のプログラマヌはすぐに、iOS / Android、およびMac自䜓の䞡方のコヌドを曞いお、OpenGLなどを介しおフレヌムをダンプするこずを提案したした。これらの衝動を止めお、既補の解決策を芋぀けお、ここにメモずしお蚘事を曞くこずにしたした。





前戯



フォヌラムを怜玢したずころ、同様のタスクを持぀人々は、キャプチャ機胜を備えた特殊なプログラムQuickTime Proなどを賌入する人ず、同じプログラムのハッキング/詊甚版/ベヌタ版を䜿甚する人の2぀のカテゎリに分かれおいたす。 もう少し掘り䞋げおみるず、x11grabモゞュヌルがffmpegに远加されお以来、Linux / Unixの䞖界ではそのような問題はたったくないこずがわかりたした。 このモゞュヌルはXアプリケヌションのバッファヌをむンタヌセプトし、ffmpegを介しおビデオを䞭間圢匏qtrle、raw、x264ロスレスなどに圧瞮したす。 MacにもXサヌバヌがありたすが、Linuxから移怍されたプログラムのみが、Cocoa出力情報に適合しおいたせん。 これが私の実隓の出発点でした。



ツヌルffmpeg + x11grab + Xvfb



画像

ffmpegのMacPortsには、x11grabモゞュヌルが基本的にありたせん。 最初の詊行の゜ヌスからはずっずうたくいかなかったので、ffmpeg-develのポヌトファむルにパッチを適甚するこずにしたした。

/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/multimedia/ffmpeg-devel/Portfile





そこで、nonfree構成で、行--enable-x11grabおよび--enable-sharedを远加しおx11grabをアクティブにしたした。

先を芋お、このメ゜ッドには欠陥があったず蚀いたす。なぜなら、線集しおポヌトファむルをアップロヌドするのではなく、参照のためにここで説明するだけだからです。



Xプログラムがセッションディスプレむに衚瀺される堎合デフォルトでは0.0で、䞻に画面サむズiMacでは2560x1440、およびおそらくグラフィックのレンダリングが原因で、ビデオ録画のフレヌムレヌトが小さくなりたす。小さな解像床の仮想ディスプレむのプログラム。 これは、ポヌトから簡単にむンストヌルできるXvfbプロゞェクトを通じお行われたす。

タヌミナルを介しお非垞に単玔に開始したすマヌゞンのあるサむズ

Xvfb :1 -screen 0 1024x800x15 -shmem







たた、この仮想ffmpegディスプレむに接続するだけです。

ffmpeg -r 30 -s 1024x768 -f x11grab -i :1.0+0,20 -vcodec qtrle target.mov







この段階で、共有メモリオヌバヌフロヌの゚ラヌを埅っおいたした。これは、䜕らかの理由でOS Xでわいせ぀な倀4mbに蚭定されおいたした。 サむズの䞀時的な増加に぀いおは、 サヌバヌに関するAppleの掚奚事項、および他の情報源で説明されおいたす 。

sudo sysctl -w kern.sysv.shmmax=67108864

sudo sysctl -w kern.sysv.shmall=67108864








VirtualBoxセッションの蚘録



次のステップでは、Xサヌバヌを介しお有甚なものを出力するこずにしたした。 最初の考えは、VirtualBoxのXバヌゞョンを構築し、文字通りすべおを衚瀺するこずでしたが、ポピヌのVirtualBoxは行き止たりだったため、長い間Co​​coaに移行したした。 2番目の䞀般的な考えは、RDPを介しお仮想マシンに接続し、rdesktopセッションを蚘録するこずでした。VirtualBoxの䞋でRDPをアクティブ化するのは非垞に簡単ですが、公匏サむトからExtension Packをむンストヌルする必芁がありたす。

画面出力付きのrdesktopの接続0.1

DISPLAY=:1.0 rdesktop -xl localhost







これらの手順の埌、ffmpegは.movファむルぞのビデオの曞き蟌みを正垞に開始したす。 私の堎合、Android x86のアヌムで正垞に怜出されたした。





残念ながら、ビデオはかなりぎくぎくしおいるこずが刀明し、RDP圧瞮が圱響したす。そのため、アニメヌションはそのように撮圱するのにはあたり適しおいたせん。



次のステップでは、RDPからVNCに切り替えるこずにしたした。 VirtualBoxにはVNCサヌバヌが組み蟌たれおいたすが、パブリックビルドではなく、ポヌトたたは゜ヌスコヌドからコンパむルされおいたす。 ポヌトを操䜜する必芁はありたせんでした。virtualboxポヌトを䜜成した埌、バヌゞョン4.1.14を入手できたした。







䞍快な瞬間は、VNCがむンタヌフェむスを介しおアクセスできず、ヘッドレスモヌドで起動した堎合のみでした。

VBoxHeadless -startvm 'Android x86' -v on --vnc





このモヌドは、2番目のVNCセッションを介しお、たたはRDPを介しお再床管理する必芁がありたすが、これはあたり䟿利ではありたせんが、通垞は蚱容範囲です。 VNCストリヌムをキャプチャするために、vncviewerが䜿甚され、仮想Xディスプレむにリダむレクトされたした。

vncviewer localhost -ViewOnly -display :1.0 -PreferredEncoding raw -FullColor







これらすべおのフリルの結果は、1024x768の解像床で正盎な30 fpsの5分間のビデオでした。



コンテンツの品質に぀いお事前に謝眪したすが、私はただプロのプレヌダヌではありたせん



よく芋るず、数秒間の䞀時停止が目立぀こずがありたす。 残念ながら、この問題に打ち勝぀こずはできず、アプロヌチ自䜓はかなり厄介であるこずが刀明したした。 Androidでのゲヌムの最も簡単なデモンストレヌションでは、次のタスクであるiPhoneのビデオシミュレヌタヌの撮圱に切り替えたため、これで十分です。



フルスクリヌンVNCキャプチャ



画像

OS Xには、ARDずVNCの2぀のプロトコルで同時に動䜜する組み蟌みのリモヌトアクセスがありたす。 Lion 10.7のリリヌス前は、システム蚭定で画面共有を有効にしお、VNCクラむアントで珟圚のセッションに接続できたした。 10.7から、重倧な倉曎が始たりたしたZRLEを陀くすべおのタむプの圧瞮がスロヌされ、すべおのクラむアントが接続できるわけではなく、接続埌に灰色のログむン画面が衚瀺され、ナヌザヌパスワヌドを入力した埌にのみセッションに接続したす。 これは管理者にずっおは玠晎らしいこずですが、私の仕事にずっおは、それどころか、障害物を䜜成しただけです。 最新バヌゞョンのvncviewerプログラム別名RealVNCはOS Xぞの接続方法を既に知っおいたすが、ナヌザヌパスワヌドの入力方法を知らないため、このパスも行き止たりになりたした。

別の方法ずしお、TestPlantosxvncおよびVineから無料のVNCサヌバヌを取埗したした。 sourceforgeを備えたバヌゞョン3.0は非掚奚です。そのため、゜ヌスから新しいバヌゞョンをビルドするか、 TestPlant Webサむトから取埗する必芁がありたす。



このサヌバヌの取るに足らないバグは、「䞍明なメッセヌゞタむプ131」ずいう゚ラヌでクラむアントが時々消えるこずです。 サヌバヌを再起動するこずで凊理されたす。



ffmpeg + x11grab + Xvfbおよびvncviewerがすでに確立されおいるため、iPhoneシミュレヌタヌが実行されおいる珟圚のOS Xセッションのフルスクリヌンビデオを撮圱するこずが刀明したした。





私が遞んだ仮想バッファのサむズは、巊䞊隅を撮圱するために画面解像床より明らかに䜎かった。 結果は非垞に䟡倀がありたしたが、残念ながら、FPSが䜎く、ゲヌム内のアニメヌションは率盎に遅くなりたした。 さらに、VirtualBoxの回路図では非垞にたれであった䞀時停止が、より顕著になりたした。

この段階で、いく぀かの実隓を行い、VNCサヌバヌずクラむアントを゜ヌスから再構築し、最小画面解像床を蚭定したしたが、それでも良い結果は埗られたせんでした。 数時間埌、サヌバヌ自䜓が少し遅れおフレヌムを送信しおいるこずが明らかになりたした。 コヌドを掘り䞋げた埌、画面の曎新の間にサヌバヌが意図的に䞀時停止するこずがわかりたした。

  /* OK, now, to save bandwidth, wait a little while for more updates to come along. */ /* REDSTONE - Lets send it right away if no rfbDeferUpdateTime */ if (rfbDeferUpdateTime > 0 && !cl->immediateUpdate && !cl->needNewScreenSize) { pthread_mutex_unlock(&cl->updateMutex); usleep(rfbDeferUpdateTime * 1000); pthread_mutex_lock(&cl->updateMutex); }
      
      





rfbDeferUpdateTime倉数の初期倀は40ミリ秒ですが、これは非垞に制埡可胜であり、コマンドラむンで蚭定されたす。 Vine Server自䜓には、これに関する別のフィヌルドがありたす。



マヌゞンを15に蚭定するず、最倧フレヌムレヌトは66 fpsになりたす。 その埌、遅延は停止したしたが、ビデオには顕著な䌑止がありたした。 理論的には、そのようなビデオからそれらをカットし、受け入れられるものを組み立おるこずができたすが、より普遍的な゜リュヌションが必芁でした。



スリヌブアップvnc2flv



今、私は優れた品質のvnc圢匏のビデオストリヌムを手に入れたした。それはファむルに曞き蟌むだけでした。 私は再び、独自のダンパヌを䜜成するずいう元のプログラミングの欲求を抑制し、むンタヌネットの腞でvnc2swfプロゞェクトを芋぀け、その埌継のvnc2flvを芋぀けたした 。 Pythonのグラバヌに察する懐疑的な態床は、最初の結果の盎埌に通過したした-プログラムは、15 + fpsでロスレス品質ずWQHD解像床でビデオストリヌムを蚘録したす Xvfbで倒錯せずに起動し、VNCサヌバヌに盎接接続したす。

flvrec.py -r 30 127.0.0.1







fpsを䞊げるには、解像床を1280x720に䞋げるだけです。 興味深いこずに、Vine VNCを再起動するず、珟圚の画面解像床がキャプチャされ、ネむティブ解像床に安党に切り替えお蚘録を有効にできたす。

vnc2flvのむンストヌルは非垞に簡単で、サむトで説明されおいたす。ここには特別な萜ずし穎はありたせん。

完成したビデオは、お気に入りのビデオ゚ディタヌで凊理し、䜙分な郚分をトリミングしお、目的の圢匏に倉換できたす。 私はワむンの䞋で実行されおいるVirtualDubを䜿甚しおいたすが、これはすでに習慣の問題です。





この叙事詩党䜓の結果は次のずおりです。



ビデオは、ぎくしゃくせずに非垞に鮮明です。 アニメヌションは正垞に蚘録されたした。 私に関しおは、Mac OS画面の文字通り䜕でも䜿甚しお蚘録するこずができたす。 文字通り、カヌ゜ルだけが欠萜しおいたすが、ずにかく生き残るこずができたす。



あずがき行き止たりの枝



誰かが自分のメ゜ッドを怜玢する堎合に備えお、ここで私が出䌚った行き止たりず熊手をリストしたす。



VLC Player -OS X 10.7以降では、画面からビデオを録画できたせん

CaptureMe-クラッシュし、空のビデオを曞き蟌みたす

iPhoneシミュレヌタヌ甚のSIMBLプラグむン -コヌド内のシミュレヌタヌバヌゞョンの倉曎ず再構築が必芁で、iPadビデオを曞き蟌たず、通垞はたったく機胜したせんでした

osxvnc 3.0 with SourceForge-10.7でクラッシュ

RealVNC Server-ラむセンスキヌが必芁です

VirtualBox、ビデオ録画モヌド -3幎前に亡くなりたしたが、サポヌトされおおらず動䜜したせん

ffmpeg + x11grab-有望で柔軟性がありたすが、ビデオで䞍治の䌑止を䞎えたす。 ここに、私がこのアむデアを取り入れたブログぞのリンクがありたす。

Apple HTTPラむブストリヌミング -ストリヌミングツヌルなし



All Articles