(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-04
(45)【発行日】2024-07-12
(54)【発明の名称】中断可能な映像トランスコーディング
(51)【国際特許分類】
H04N 21/2343 20110101AFI20240705BHJP
H04N 19/40 20140101ALI20240705BHJP
【FI】
H04N21/2343
H04N19/40
【外国語出願】
(21)【出願番号】P 2022154760
(22)【出願日】2022-09-28
(62)【分割の表示】P 2021572084の分割
【原出願日】2019-09-23
【審査請求日】2022-10-20
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】グオ,ヤーロン
【審査官】富樫 明
(56)【参考文献】
【文献】特開2012-209702(JP,A)
【文献】米国特許第08855189(US,B1)
【文献】特開2006-135705(JP,A)
【文献】特表2008-507160(JP,A)
【文献】米国特許出願公開第2012/0265847(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 21/00-21/858
H04N 19/00-19/98
(57)【特許請求の範囲】
【請求項1】
映像をトランスコードするためのコンピュータによって実行される方法であって、
前記映像を取得するステップを備え、前記映像は、複数のトラックを含み、前記複数のトラックは、複数のキーフレームと複数の非キーフレームとを含む映像トラックを含み、各キーフレームおよび各非キーフレームは、対応するタイムスタンプに関連付けられ、前記方法はさらに、
前記映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断するステップと、
前記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、
前記トランスコードされたファイルの一部の先頭以外の前記トランスコードされたファイルの一部に関連付けられたタイムスタンプを取得するステップと、
前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプが前記映像トラックの前記複数のキーフレームのいずれのキーフレームとも一致しないことを判断するステップと、
トランスコーダを用いて前記映像の一部をトランスコードするステップとを備え、前記映像の前記一部は、前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプより前の前記複数のキーフレームのうちの前のキーフレームから開始し、前記方法はさらに、前記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、
前記トランスコードされたファイルの一部と前記映像の前記トランスコードされた一部とを組み合わせることによって、出力映像を生成するステップを備え、
前記出力映像を生成するステップは、
トランスコードされたフレームを前記複数のトラックの異なるトラックからバッファにバッファリングするステップと、
前記バッファが前記複数のトラックにわたって同期されるキーフレームを含むことが検出されると、前記出力映像の各チャンクをストレージに書き込むステップとを含み、各チャンクは、前記複数のトラックにわたって同期されるキーフレームに対応するタイムスタンプで終了し、前記出力映像を生成するステップは、さらに、
前記トランスコードにおいて生成された追加フレームを廃棄するステップを含む、方法。
【請求項2】
前記映像の前記一部は、前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプの直前の前記前のキーフレームから開始する、請求項1に記載のコンピュータによって実行される方法。
【請求項3】
前記トランスコーダによる前記映像の前記一部のトランスコード中に中断を受信するステップと、
前記中断を受信したことに応答して、前記トランスコーダの部分出力を含むように、前記トランスコードされたファイルの一部を更新するステップとをさらに備える、請求項
1または2に記載のコンピュータによって実行される方法。
【請求項4】
前記トランスコーダによって前記映像の最初から前記映像をトランスコードするステップと、
前記トランスコーダによる前記映像のトランスコード中の第1の時刻に第1の中断を受信するステップと、
前記第1の中断を受信したことに応答して、前記トランスコードされたファイルの一部として前記トランスコーダの第1の出力を保存し、前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプとして前記第1の時刻を格納するステップと、
前記第1の出力を保存した後に、前記トランスコーダによる前記映像の前記一部の前記トランスコード中の第2の時刻に第2の中断を受信するステップと、
前記第2の中断を受信したことに応答して、前記トランスコードされたファイルの一部に前記トランスコーダの第2の出力を追加することによって前記トランスコーダの前記第2の出力を保存し、前記トランスコードされたファイルの一部に関連付けられた第2のタイムスタンプとして前記第2の時刻を格納するステップと、
前記トランスコードされたファイルの一部に関連付けられた前記第2のタイムスタンプを取得するステップと、
前記トランスコーダを用いて前記映像の第2の部分をトランスコードするステップとをさらに備え、前記映像の前記第2の部分は、前記トランスコードされたファイルの一部に関連付けられた前記第2のタイムスタンプの後に映像を含み、
前記トランスコードされたファイルの一部と前記映像の前記トランスコードされた部分とを組み合わせるステップは、前記トランスコードされたファイルの一部と前記映像の前記トランスコードされた第2の部分とを組み合わせるステップを含む、請求項1~
3のいずれか1項に記載のコンピュータによって実行される方法。
【請求項5】
前記トランスコーダの前記第1の出力は、複数の部分出力トラックを含み、各部分出力トラックは、前記映像の前記複数のトラックの特定のトラックに対応し、前記方法はさらに、前記第1の中断に応答して、前記トランスコードされたファイルの一部に関連付けられた構成設定を保存するステップを備え、前記構成設定は、
前記複数の部分出力トラックの各々のフォーマット、または
ビットレートパラメータ、幅パラメータまたは高さパラメータのうちの1つまたは複数
のうちの1つまたは複数を含む、請求項
4に記載のコンピュータによって実行される方法。
【請求項6】
トランスコードのために複数の映像から前記映像を選択するステップをさらに備え、前記複数の映像は、トランスコードされたファイルの一部が入手可能でない前記複数の映像のうちの映像の前に、トランスコードされたファイルの一部が入手可能である前記複数の映像のうちの映像がトランスコードのために選択されるようにソートされる、請求項1~
5のいずれか1項に記載のコンピュータによって実行される方法。
【請求項7】
前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプは、複数の時刻値を含み、各時刻値は、前記複数のトラックのそれぞれのトラックに対応し、
前記映像の前記一部をトランスコードするステップは、
前記複数の時刻値
のそれぞれの時刻値から開始する前記複数のトラックの各々を復号して、対応する生データを取得するステップと、
前記復号された複数のトラックについて前記生データを符号化して、対応する出力トラックを取得するステップとを備える、請求項1~
6のいずれか1項に記載のコンピュータによって実行される方法。
【請求項8】
コンピューティングデバイスであって、
プロセッサと、
前記プロセッサに結合されたメモリとを備え、前記メモリには、前記プロセッサによって実行されると前記プロセッサに動作を実行させる命令が格納されており、前記動作は、
映像を取得するステップを備え、前記映像は、複数のトラックを含み、前記複数のトラックは、複数のキーフレームと複数の非キーフレームとを含む映像トラックを含み、各キーフレームおよび各非キーフレームは、対応するタイムスタンプに関連付けられ、前記動作はさらに、
前記映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断するステップと、
前記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、
前記トランスコードされたファイルの一部の先頭以外の前記トランスコードされたファイルの一部に関連付けられたタイムスタンプを取得するステップと、
前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプが前記映像トラックの前記複数のキーフレームのいずれのキーフレームとも一致しないことを判断するステップと、
トランスコーダを用いて前記映像の一部をトランスコードするステップとを備え、前記映像の前記一部は、前記トランスコードされたファイルの一部に関連付けられた前記タイムスタンプより前の前記複数のキーフレームのうちの前のキーフレームから開始し、前記動作はさらに、前記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、
前記トランスコードされたファイルの一部と前記映像の前記トランスコードされた一部とを組み合わせることによって、出力映像を生成するステップを備え、
前記出力映像を生成するステップは、
トランスコードされたフレームを前記複数のトラックの異なるトラックからバッファにバッファリングするステップと、
前記バッファが前記複数のトラックにわたって同期されるキーフレームを含むことが検出されると、前記出力映像の各チャンクをストレージに書き込むステップとを含み、各チャンクは、前記複数のトラックにわたって同期されるキーフレームに対応するタイムスタンプで終了し、前記出力映像を生成するステップは、さらに、
前記トランスコードにおいて生成された追加フレームを廃棄するステップを含む、コンピューティングデバイス。
【発明の詳細な説明】
【背景技術】
【0001】
ユーザは、スマートフォン、タブレット、コンピュータ、ウェアラブルデバイス、カメラなどのさまざまなデバイスを使用して映像を取り込む。映像ファイルは、映像の長さ、映像で使用される符号化のタイプ、映像の解像度および/またはビットレートなどに基づいて、サイズが大きい(たとえば、数メガバイトまたはギガバイトである)場合がある。取り込まれた映像は、デバイスまたはサーバ上に(たとえば、ユーザの画像または映像ライブラリ内に)ローカルに格納され得る。たとえば、ユーザは、バックアップのため、映像を他のユーザと共有するためなどの目的で、映像をサーバ上に格納し得る。ユーザは、たとえばメッセージングまたはソーシャルネットワーキングサービスを介して映像を他のユーザと直接共有し得る。
【0002】
大きな映像ファイルを格納することは、大量の記憶容量を必要とする。大きな映像ファイルをサーバに送信することは、相当なネットワークリソース(たとえば、帯域幅)を必要とする。映像のトランスコーディングまたは圧縮は、より低い解像度、より低いビットレートなどで映像を再符号化することを可能にし得るため、映像を格納するために必要とされる記憶容量および映像をサーバまたは別のユーザのユーザデバイスに送信するために使用されるネットワークリソースが元の映像よりも少なくなる。
【0003】
本明細書に提供される背景の記載は、本開示の文脈を概略的に示すことを目的としている。この背景セクションに記載される範囲内で、ここに名前を挙げられている発明者等の研究は、出願時に先行技術としての資格を有しない記載の側面と同様に、明示的または黙示的を問わず本開示に対する先行技術として認められるものではない。
【発明の概要】
【0004】
本明細書に記載されている実現例は、映像をトランスコードするための方法、デバイスおよびコンピュータ読取可能媒体に関する。
【0005】
いくつかの実現例において、コンピュータによって実行される方法は、複数のトラックを含む映像を取得するステップを含む。上記方法はさらに、上記映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断するステップを含み得る。上記方法はさらに、上記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、上記トランスコードされたファイルの一部に関連付けられたタイムスタンプを取得するステップと、トランスコーダを用いて上記映像の一部をトランスコードするステップとを含み得て、上記映像の上記一部は、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプから開始し、上記方法はさらに、上記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、上記トランスコードされたファイルの一部と上記映像の上記トランスコードされた一部とを組み合わせて、出力映像を生成するステップを含み得る。
【0006】
上記方法はさらに、上記トランスコードされたファイルの一部が入手可能でないと判断したことに応答して、複数の出力トラックを取得するために、上記トランスコーダを使用して上記映像をトランスコードするステップを含み得て、上記トランスコードするステップは、上記映像の最初から実行され、上記方法はさらに、上記トランスコードされたファイルの一部が入手可能でないと判断したことに応答して、上記複数の出力トラックを組み合わせて、上記出力映像を取得するステップを含み得る。いくつかの実現例において、上記出力映像は、上記映像の解像度よりも低い解像度、または、上記映像のビットレートよりも低いビットレートを有してもよい。
【0007】
いくつかの実現例において、上記方法はさらに、上記トランスコーダによる上記映像のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの出力を上記トランスコードされたファイルの一部として保存するステップとを含み得る。いくつかの実現例において、上記トランスコーダの上記出力は、複数の部分出力トラックを含み得て、各部分出力トラックは、上記映像の上記複数のトラックの特定のトラックに対応する。これらの実現例において、上記方法はさらに、上記中断に応答して、上記トランスコードされたファイルの一部に関連付けられた構成設定を保存するステップを含み得る。いくつかの実現例において、上記構成設定は、ビットレートパラメータ、幅パラメータまたは高さパラメータを含み得る。
【0008】
いくつかの実現例において、上記トランスコードされたファイルの一部が入手可能であるか否かを判断するステップは、ストレージデバイスにアクセスして、上記トランスコードされたファイルの一部が上記ストレージデバイス上に格納されるか否かを判断するステップを含み得る。上記トランスコードされたファイルの一部が上記ストレージデバイス上に格納されない場合、上記トランスコードされたファイルの一部が入手可能でないと判断される。上記方法は、上記トランスコードされたファイルの一部が上記ストレージデバイス上に格納される場合、上記トランスコーダの現在の構成設定が、上記トランスコードされたファイルの一部に関連付けられた上記構成設定と一致するか否かを判断するステップを含み得る。上記方法は、上記現在の構成設定が一致する場合、上記トランスコードされたファイルの一部が入手可能であると判断するステップを含み得る。上記方法は、上記現在の構成設定が一致しない場合、上記トランスコードされたファイルの一部が入手可能でないと判断するステップを含み得る。いくつかの実現例において、上記方法は、上記トランスコードされたファイルの一部を上記ストレージデバイスから削除するステップを含み得る。
【0009】
いくつかの実現例において、上記方法はさらに、上記トランスコーダによる上記映像の上記一部のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの部分出力を含むように上記トランスコードされたファイルの一部を更新するステップとを含み得る。
【0010】
いくつかの実現例において、上記映像をトランスコードするステップは、上記映像の上記複数のトラックのうちの1つまたは複数を復号して、対応する生データを取得するステップと、上記複数のトラックのうちの上記復号された1つまたは複数について上記生データを符号化して、上記複数の出力トラックの対応する出力トラックを取得するステップとを含み得る。いくつかの実現例において、上記複数のトラックは、少なくとも1つの音声トラックと、少なくとも1つの映像トラックとを含んでもよい。いくつかの実現例において、上記複数のトラックは、メタデータトラックをさらに含んでもよい。
【0011】
いくつかの実現例において、上記少なくとも1つの映像トラックは、複数のキーフレームと、複数の非キーフレームとを含み得る。各キーフレームおよび各非キーフレームは、対応するタイムスタンプに関連付けられてもよい。いくつかの実現例において、トランスコードされたファイルの一部に関連付けられた上記タイムスタンプは、上記複数のキーフレームのうちの特定のキーフレームに対応してもよい。
【0012】
いくつかの実現例において、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプは、複数の時刻値を含んでもよい。各時刻値は、上記複数のトラックのそれぞれのトラックに対応してもよい。これらの実現例において、上記映像の上記一部をトランスコードするステップは、上記複数の時刻値の上記それぞれの時刻値から開始する上記複数のトラックの各々を復号して、対応する生データを取得するステップと、上
記複数のトラックのうちの上記復号された1つまたは複数について上記生データを符号化して、上記複数の出力トラックのうちの対応する出力トラックを取得するステップとを含み得る。
【0013】
いくつかの実現例は、プロセッサと、上記プロセッサに結合されたメモリとを含むコンピューティングデバイスを含み、上記メモリには、命令が格納されている。上記命令は、上記プロセッサによって実行されると上記プロセッサに動作を実行させる。上記動作は、複数のトラックを含む映像を取得するステップと、上記映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断するステップとを備える。
【0014】
上記トランスコードされたファイルの一部が入手可能であると判断したことに応答して、上記プロセッサは、上記トランスコードされたファイルの一部に関連付けられたタイムスタンプを取得するステップと、トランスコーダを用いて上記映像の一部をトランスコードするステップと、上記トランスコードされたファイルの一部と上記映像の上記トランスコードされた一部とを組み合わせて、出力映像を生成するステップとを含む動作を実行してもよい。上記映像の上記一部は、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプから開始してもよい。
【0015】
上記トランスコードされたファイルの一部が入手可能でないと判断したことに応答して、上記プロセッサは、複数の出力トラックを取得するために、上記トランスコーダを使用して上記映像をトランスコードするステップと、上記複数の出力トラックを組み合わせて、上記出力映像を取得するステップとを含む動作を実行してもよい。上記トランスコードするステップは、上記映像の最初から実行されてもよい。
【0016】
いくつかの実現例において、上記メモリには、上記プロセッサにさらなる動作を実行させるさらなる命令が格納され得て、上記さらなる動作は、上記トランスコーダによる上記映像のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの出力を上記トランスコードされたファイルの一部として保存するステップとを含む。
【0017】
上記トランスコーダの上記出力は、複数の部分出力トラックを含んでもよい。各部分出力トラックは、上記映像の上記複数のトラックの特定のトラックに対応してもよい。いくつかの実現例において、上記動作はさらに、上記中断に応答して、上記トランスコードされたファイルの一部に関連付けられた構成設定を保存するステップを含み得る。いくつかの実現例において、上記構成設定は、上記複数の部分出力トラックの各々のフォーマットを含んでもよい。いくつかの実現例において、上記構成設定は、ビットレートパラメータ、幅パラメータまたは高さパラメータのうちの1つまたは複数を含んでもよい。
【0018】
いくつかの実現例において、上記メモリには、上記プロセッサにさらなる動作を実行させるさらなる命令が格納され得て、上記さらなる動作は、上記トランスコーダによる上記映像の上記一部のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの部分出力を含むように上記トランスコードされたファイルの一部を更新するステップとを含む。
【0019】
いくつかの実現例は、プロセッサによって実行されると上記プロセッサに動作を実行させる命令が格納された非一時的なコンピュータ読取可能媒体を含み、上記動作は、複数のトラックを含む映像を取得するステップと、上記映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断するステップとを含む。
【0020】
上記動作はさらに、上記トランスコードされたファイルの一部が入手可能であると判断
したことに応答して、上記トランスコードされたファイルの一部に関連付けられたタイムスタンプを取得するステップと、トランスコーダを用いて上記映像の一部をトランスコードするステップと、上記トランスコードされたファイルの一部と上記映像の上記トランスコードされた一部とを組み合わせて、出力映像を生成するステップとを含み得る。上記映像の上記一部は、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプから開始してもよい。
【0021】
上記動作はさらに、上記トランスコードされたファイルの一部が入手可能でないと判断したことに応答して、複数の出力トラックを取得するために、上記トランスコーダを使用して上記映像をトランスコードするステップを含み得て、上記トランスコードするステップは、上記映像の最初から実行され、上記動作はさらに、上記トランスコードされたファイルの一部が入手可能でないと判断したことに応答して、上記複数の出力トラックを組み合わせて、上記出力映像を取得するステップを含み得る。
【0022】
いくつかの実現例において、上記非一時的なコンピュータ読取可能媒体は、上記プロセッサにさらなる動作を実行させるさらなる命令が格納され得て、上記さらなる動作は、上記トランスコーダによる上記映像のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの出力を上記トランスコードされたファイルの一部として保存するステップとを含み得る。
【0023】
いくつかの実現例において、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプは、複数の時刻値を含み得る。各時刻値は、上記複数のトラックのそれぞれのトラックに対応してもよい。これらの実現例において、上記映像の上記一部をトランスコードする動作は、上記複数の時刻値の上記それぞれの時刻値から開始する上記複数のトラックの各々を復号して、対応する生データを取得するステップと、上記複数のトラックのうちの上記復号された1つまたは複数について上記生データを符号化して、上記複数の出力トラックのうちの対応する出力トラックを取得するステップとを含み得る。
【0024】
いくつかの実現例において、コンピュータによって実行される方法は、複数のトラックを含む映像を取得するステップを含む。上記方法はさらに、上記映像に対応するトランスコードされたファイルの一部を取得するステップを含み、上記トランスコードされたファイルの一部にはタイムスタンプが関連付けられる。上記方法はさらに、トランスコーダを用いて上記映像の一部をトランスコードするステップを含み、上記映像の上記一部は、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプから開始する。上記方法はさらに、上記トランスコードされたファイルの一部と上記映像の上記トランスコードされた一部とを組み合わせて、出力映像を生成するステップを含む。いくつかの実現例において、上記出力映像は、上記映像の解像度よりも低い解像度、または、上記映像のビットレートよりも低いビットレートのうちの少なくとも1つを有する。
【0025】
いくつかの実現例において、上記方法はさらに、上記トランスコーダによる上記映像の上記一部のトランスコード中に中断を受信するステップと、上記中断に応答して、上記トランスコーダの部分出力を含むように上記トランスコードされたファイルの一部を更新するステップとを含み得る。
【0026】
いくつかの実現例において、上記トランスコーダの上記部分出力は、複数の部分出力トラックを含む。いくつかの実現例において、各部分出力トラックは、上記映像の上記複数のトラックのそれぞれのトラックに対応する。いくつかの実現例において、上記方法はさらに、上記中断に応答して、上記トランスコードされたファイルの一部に関連付けられた構成設定を保存するステップを含み得る。いくつかの実現例において、上記構成設定は、上記複数の部分出力トラックの各々のフォーマット、または、ビットレートパラメータ、
幅パラメータまたは高さパラメータのうちの1つまたは複数、のうちの1つまたは複数を含む。
【0027】
いくつかの実現例において、上記複数のトラックは、複数のキーフレームと複数の非キーフレームとを含む少なくとも1つの映像トラックを含む。いくつかの実現例において、各キーフレームおよび各非キーフレームは、対応するタイムスタンプに関連付けられる。いくつかの実現例において、上記トランスコードされたファイルの一部に関連付けられた上記タイムスタンプは、上記複数のキーフレームのうちの特定のキーフレームに対応する。
【0028】
いくつかの実現例において、上記タイムスタンプは、複数の時刻値を含む。いくつかの実現例において、上記複数の時刻値の各時刻値は、上記複数のトラックのそれぞれのトラックに対応する。いくつかの実現例において、上記映像の上記一部をトランスコードするステップは、上記複数の時刻値の上記それぞれの時刻値から開始する上記複数のトラックの各々を復号して、対応する生データを取得するステップと、上記複数のトラックのうちの上記復号された1つまたは複数について上記生データを符号化して、上記複数の出力トラックのうちの対応する出力トラックを取得するステップとを含み得る。
【図面の簡単な説明】
【0029】
【
図1】本明細書に記載されている1つまたは複数の実現例に使用され得る例示的なネットワーク環境のブロック図である。
【
図2】いくつかの実現例に係る、映像をトランスコードするための例示的な方法を示すブロック図である。
【
図3】いくつかの実現例に係る、映像をトランスコードするための例示的な処理パイプラインを示す図である。
【
図4】本明細書に記載されている1つまたは複数の実現例に使用され得る例示的なデバイスのブロック図である。
【発明を実施するための形態】
【0030】
映像のトランスコーディングまたは圧縮は、リソース集約的かつゆっくりとしたプロセスである。映像をトランスコードすることは、たとえばトランスコーディングに使用される処理容量、メモリおよびエネルギの観点から、計算コストが高い動作であり得る。たとえば、高品質映像(4K映像または高精細度(HD)映像など)をクライアントデバイス(スマートフォンまたはタブレットなど)上で圧縮することは、この圧縮を実行するデバイスの構成によっては、相当な時間(たとえば、映像の長さに等しい時間、映像の長さの2倍の時間、またはそれよりも長い時間)を要する可能性がある。さらに、圧縮は計算コストが高い動作であるので、ユーザがクライアントデバイスを積極的に使用している間は圧縮を実行することは実施不可能であることが多い。なぜなら、このような動作は、ユーザタスクのためのクライアントデバイスの利用可能性および/または応答性に影響を及ぼし得るからである。
【0031】
このような状況を回避する1つの技術は、ユーザがクライアントデバイスを積極的に使用していない間(たとえば、クライアントデバイスがアイドルである間)に映像圧縮を実行するというものである。しかし、たとえばユーザアクション、オペレーティングシステム中断などにより圧縮が中断されると、圧縮を再開する必要があり、計算リソースを無駄にすることになる。
【0032】
さらに、映像を圧縮するのに必要な時間は、映像の長さとともに増加し、それによって、このような映像の圧縮プロセス中の中断の可能性も高くなる。たとえば、圧縮動作の一部(たとえば、10%)が中断されると、このような圧縮を一から再開する必要がある。
さらに、スマートフォン、タブレット、ラップトップなどのバッテリ制約付きデバイス上では、このような無駄な計算は、オンデバイスで利用できる量が限られている場合には、エネルギも無駄にすることになる。
【0033】
これらの問題のうちの一部に鑑みて、本明細書に記載されている実現例を思い付いた。本明細書に記載されている実現例に従って、映像トランスコーディング動作が中断された時点からトランスコーディング動作を再開することを可能にする映像トランスコーディング技術が記載されている。中断時にトランスコードされたファイルの一部が保存され、このトランスコードされたファイルの一部をその後のトランスコーディング動作中に使用することにより、計算リソースおよびエネルギの無駄を排除または低減する。記載されている実現例は、単一のトラックを有する映像、複数のトラックを有する映像などを含むいかなるタイプの映像も処理することができる。
【0034】
図1は、本明細書に記載されているいくつかの実現例において使用され得る例示的なネットワーク環境100のブロック図を示す。いくつかの実現例において、ネットワーク環境100は、1つまたは複数のサーバシステム(たとえば、
図1の例では、サーバシステム102および第2のサーバシステム140)を含む。サーバシステム102および140は、たとえばネットワーク130と通信することができる。サーバシステム102は、サーバデバイス104と、データベース106または他のストレージデバイスとを含み得る。いくつかの実現例において、サーバデバイス104は、画像アプリケーション156bを提供し得る。第2のサーバシステム140は、1つまたは複数のアプリケーション(たとえば、アプリケーションA144、アプリケーションB146およびアプリケーションC148)を提供するように構成された第2のサーバデバイス142を含み得る。
図1および残りの図において、参照番号の後の文字(たとえば、「156a」)は、その特定の参照番号を有する要素への言及を表す。後ろに文字を持たない本文中の参照番号(たとえば、「156」)は、その参照番号を有する要素の実施形態への一般的言及を表す。
【0035】
ネットワーク環境100は、互いにならびに/またはネットワーク130を介してサーバシステム102および/もしくは第2のサーバシステム140と通信し得る1つまたは複数のクライアントデバイス(たとえば、クライアントデバイス120,122,124および126)も含み得る。ネットワーク130は、インターネット、ローカルエリアネットワーク(LAN)、ワイヤレスネットワーク、スイッチまたはハブ接続などのうちの1つまたは複数を含む任意のタイプの通信ネットワークであり得る。いくつかの実現例において、ネットワーク130は、たとえばピアツーピアワイヤレスプロトコル(たとえば、ブルートゥース(登録商標)、Wi-Fiダイレクトなど)などを使用したデバイス間のピアツーピア通信を含み得る。2つのクライアントデバイス120および122間のピアツーピア通信の一例は、矢印132によって示されている。
【0036】
説明を容易にするために、
図1は、サーバシステム102、サーバデバイス104、データベース106、第2のサーバシステム140および第2のサーバデバイス142のために1つのブロックを示し、クライアントデバイス120,122,124および126のために4つのブロックを示している。サーバブロック102,104,106,140および142は、複数のシステム、サーバデバイスおよびネットワークデータベースを表し得て、これらのブロックは、示されている構成とは異なる構成で設けられ得る。たとえば、サーバシステム102および/または第2のサーバシステム140は、ネットワーク130を介して他のサーバシステムと通信することができる複数のサーバシステムを表し得る。いくつかの実現例において、サーバシステム102および/または第2のサーバシステム140は、たとえばクラウドホスティングサーバを含み得る。いくつかの例では、データベース106および/または他のストレージデバイスは、サーバデバイス104から分離してネットワーク130を介してサーバデバイス104および他のサーバシステム
と通信することができるサーバシステムブロック内に設けられ得る。
【0037】
また、任意の数のクライアントデバイスがあってもよい。各クライアントデバイスは、任意のタイプの電子デバイス(たとえば、デスクトップコンピュータ、ラップトップコンピュータ、ポータブルもしくはモバイルデバイス、携帯電話、スマートフォン、タブレットコンピュータ、テレビ、TVセットトップボックスもしくはエンターテインメントデバイス、ウェアラブルデバイス(たとえば、ディスプレイグラスまたはゴーグル、腕時計、ヘッドセット、アームバンド、宝石類など)、パーソナルデジタルアシスタント(PDA)、メディアプレーヤ、ゲームデバイスなど)であり得る。クライアントデバイスの中には、データベース106と同様のローカルデータベースまたは他のストレージを有しているものもある。いくつかの実現例において、ネットワーク環境100は、示されているコンポーネントを全て有していなくてもよく、および/または、本明細書に記載されている要素の代わりにまたはそれらに加えて、他のタイプの要素を含む他の要素を有していてもよい。
【0038】
さまざまな実現例において、エンドユーザU1,U2,U3およびU4は、それぞれのクライアントデバイス120,122,124および126を使用してサーバシステム102とおよび/または互いに通信し得る。いくつかの例では、ユーザU1,U2,U3およびU4は、それぞれのクライアントデバイスおよび/もしくはサーバシステム102もしくは第2のサーバシステム140上で実行されるアプリケーションを介して、ならびに/または、サーバシステム102もしくは第2のサーバシステム140上で実現されるネットワークサービス(たとえば、ソーシャルネットワークサービスもしくは他のタイプのネットワークサービス)を介して、互いに対話し得る。たとえば、それぞれのクライアントデバイス120,122,124および126は、1つまたは複数のサーバシステム(たとえば、システム102、第2のサーバシステム140)との間でデータをやりとりしてもよい。
【0039】
いくつかの実現例において、サーバシステム102および/または第2のサーバシステム140は、適切なデータをクライアントデバイスに提供し得るため、各クライアントデバイスは、サーバシステム102もしくは第2のサーバシステム140にアップロードされたやりとりされたコンテンツもしくは共有のコンテンツ、および/または、ネットワークサービスを受信することができる。いくつかの例では、ユーザU1~U4は、電話もしくはビデオ会議、音声、映像もしくはテキストチャット、または他の通信モードもしくはアプリケーションを介して対話することができる。
【0040】
サーバシステム102または第2のサーバシステム140によって実現されるネットワークサービスは、ユーザがさまざまな通信を実行して、リンクおよび関連性を形成して、共有コンテンツ(画像、テキスト、映像、音声および他のタイプのコンテンツなど)をアップロードおよび投稿して、ならびに/または、他の機能を実行することを可能にするシステムを含み得る。たとえば、クライアントデバイスは、クライアントデバイスに送信またはストリーミングされたコンテンツ投稿などの受信データを表示することができ、この受信データは、サーバおよび/またはネットワークサービスを介して異なるクライアントデバイスから(または、異なるクライアントデバイスから直接)発生し、または、サーバシステムおよび/またはネットワークサービスから発生する。いくつかの実現例において、クライアントデバイスは、たとえば上記のクライアントデバイス間のピアツーピア通信を使用して互いに直接通信することができる。いくつかの実現例において、「ユーザ」は、1つまたは複数のプログラムまたは仮想エンティティを含み、システムまたはネットワークと接続する人も含み得る。
【0041】
いくつかの実現例において、クライアントデバイス120,122,124および/ま
たは126はいずれも、1つまたは複数のアプリケーションを提供することができる。たとえば、
図1に示されるように、クライアントデバイス120は、画像アプリケーション156aと、1つまたは複数の他のアプリケーション154とを提供し得る。クライアントデバイス122~126も同様のアプリケーションを提供し得る。画像アプリケーション156aは、クライアントデバイス120のハードウェアおよび/またはソフトウェアを使用して実現されてもよい。異なる実現例では、画像アプリケーション156aは、たとえばクライアントデバイス120~124のいずれかで実行されるスタンドアロンのクライアントアプリケーションであってもよく、または、サーバシステム102上に提供される画像アプリケーション156bとともに機能してもよい。画像アプリケーション156aおよび画像アプリケーション156bは、画像および/または映像に関連するさまざまな機能を提供してもよい。たとえば、このような機能は、カメラを使用して画像または映像を取り込むこと、画像または映像を分析して1つまたは複数のタグを関連付けること、画像または映像を修正すること、画像または映像をライブラリまたはデータベース内に格納することなどのうちの1つまたは複数を含み得る。
【0042】
いくつかの実現例において、画像アプリケーション156は、ユーザが画像および/または映像を格納しているライブラリまたはデータベースを管理することを可能にし得る。たとえば、ユーザは、クライアントデバイス(たとえば、クライアントデバイス120~126のいずれか)上の画像アプリケーション156aのバックアップ機能を使用して、このクライアントデバイス上のローカル画像または映像をサーバデバイス(たとえば、サーバデバイス104)にバックアップしてもよい。たとえば、ユーザは、バックアップ対象の1つまたは複数の画像または映像を手動で選択してもよく、またはバックアップ対象の画像または映像を特定するバックアップ設定を指定してもよい。画像または映像をサーバデバイスにバックアップすることは、たとえばサーバデバイス104上の画像アプリケーション156bと連携して、サーバによる格納のために画像または映像をサーバに送信することを含み得る。
【0043】
いくつかの実現例において、映像は、バックアップのために映像をサーバに送信する前に映像のファイルサイズを小さくするように圧縮されてもよい。たとえば、このような圧縮は、映像のビットレート、映像の解像度または映像のフレームレートのうちの1つまたは複数を小さくするように映像をトランスコードすることを含み得る。トランスコードすることは、映像のファイルフォーマットを変更することも含んでもよい。映像のファイルサイズを小さくすることにより、クライアントデバイスからサーバに映像を送信するために使用されるネットワークの量が減少する。さらに、ファイルサイズが小さくなることにより、映像を元のフォーマットで格納する場合と比較して、映像をサーバに格納するのに必要な記憶容量の量が減少する。いくつかの実現例において、画像アプリケーション156は、たとえば中断が受信されたことに応答してトランスコーディング動作を一時停止して、その後トランスコーディング動作を再開することをサポートする映像トランスコーディングを実現し得る。
【0044】
いくつかの実現例において、クライアントデバイス120は、1つまたは複数の他のアプリケーション154を含み得る。たとえば、他のアプリケーション154は、さまざまなタイプの機能、たとえばカレンダ、アドレスブック、電子メール、ウェブブラウザ、ショッピング、交通機関(たとえば、タクシー、電車、飛行機予約など)、エンターテインメント(たとえば、音楽プレーヤ、ビデオプレーヤ、ゲームアプリケーションなど)、ソーシャルネットワーキング(たとえば、メッセージングまたはチャット、音声/ビデオ通話、画像/映像共有など)などを提供するアプリケーションであってもよい。いくつかの実現例において、他のアプリケーション154のうちの1つまたは複数は、クライアントデバイス120上で実行されるスタンドアロンのアプリケーションであってもよい。いくつかの実現例において、他のアプリケーション154のうちの1つまたは複数は、他のア
プリケーション154のデータおよび/または機能を提供するサーバシステム(たとえば、サーバシステム102および/または第2のサーバシステム140)にアクセスしてもよい。たとえば、第2のサーバシステム140によって提供されるものとして示されているアプリケーション144,146および148のうちのいずれかが他のアプリケーション154のうちの1つまたは複数にデータおよび/またはコマンドを提供してもよい。いくつかの実現例において、サーバアプリケーション144~148は、たとえばウェブブラウザまたは他のクライアント側プログラムを介してクライアントデバイスによってアクセスされるスタンドアロンのアプリケーションであってもよい。
【0045】
クライアントデバイス120,122,124および/または126上のユーザインターフェイスは、ユーザコンテンツおよび他のコンテンツ(画像、映像、データ、他のコンテンツ、通信、プライバシ設定、通知、および他のデータを含む)の表示を可能にすることができる。このようなユーザインターフェイスは、クライアントデバイス上のソフトウェア、サーバデバイス上のソフトウェア、ならびに/または、サーバデバイス104および/もしくは第2のサーバデバイス142上で実行されるクライアントソフトウェアとサーバソフトウェアとの組み合わせ(たとえば、サーバシステム102および/もしくは第2のサーバデバイス142と通信するアプリケーションソフトウェアまたはクライアントソフトウェア)を使用して表示することができる。ユーザインターフェイスは、クライアントデバイスまたはサーバデバイスのディスプレイデバイス(たとえば、タッチスクリーンまたは他のディスプレイスクリーン、プロジェクタなど)によって表示することができる。いくつかの実現例において、サーバシステム上で実行されるアプリケーションプログラムは、クライアントデバイスと通信して、クライアントデバイスにおいてユーザ入力を受信し、クライアントデバイスにおいて視覚データ、音声データなどのデータを出力することができる。
【0046】
本明細書に記載されている特徴の他の実現例は、任意のタイプのシステムおよび/またはサービスを使用することができる。たとえば、ソーシャルネットワーキングサービスの代わりにまたはそれに加えて、他のネットワーク接続された(たとえば、インターネットに接続された)サービスを使用することができる。いかなるタイプの電子デバイスも、本明細書に記載されている特徴を利用することができる。いくつかの実現例は、コンピュータネットワークから切り離されたり、コンピュータネットワークに断続的に接続されたりする1つまたは複数のクライアントまたはサーバデバイス上で、本明細書に記載されている1つまたは複数の特徴を提供することができる。いくつかの例において、ディスプレイデバイスを含むまたはディスプレイデバイスに接続されたクライアントデバイスは、クライアントデバイスにローカルなストレージデバイス上に格納された(たとえば、通信ネットワークを介して前もって受信された)コンテンツポストを表示することができる。
【0047】
本明細書において参照される画像は、1つまたは複数の画素値(たとえば、色値、輝度値など)を有する画素を有するデジタル画像を含み得る。画像は、静止画像(たとえば、静止写真、単一のフレームを有する画像など)、動的画像(たとえば、動画、動画GIF、画像の一部が動画を含むが他の部分が静止しているシネマグラフなど)、または映像(たとえば、音声を含み得る画像または画像フレームのシーケンス)であり得る。本明細書の残りの部分では静止画像としての画像を参照するが、本明細書に記載されている技術は、動的画像、映像などにも適用可能であるということが理解され得る。たとえば、本明細書に記載されている実現例は、静止画像(たとえば、写真または他の画像)、映像または動的画像とともに使用することができる。
【0048】
図2は、いくつかの実現例に係る、映像をトランスコードするための例示的な方法200を示すフロー図である。いくつかの実現例において、方法200は、たとえば、
図1に示されるサーバシステム102上で実行することができる。いくつかの実現例において、
方法200のうちの一部または全ては、
図1に示される1つまたは複数のクライアントデバイス120,122,124または126、1つまたは複数のサーバデバイス、および/または、サーバデバイスおよびクライアントデバイスの両方で実行することができる。記載されている例において、実行するシステムは、1つまたは複数のデジタルプロセッサまたは処理回路(「プロセッサ」)と、1つまたは複数のストレージデバイス(たとえば、データベース106または他のストレージ)とを含む。いくつかの実現例において、1つまたは複数のサーバおよび/またはクライアントのさまざまなコンポーネントが方法200のさまざまなブロックまたは他の部分を実行することができる。いくつかの例において、第1のデバイスは、方法200のブロックを実行するものとして記載されている。いくつかの実現例は、結果またはデータを第1のデバイスに送信することができる1つまたは複数の他のデバイス(たとえば、他のクライアントデバイスまたはサーバデバイス)によって実行される方法200の1つまたは複数のブロックを有し得る。
【0049】
いくつかの実現例において、方法200または方法の一部は、システムによって自動的に起動され得る。いくつかの実現例において、実行するシステムは、第1のデバイスである。たとえば、方法(または、その一部)は、定期的に実行されるか、または、1つまたは複数の特定のイベントまたは条件(たとえば、クライアントデバイスがアイドル状態に入る、バックアップされていない映像の閾値数、新たな映像がクライアントデバイスに取り込まれるまたは格納される、方法200の最後の実行から予め定められた期間が過ぎた、および/または、方法によって読み取られる設定において指定されることができる1つまたは複数の他の条件の発生)に基づいて実行され得る。
【0050】
方法200は、ブロック202から開始し得る。ブロック202において、映像を取得する。たとえば、映像は、クライアントデバイス120~126のいずれかによって取り込まれるかまたは取得された映像であってもよい。いくつかの実現例において、映像は、複数のトラックを含み得る。たとえば、複数のトラックは、1つまたは複数の音声トラックおよび/または1つまたは複数の映像トラックを含み得る。1つまたは複数の音声トラックは、たとえば単一の音声トラック(モノサウンド)、2つの音声トラック(ステレオサウンド)、3つ以上の音声トラック(たとえば、サラウンドサウンドでは、各言語について1つのトラックなど)、またはその他の数の音声トラックを含み得る。1つまたは複数の映像トラックは、たとえば単一の映像トラック、2つの映像トラック(たとえば、三次元映像の場合)などを含み得る。いくつかの実現例において、映像は、1つまたは複数のメタデータトラックも含み得る。たとえば、メタデータトラックは、1つまたは複数の言語でのテキストキャプション、映像についての情報(たとえば、取り込み場所、取り込み時刻、MIMEフォーマット)などを含み得る。
【0051】
映像トラックは、複数のフレームを含み得て、複数のフレームは、複数のキーフレームと、複数の非キーフレームとを含む。各映像フレームは、対応するタイムスタンプに関連付けられてもよい。複数のフレームは、それぞれのタイムスタンプに基づいて順番に配置されてもよい。いくつかの実現例において、キーフレームは、復号するために他の映像フレームを必要としないイントラコード化フレーム(I-フレーム)を含み得る。いくつかの実現例において、非キーフレームは、予測フレーム(P-フレーム)を含み得る。P-フレームの復号は、1つまたは複数の前のフレームからのデータを必要とし得る。いくつかの実現例において、非キーフレームは、双方向予測フレーム(B-フレーム)を含み得る。B-フレームの復号は、1つまたは複数の前のフレームおよび1つまたは複数の後続のフレームからのデータを必要とし得る。フレームの復号は、関連付けられたタイムスタンプに基づいて実行され得る。
【0052】
いくつかの実現例において、映像は、可逆圧縮を使用して展開または圧縮される高品質映像であってもよい。高品質映像は、高いビットレートおよび高い解像度を有し得る。た
とえば、スマートフォンまたは他のデバイスを使用して取り込まれる高品質映像は、4K映像(たとえば、4096画素の水平画素解像度を有する)、高精細度(HD)映像(たとえば、1080画素の水平画素解像度を有する)などであってもよい。ビットレートは、映像の色情報(たとえば、24ビットカラー、16ビットカラーなど)に対応し得る。高品質映像は、大量の記憶容量を必要とし得て、たとえば1分の4K映像は、数百メガバイトのストレージ(たとえば、300MB以上)を必要とし得て、1分の高精細度映像は、100メガバイトを超えるストレージを必要とし得る。さらに、たとえばサーバ(たとえば、サーバデバイス104)上での格納のためにネットワークを介して高品質映像を送信することは、相当な量のネットワークリソースを必要とし得る。
【0053】
音声トラックは、複数の音声サンプルまたは音声フレームを含み得る。各音声サンプルまたは音声フレームは、対応するタイムスタンプに関連付けられてもよい。いくつかの実現例において、映像内の音声トラックおよび映像トラックのフレームは、同期されてもよい。たとえば、各音声フレームは、同一のタイムスタンプに関連付けられるように映像の特定のフレーム(たとえば、特定のキーフレーム(または、他のフレーム))に対応し得る。いくつかの実現例において、音声トラックおよび映像トラックは、映像フレームに関連付けられたタイムスタンプが、音声フレームに関連付けられたタイムスタンプとは異なるように、相互に独立していてもよい。たとえば、映像内の映像トラックが30フレーム毎秒(fps)のフレームレートを有する場合、30タイムスタンプ毎秒であり得るが、同一映像の音声トラックは、より少ない(たとえば、1、2、5など)タイムスタンプ毎秒を有し得る。
【0054】
いくつかの実現例において、メタデータトラックもタイムスタンプに関連付けられてもよい。たとえば、キャプションまたはテキストメタデータがタイムスタンプに関連付けられてもよい。メタデータトラックに関連付けられたタイムスタンプは、映像トラックのものと同期されてもよく、または独立していてもよい。
【0055】
いくつかの実現例において、映像をトランスコードすることは、たとえば映像を異なるビットレートおよび/または解像度に変換することを含み得る。いくつかの実現例において、トランスコードは、映像のフレームレートを変更することを含み得る。たとえば、使用される記憶容量の量を少なくするように映像を圧縮するため、サーバに映像をバックアップする前に映像を圧縮するために、方法200がクライアントデバイス上で実行される場合、トランスコードは、トランスコードした後に取得される出力映像が映像よりも小さなファイルサイズを有するように、ビットレートを小さくすること、映像の解像度を下げること、映像のフレームレートを小さくすることなどのうちの1つまたは複数を含み得る。さまざまな実現例において、トランスコーディングパラメータは、特定の圧縮率(たとえば、4:1)、特定のターゲット解像度(たとえば、4K映像からHD映像への変更など)などを対象にするように選択されてもよい。いくつかの実現例において、トランスコードは、映像のファイルタイプを変更してもよく、たとえば映像を、映像が格納されている元のファイルタイプとは異なるファイルタイプに変換してもよい。
【0056】
いくつかの例において、映像をトランスコードすることは、映像の品質を実質的に変更することなしに、フォーマット変換のみを含み得る。たとえば、このようなトランスコードは、映像を、さまざまなデバイス上で再生がサポートされる標準的なフォーマットに変換するように実行されてもよく、映像を、ネットワークを介したストリーミングに適したフォーマットに変換するように実行されてもよい。いくつかの例において、トランスコードは、たとえばアップサンプリングによって映像の解像度を上げること、または、映像をより高い品質に変換することを含み得る。いくつかの実現例において、トランスコードは、映像の他の特性を調整すること(たとえば、アスペクト比が16:9の映像を4:3または平方アスペクト比に変換すること、映像を回転させることなど)を含み得る。
【0057】
いくつかの実現例において、トランスコードは、映像の音声トラックを異なるフォーマットに変換すること、複数の音声トラックからより少ない数のトラックに統合または選択すること(たとえば、ステレオ音声トラックを統合してモノ音声トラックを取得すること)などを含み得る。いくつかの実現例において、音声トラックをトランスコードすることは、音声トラックを異なるフォーマットに変換することを含み得る。
【0058】
いくつかの実現例において、複数の映像(たとえば、高品質映像)がトランスコーディングのために取得されてもよい。複数の映像が取得される場合、これらの映像は、トランスコーディングの前にソートされてもよい。たとえば、映像は、トランスコードされたファイルの一部が入手可能である映像が、トランスコードされたファイルの一部が入手可能でない映像よりも前に処理されるようにソートされてもよい。たとえば、トランスコードされたファイルの一部は、方法200を実行するデバイスのローカルストレージデバイス上に格納されてもよい。
【0059】
いくつかの実現例において、映像は、作成時刻、最後に修正された時刻、または映像に関連付けられた他のパラメータに基づいてソートされてもよい。いくつかの実現例において、たとえば方法200の出力映像がバックアップのためにクライアントデバイスからサーバデバイスに送信される場合、映像は、バックアップキューから取得され得て、このバックアップキューと同一のソート順を有し得る。いくつかの実現例において、映像は、映像のファイルサイズ、ユーザ選択などに基づいてソートされてもよい。たとえば、ユーザがバックアップのために特定の映像を選択すると、この映像は、最初は、ソートされた順番に配置されてもよい。異なる実現例において、複数の映像をソートするために、ファイルサイズ、トランスコードされたファイルの一部の入手可能性、作成時刻、最後に修正された時刻、ユーザ選択などのさまざまな組み合わせが使用されてもよい。
【0060】
いくつかの実現例において、映像は、映像に割り当てられたスコアに基づいてソートされてもよい。たとえば、このスコアは、訓練された機械学習モデルによって割り当てられてもよい。たとえば、スコアは、映像の重要度を示してもよい。機械学習モデルは、映像および/または映像メタデータの分析に基づいて映像のスコアを決定してもよい。ユーザが許可する場合、映像の分析は、1または複数の人または物体が映像内に描かれているか否か、物体のタイプ、映像内の人または物体の動きの法則、映像内に描かれている場所、映像が安定しているかブレを有するか、などを判断することを含み得る。
【0061】
いくつかの実現例において、方法200は、複数回(たとえば、ソートされた複数の映像から選択された各映像について1回)実行されてもよい。ブロック202の後にブロック204が続く。
【0062】
ブロック204において、映像に対応するトランスコードされたファイルの一部が入手可能であるか否かを判断する。たとえば、トランスコードされたファイルの一部がストレージデバイス上に格納されているか否かを判断するために、ストレージデバイス(たとえば、方法200を実行するコンピューティングデバイスのローカルストレージデバイス)にアクセスしてもよい。トランスコードされたファイルの一部がストレージデバイス上に格納されていない場合、トランスコードされたファイルの一部が入手可能でないと判断される。
【0063】
トランスコードされたファイルの一部がストレージデバイス上に格納されている場合、トランスコードされたファイルの一部に関連付けられた構成設定が判断され得る。たとえば、構成設定は、トランスコードされたファイルの一部内のメタデータとして、別個の構成ファイルとして、またはデータベース内に格納されてもよい。たとえば、構成設定は、
トランスコードされたファイルの一部内の1つまたは複数のトラックのフォーマット(たとえば、MIME(Multipurpose Internet Mail Extensions:多目的インターネットメ
ール拡張仕様)フォーマット)を含み得る。このフォーマットは、標準的なフォーマット(たとえば、アドバンスドビデオコーディング(AVC)フォーマット、高効率ビデオコーディング(HEVC)フォーマットなど)であってもよい。別の例では、構成設定は、トランスコードされたファイルの一部がトランスコーダによって生成されたときにトランスコーダの構成として使用されるビットレートパラメータ、幅パラメータまたは高さパラメータを含み得る。いくつかの実現例において、構成設定は、ビットレートモードパラメータを含み得る。
【0064】
トランスコードされたファイルの一部に関連付けられた構成設定を、映像をトランスコードするのに使用されるトランスコーダの現在の構成設定と比較して、構成設定が一致するか否かを判断し得る。構成設定が一致する場合、トランスコードされたファイルの一部が入手可能であると判断される。
【0065】
構成設定が一致しない場合、トランスコードされたファイルの一部が入手可能でないと判断される。この場合、たとえトランスコードされたファイルの一部が存在していたとしても、トランスコードされたファイルの一部は、異なるトランスコーダ設定で符号化されているものとして識別され、その結果、トランスコーダからのさらなる出力と組み合わせることができないため、出力映像を生成するのにトランスコードされたファイルの一部を使用できない。いくつかの実現例において、構成設定が一致しない場合、トランスコードされたファイルの一部は、ストレージデバイスから削除されてもよい。トランスコードされたファイルの一部に関連付けられた構成ファイルが別個に格納される場合、このような構成ファイルも削除されてもよい。
【0066】
トランスコードされたファイルの一部が入手可能であると判断された場合、ブロック204の後にブロック220が続く。トランスコードされたファイルの一部が入手可能でないと判断された場合、ブロック204の後にブロック206が続く。
【0067】
ブロック220において、トランスコードされたファイルの一部を検索して、マルチプレクサに提供する。たとえば、トランスコードされたファイルの一部は、複数のトランスコードされたトラックを含み得て、各々は、映像の複数のトラックのそれぞれのトラックに対応する。マルチプレクサは、複数のトランスコードされたトラックを組み合わせて単一の出力ファイルにし得る。たとえば、出力ファイルは、MPEG-4映像ファイルであってもよい。
【0068】
いくつかの実現例において、タイムスタンプが、トランスコードされたファイルの一部に関連付けられてもよく、検索されてもよい。タイムスタンプは、トランスコードされたファイルの一部に含まれる映像の映像トラックの最後のフレーム(たとえば、特定のキーフレーム)に対応し得る。たとえば、トランスコードされたファイルの一部が映像の最初(たとえば、時刻0秒)から中間点(たとえば、時刻t秒)までに対応するデータを含む場合、タイムスタンプは、中間点tを示し得る。いくつかの実現例において、単一のタイムスタンプがトランスコードされたファイルの一部に関連付けられてもよい。
【0069】
いくつかの実現例において、タイムスタンプは、複数の時刻値を含み得る。たとえば、複数の時刻値の各々は、複数のトラックのそれぞれのトラックに対応し得る。いくつかの実現例において、たとえばトラックのデータが映像のシーケンシャルな再生に使用されるデータでない場合、1つまたは複数のトラック(たとえば、メタデータトラック)は、タイムスタンプに関連付けられなくてもよい。これらの実現例では、複数の時刻値が検索されてもよい。ブロック220の後にブロック206が続く。
【0070】
ブロック206において、映像をトランスコードする。いくつかの実現例において、トランスコードは、二段階、すなわちデコーダ段およびそれに続くエンコーダ段で実行されてもよい。デコーダ段では、映像が復号(たとえば、格納されたフォーマットから、エンコーダ段に適したフォーマットに変換)され得る。たとえば、特定のコーデックを使用して映像が符号化される場合、デコーダ段は、映像を生のまたは非圧縮のデータストリームに復号してもよい。いくつかの実現例において、復号は、映像を復元することを含み得る。いくつかの実現例において、デコーダ段は、複数のデコーダを含み得る。たとえば、映像デコーダは、映像の1つまたは複数の映像トラックを復号するのに使用されてもよく、復号された音声は、映像の1つまたは複数の音声トラックを復号するのに使用されてもよい。いくつかの実現例において、たとえばターゲット音声フォーマットが映像内の音声トラックのものと同一である場合、または音声トラックがマルチプレクサによってサポートされるフォーマットである場合、映像の音声トラックは、復号されなくてもよい。デコーダ段の出力は、エンコーダ段に提供され得る。
【0071】
エンコーダ段では、映像の生のまたは非圧縮のデータストリームは、たとえばエンコーダの構成設定に指定されたエンコーダのターゲットフォーマットに符号化されてもよい。いくつかの実現例において、符号化は、映像を圧縮することを含み得る。圧縮は、映像のビットレートを下げること、映像の解像度を下げること、映像のフレームレートを下げることなどのうちの1つまたは複数を含み得る。いくつかの実現例において、映像の音声部分を符号化することは、品質の変更(または、最小限の変更)なしに音声をターゲット音声フォーマットに符号化することを含み得る。
【0072】
映像をトランスコードすることは、トランスコードされたファイルの一部が入手可能であるか否かに基づいて、映像全体または映像の一部に対して実行されてもよい。たとえば、トランスコードされたファイルの一部が入手可能でない場合、映像は、映像の最初から(たとえば、0秒から)映像の最後までトランスコードされてもよい。
【0073】
トランスコードされたファイルの一部が入手可能である場合、映像の一部がトランスコードされてもよい。たとえば、トランスコードされる映像の一部は、トランスコードされたファイルの一部に関連付けられたタイムスタンプから開始してもよい。前もってトランスコードされてトランスコードされたファイルの一部に格納されなかった映像の一部を選択的にトランスコードすることにより、トランスコーディングの計算負荷が減少する。なぜなら、たとえば、復号およびその後のターゲットフォーマットへの符号化のために映像の一部だけをメモリにロードする必要があるからである。
【0074】
いくつかの実現例において、タイムスタンプが複数の時刻値を含み、各々が映像内の複数のトラックのそれぞれのトラックに対応する場合、トランスコーディングは、各トラックについて別々に実行されてもよい。これらの実現例では、複数の時刻値のそれぞれの時刻値から開始して複数のトラックの各々を復号して、対応する生データを取得し得る。次いで、この生データを符号化して、対応する出力トラックを取得し得る。ブロック206の後にブロック208が続く。
【0075】
ブロック208において、トランスコーディング中に中断が受信されたか否かが判断され得る。たとえば、方法200がクライアントデバイス上で実行される場合、クライアントデバイスのユーザがクライアントデバイスを起動する(たとえば、スマートフォンをロック解除する、音声もしくはタッチ入力を提供する、またはクライアントデバイスにアクセスする)と中断が受信されてもよい。また、中断は、たとえばクライアントデバイスが立ち上がってネットワークにアクセスしたとき、通知を表示するためなど、システムイベントとして受信されてもよい。中断が受信された場合、ブロック208の後にブロック2
10が続く。中断が受信されない場合、ブロック208の後にブロック212が続く。
【0076】
ブロック210において、トランスコードされたファイルの一部を保存する。たとえば、トランスコーディング中に映像の最後に到達する前に中断が受信される場合、トランスコーディングが完了した映像の部分がトランスコードされたファイルの一部として格納されてもよい。いくつかの実現例において、予め定められたスキームを使用して、トランスコードされたファイルの一部のためのファイル名および格納場所が選択されてもよい。たとえば、ファイル名は、ファイルが映像に対応するトランスコードされたファイルの一部である(たとえば、「video1_partial」)ことを示すフレーズ(たとえば、「partial」
)を付加された映像の映像ファイルのファイル名(たとえば、「video1.extension」)を含むように選択されてもよい。映像について複数のトランスコードされたファイルの一部が格納される場合、シーケンス番号(たとえば、「video1_partial_1」、「video1_partial_2」など)が使用されてもよい。ファイル名および格納場所は、たとえばブロック204を参照して上記したようにトランスコードされたファイルの一部が入手可能であるか否かを判断するのに利用することができる。いくつかの実現例において、データベースは、映像のファイル名および対応するトランスコードされたファイルの一部のファイル名を格納し得る。
【0077】
中断が受信されたときのトランスコーダの出力は、複数の部分出力トラックを含み得る。各部分出力トラックは、映像の特定のトラックに対応し得る。たとえば、トランスコードされたファイルの一部は、標準的なフォーマット(たとえば、MP4フォーマットなどのトランスコーディングのターゲットフォーマット)の映像ファイルであってもよい。いくつかの実現例において、映像のトランスコーディング中に複数の中断が受信される場合、複数のトランスコードされたファイルの一部が保存されてもよく、たとえば各トランスコードされたファイルの一部は、前の中断(または、映像の最初)と現在の中断との間にトランスコードされた映像の特定の部分に対応する。これらの実現例では、各トランスコードされたファイルの一部は、それぞれの関連付けられたタイムスタンプを有し得て、映像が次に処理されるときに(たとえば、ブロック202から開始して)順番に処理され得る。
【0078】
いくつかの実現例において、最初の中断(たとえば、時刻0からt1までのデータを含む)の後に取得されたトランスコードされたファイルの一部は、トランスコーディングの部分出力、たとえば対応するタイムスタンプ(t2)を有する、次の中断までの(たとえば、時刻t1からt2までの(0<t1<t2))映像の後続のトランスコードされた部分を追加するように更新されてもよい。これらの実現例では、映像が次に処理されるときに(たとえば、ブロック202から開始して)、トランスコーディングは、タイムスタンプt2から開始することができる。いくつかの実現例において、タイムスタンプは、トランスコードされたファイルの一部内、別個のファイル内またはデータベース内にメタデータとして格納され得る。ブロック210において格納されたトランスコードされたファイルの一部は、方法200の後続の反復(たとえば、ブロック202の次の実行)において処理され得る。
【0079】
ブロック208においてトランスコーディングが中断されないと判断された場合、ブロック208の後にブロック212が続く。ブロック212において、トランスコーディングが完了したか否か(たとえば、映像の最後に到達したか否か)を判断する。トランスコーディングが完了していない場合、ブロック212の後にブロック206が続いて、映像を符号化し続ける。トランスコーディングが完了した場合、ブロック212の後にブロック214が続く。
【0080】
ブロック214において、トランスコードされた出力データをマルチプレクサに提供し
て、出力映像をマルチプレクサから取得する。マルチプレクサは、複数のトランスコードされたトラックを組み合わせて単一の出力ファイルにし得る。さらに、映像の一部(たとえば、トランスコードされたファイルの一部に関連付けられたタイムスタンプから開始する部分)に対してトランスコーディングが実行される場合、マルチプレクサは、トランスコードされた出力データをトランスコードされたファイルの一部と組み合わせる。マルチプレクサの出力は、ターゲット映像フォーマットの出力映像ファイルである。たとえば、出力ファイルは、MPEG-4映像ファイルであってもよい。ブロック214の後にブロック216が続く。
【0081】
ブロック216において、出力映像を、たとえば方法200を実行するデバイスのストレージデバイスに保存する。たとえば、方法200がクライアントデバイス120~126上で実行される場合、出力映像は、クライアントデバイスのローカルストレージデバイスに保存される。いくつかの実現例において、出力映像は、映像の解像度よりも低い解像度および/または映像のビットレートよりも低いビットレートを有してもよい。ブロック216の後にブロック218が続く。
【0082】
ブロック218において、トランスコードされたファイルの一部を削除し得る。トランスコードされたファイルの一部は、中断後にトランスコーディングを再開するのに使用されるため、出力映像が取得されると、記憶容量を取り戻すためにトランスコードされたファイルの一部はストレージデバイスから削除され得る。トランスコードされたファイルの一部に関連付けられた構成ファイルが別個に格納される場合には、このような構成ファイルも削除され得る。
【0083】
方法200のさまざまなブロックは、組み合わせられてもよく、複数のブロックに分割されてもよく、または並行して実行されてもよい。たとえば、複数の映像を同時に処理して対応する出力映像を取得するようにブロック204~220は並行して実行されてもよい。別の例において、マルチプレクサがトランスコードされたファイルの一部を処理している間に追加のトランスコードされた映像を並行して取得するように、ブロック220はブロック206と並行して実行されてもよい。さらに、ブロック206において、映像の複数のトラックを並行して処理してもよい。
【0084】
いくつかの実現例において、方法200の1つまたは複数のブロックは、方法200を実行するデバイスの中央処理装置(CPU)またはグラフィックス処理装置(GPU)またはアクセラレータ上で実行されてもよい。たとえば、ブロック206は、映像復号および符号化に適しているであろうGPUまたはアクセラレータ上で実行されてもよく、方法200の他のブロックは、CPU上で実行されてもよい。
【0085】
上記の説明では入力映像よりもサイズが小さい出力映像を参照しているが、他の目的で(たとえば、圧縮なしにフォーマット変換を実行する目的で、映像を異なるアスペクト比にリターゲットする目的で、映像を低い解像度またはビットレートから高い解像度またはビットレートにアップコンバートする目的で、映像をトリミングする目的で、映像を回転させる目的で、映像にフィルタを適用する目的で、映像にトラックを追加する目的で、映像からトラックを除去する目的で、など)映像をトランスコードするように方法200が実行されてもよいということが理解されるであろう。
【0086】
方法200またはその一部は、追加の入力を使用して任意の回数繰り返されてもよい。たとえば、方法200は、ブロック202において取得された全ての映像を処理して対応する出力映像を取得するまで繰り返されてもよい。
【0087】
図3は、いくつかの実現例に係る、映像をトランスコードするための例示的な処理パイ
プライン300を示す図である。処理パイプライン300は、エクストラクタ306と、トランスコーダ308と、マルチプレクサ310とを含み得る。いくつかの実現例において、トランスコードされたファイルの一部が入手可能である場合には、トランスコードされたを取得するための処理は二段階で実行され得る。
【0088】
第1段階において、トランスコードされたファイルの一部302が入力としてマルチプレクサ310に提供される。トランスコードされたファイルの一部302は、複数のトラックを含み得て、各トラックは、映像304の特定のトラックに対応する。たとえば、映像304全体が処理される前にトランスコーディングが中断される場合、トランスコードされたファイルの一部302は、トランスコーダ308の部分出力として取得されてもよい。マルチプレクサ310は、トランスコードされたファイルの一部302からの複数のトラックを組み合わせて、出力映像312を取得し得る。たとえば、マルチプレクサ310は、トランスコードされたファイルの一部302から取得された個々の符号化されたトラックをファイルコンテナ(たとえば、MP4ファイル)にパッケージングしてもよい。トランスコードされたファイルの一部302は、いかなるトランスコーディング動作も実行することなく、マルチプレクサ310に提供される。この段階では、出力映像312は、映像304の最初から、トランスコードされたファイルの一部302に関連付けられたタイムスタンプまでのトラックを含み得る。
【0089】
第2段階において、映像304が入力としてエクストラクタ306に提供される。エクストラクタ306は、トランスコードされたファイルの一部302に関連付けられたタイムスタンプから開始する映像304のトラックを抽出し得る。いくつかの実現例において、エクストラクタ306は、タイムスタンプより前の最も近いキーフレームから開始する映像304の映像トラックに関連付けられたフレーム(たとえば、トランスコードされたファイルの一部302に関連付けられたタイムスタンプに一致するタイムスタンプに関連付けられたキーフレーム、またはタイムスタンプが一致しない場合には直前のキーフレーム)を取得し得る。エクストラクタ306は、映像304の最後に到達するまで、たとえばシーケンシャルな順序でフレームを抽出し続け得る。同様に、エクストラクタ306は、映像304の他のトラック(たとえば、他の映像トラック、音声トラック、メタデータトラックなど)のためのフレームを抽出し得る。エクストラクタ306は、取得されたフレームをトランスコーダ308に提供し得る。
【0090】
トランスコーダ308は、デコーダ段と、エンコーダ段とを含み得る。トランスコーダ308は、エクストラクタ306によって提供されたフレームを復号し、復号されたフレームを、たとえばトランスコーダ308の構成設定に指定されたターゲットフォーマットに符号化し得る。トランスコーダ308は、映像304の各トラックに対応する複数の出力フレームを生成し得る。トランスコーダ308は、エクストラクタ306によって提供される映像の1つまたは複数のトラックのための出力フレームを生成し得る。トランスコーダ308は、映像304の複数のトラックのための出力フレームをマルチプレクサ310に提供し得る。マルチプレクサ310は、トランスコーダ出力からの複数のトラックを組み合わせて、出力映像312を取得し得る。たとえば、マルチプレクサ310は、トランスコーダ308から取得された個々の符号化されたトラックをファイルコンテナ(たとえば、MP4ファイル)にパッケージングしてもよい。
【0091】
いくつかの実現例において、処理パイプライン300のさまざまな動作は、順番に実行されてもよく、たとえば、第2段階が開始される前に第1段階が完了してもよい。たとえば、これらの実現例では、マルチプレクサ310は、最初に、トランスコードされたファイルの一部302から取得された個々の符号化されたトラックをファイルコンテナにパッケージングし、次いでトランスコーダ308から取得された個々の符号化されたトラックをファイルコンテナに追加してもよい。
【0092】
いくつかの実現例において、たとえばトランスコーダ308および/またはマルチプレクサ310が十分なバッファ容量を有する場合、第1段階および第2段階は、並行して実行されてもよい。たとえば、マルチプレクサ310は、トランスコーダ308がトランスコーディングを実行するのと同時に、トランスコードされたファイルの一部302から取得された個々の符号化されたトラックを処理してもよく、トランスコーダ308の出力は、待ち行列に入れられるか、またはマルチプレクサ310による処理からバッファリングされる。したがって、マルチプレクサ310は、フレームのシーケンシャルな順序で映像を処理する。いくつかの実現例において、処理パイプライン300が中断されると、中断時の出力映像312は、トランスコードされたファイルの一部302に取って代わり得る。
【0093】
いくつかの実現例において、エクストラクタ306は、トランスコードされたファイルの一部302に関連付けられたタイムスタンプによって示される対応する時刻値(再開点)において映像304のトラックを抽出することをサポートしてもよい。これらの実現例では、対応する時刻値から開始する各トラックが抽出されてトランスコーダ308に提供される。さらに、各トラックの時刻値は、時刻値が当該トラックのキーフレームに対応するように選択されてもよく、その結果、エクストラクタ306によって抽出されたフレームは、トランスコーダ308によって成功裏に復号されることができる。たとえば、映像304が、I-フレーム、P-フレームおよびB-フレームを含む映像トラックを含む場合、トランスコードされたファイルの一部302の時刻値は、I-フレームに対応し得る。
【0094】
いくつかの実現例において、エクストラクタ306は、映像304の全てのトラックが同一の開始点(たとえば、トランスコードされたファイルの一部302に関連付けられたタイムスタンプ)で抽出されるように、単一のタイムスタンプから開始するトラックを抽出することをサポートしてもよい。場合によっては、タイムスタンプは、トラックのうちの1つまたは複数のトラックのキーフレームに対応しなくてもよい。これらの実現例では、抽出されたトラックがトランスコーダ308によって復号され得ることを確実にするために、出力映像312は、キーフレームにおいてキーフレームチャンクに書き込まれ、それにより、処理パイプライン300が中断されると、出力映像312(トランスコードされたファイルの一部302として使用されるか、または前のトランスコードされたファイルの一部302に取って代わる)は、複数のトラックにわたるキーフレームに対応する時刻で終了する。たとえば、マルチプレクサ310は、さまざまなトラックにわたって同期されるキーフレームに到達するまで、さまざまなトラックからのトランスコードされたフレームをバッファリングしてもよい。これらの実現例では、追加のフレームがトランスコーダ308によって生成されると、マルチプレクサ310は、このようなフレームを廃棄する。これらの実現例も、同一の長さの複数のトラックをサポートする任意のフォーマットでトランスコードされたファイルの一部を格納できるという点で有益であろう。
【0095】
処理パイプライン300は、たとえば中断されたトランスコーディング動作中に生成されたトランスコードされたファイルの一部302を出力映像312の生成に利用する。トランスコードされたファイルの一部を再使用することにより、計算コストが減少する。その理由は、たとえば、以前にトランスコードされたフレームは、中断の受信時に廃棄されるのではなく、格納されて再使用されるからである。このような計算コストの減少により、プロセッサ使用量を少なくすることができ、エネルギ使用量を少なくすることができる。処理パイプライン300は、バッテリ駆動のデバイス上で処理パイプライン300が実行される場合に、バッテリ寿命の向上を可能にすることができる。また、処理パイプライン300は、トランスコーディングの速度を向上させることができる。なぜなら、映像304の以前に処理された部分をエクストラクタ306およびトランスコーダ308によっ
て再び処理しなくてもよいからである。
【0096】
図4は、本明細書に記載されている1つまたは複数の特徴を実現するために使用され得る例示的なデバイス400のブロック図である。一例において、デバイス400は、クライアントデバイス(たとえば、
図1に示されるクライアントデバイス115のうちのいずれか)を実現するために使用され得る。代替的に、デバイス400は、サーバデバイス(たとえば、サーバ101)を実現することができる。いくつかの実現例において、デバイス400は、クライアントデバイス、サーバデバイス、またはクライアントデバイスおよびサーバデバイスの両方を実現するために使用されてもよい。デバイス400は、上記の任意の好適なコンピュータシステム、サーバ、または他の電子もしくはハードウェアデバイスであり得る。
【0097】
本明細書に記載されている1つまたは複数の方法は、任意のタイプのコンピューティングデバイス上で実行可能なスタンドアロンのプログラム、ウェブブラウザ上で実行されるプログラム、モバイルコンピューティングデバイス(たとえば、携帯電話、スマートフォン、タブレットコンピュータ、ウェアラブルデバイス(腕時計、アームバンド、宝石類、帽子、バーチャルリアリティゴーグルまたはグラス、拡張現実ゴーグルまたはグラス、頭部装着型ディスプレイなど)、ラップトップコンピュータなど)上で実行されるモバイルアプリケーション(「アプリ」)において実行することができる。一例では、クライアント/サーバアーキテクチャを使用することができ、たとえば(クライアントデバイスとしての)モバイルコンピューティングデバイスは、ユーザ入力データをサーバデバイスに送信し、最終的な出力データをサーバから受信して、出力する(たとえば、表示する)。別の例では、モバイルコンピューティングデバイス上のモバイルアプリ(および/または、他のアプリ)内で全ての計算を実行することができる。別の例では、モバイルコンピューティングデバイスと1つまたは複数のサーバデバイスとの間で計算を分割することができる。
【0098】
いくつかの実現例において、デバイス400は、プロセッサ402と、メモリ404と、入力/出力(I/O)インターフェイス406とを含む。プロセッサ402は、プログラムコードを実行してデバイス400の基本動作を制御するための1つまたは複数のプロセッサおよび/または処理回路であり得る。「プロセッサ」は、データ、信号または他の情報を処理する任意の好適なハードウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサは、1つまたは複数のコアを有する(たとえば、シングルコア構成、デュアルコア構成、またはマルチコア構成の)汎用中央処理装置(CPU)を備えたシステム、複数の処理装置(たとえば、マルチプロセッサ構成)を備えたシステム、グラフィックス処理装置(GPU)を備えたシステム、フィールドプログラマブルゲートアレイ(FPGA)を備えたシステム、特定用途向け集積回路(ASIC)を備えたシステム、コンプレックスプログラマブルロジックデバイス(CPLD)を備えたシステム、機能を実現するための専用の回路を備えたシステム、ニューラルネットワークモデルベースの処理を実行するための特別目的プロセッサを備えたシステム、ニューラル回路を備えたシステム、行列計算(たとえば、行列乗算)用に最適化されたプロセッサを備えたシステム、または他のシステムを含み得る。いくつかの実現例において、プロセッサ402は、ニューラルネットワーク処理を実現する1つまたは複数のコプロセッサを含み得る。いくつかの実現例において、プロセッサ402は、データを処理して確率論的出力を生成するプロセッサであってもよく、たとえば、プロセッサ402によって生成される出力は、予想される出力からある範囲内で不正確である場合もあれば、正確である場合もある。処理は、特定の地理的場所に限定されるべきではなく、または時間的制約を有するべきではない。たとえば、プロセッサは、その機能を「リアルタイム」、「オフライン」、「バッチモード」などで実行してもよい。処理の一部は、異なる時刻に、異なる場所で、異なる(または、同一の)処理システムによって実行されてもよい。コンピュータは、メモリと通信する任
意のプロセッサであってもよい。
【0099】
メモリ404は、一般に、プロセッサ402によるアクセスのためにデバイス400内に設けられており、メモリ404は、プロセッサによる実行のための命令を格納することに適しており、かつ、プロセッサ402から分離して位置しているおよび/またはプロセッサ402と一体化している任意の好適なプロセッサ読取可能記憶媒体(ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、電気的に消去可能なリードオンリメモリ(EEPROM)、フラッシュメモリなど)であってもよい。メモリ404は、プロセッサ402によってサーバデバイス400上で動作するソフトウェアを格納することができ、このソフトウェアは、オペレーティングシステム408と、アプリケーション412と、アプリケーションデータ414とを含む。アプリケーション412は、画像アプリケーション、データ表示エンジン、ウェブホスティングエンジン、画像表示エンジン、通知エンジン、ソーシャルネットワーキングエンジンなどのアプリケーションを含み得る。いくつかの実現例において、アプリケーション412の各々は、本明細書に記載されている機能(たとえば、
図2の方法の一部または全て)をプロセッサ402が実行することを可能にする命令を含み得る。
【0100】
他のアプリケーション412は、たとえば、画像アプリケーション、メディア表示アプリケーション、通信アプリケーション、ウェブホスティングエンジンまたはアプリケーション、マッピングアプリケーション、メディア共有アプリケーションなどを含み得る。本明細書に開示されている1つまたは複数の方法は、いくつかの環境およびプラットフォームで、(たとえば、任意のタイプのコンピューティングデバイス上で実行可能なスタンドアロンのコンピュータプログラムとして、ウェブページを有するウェブアプリケーションとして、モバイルコンピューティングデバイス上で実行されるモバイルアプリケーション(「アプリ」)として、など)動作することができる。
【0101】
代替的に、メモリ404内のソフトウェアはいずれも、その他の好適な格納場所またはコンピュータ読取可能媒体上に格納されることができる。また、メモリ404(および/または、他の接続されたストレージデバイス)は、1つまたは複数のメッセージ、1つまたは複数の分類法、電子百科事典、辞書、類語辞典、ナレッジベース、メッセージデータ、文法、ユーザ設定、および/または、本明細書に記載されている特徴において使用される他の命令およびデータを格納することができる。メモリ404およびその他のタイプのストレージ(磁気ディスク、光ディスク、磁気テープまたは他の有形のメディア)は、「ストレージ」または「ストレージデバイス」であると考えることができる。
【0102】
I/Oインターフェイス406は、サーバデバイス400を他のシステムおよびデバイスと接続することを可能にするための機能を提供することができる。接続されたデバイスは、デバイス400の一部として含まれる場合もあれば、デバイス400とは別であってデバイス400と通信する場合もある。たとえば、ネットワーク通信デバイスとストレージデバイス(たとえば、メモリおよび/またはデータベース106)と入力/出力デバイスとは、I/Oインターフェイス406を介して通信することができる。いくつかの実現例において、I/Oインターフェイスは、入力デバイス(キーボード、ポインティングデバイス、タッチスクリーン、マイクロフォン、カメラ、スキャナ、センサなど)および/または出力デバイス(ディスプレイデバイス、スピーカデバイス、プリンタ、モータなど)などのインターフェイスデバイスに接続することができる。
【0103】
I/Oインターフェイス406に接続することができる接続されたデバイスのいくつかの例は、コンテンツ(たとえば、画像、映像、および/または、本明細書に記載されている出力アプリケーションのユーザインターフェイス)を表示するのに使用することができる1つまたは複数のディスプレイデバイス420を含み得る。ディスプレイデバイス42
0は、ローカル接続(たとえば、ディスプレイバス)を介して、および/または、ネットワーク化された接続を介してデバイス400に接続可能であり、任意の好適なディスプレイデバイスであり得る。ディスプレイデバイス420は、任意の好適なディスプレイデバイス(LCD、LEDもしくはプラズマディスプレイスクリーン、CRT、テレビ、モニタ、タッチスクリーン、3Dディスプレイスクリーン、または他のビジュアルディスプレイデバイスなど)を含み得る。たとえば、ディスプレイデバイス420は、モバイルデバイス上に設けられたフラットディスプレイスクリーン、ゴーグルもしくはヘッドセットデバイス内に設けられた複数のディスプレイスクリーン、またはコンピュータデバイスのためのモニタスクリーンであり得る。
【0104】
I/Oインターフェイス406は、他の入力および出力デバイスに接続することができる。いくつかの例は、画像を取り込むことができる1つまたは複数のカメラを含む。いくつかの実現例は、音声を(たとえば、取り込まれた画像、音声コマンドなどの一部として)取り込むためのマイクロフォン、音声を出力するためのオーディオスピーカデバイス、または他の入力および出力デバイスを提供することができる。
【0105】
説明を容易にするために、
図4は、プロセッサ402、メモリ404、I/Oインターフェイス406およびソフトウェアブロック408および412の各々について1つのブロックを示している。これらのブロックは、1つまたは複数のプロセッサまたは処理回路、オペレーティングシステム、メモリ、I/Oインターフェイス、アプリケーションおよび/またはソフトウェアモジュールを表し得る。他の実現例において、デバイス400は、示されているコンポーネントを全て有していなくてもよく、および/または、本明細書に示されている要素の代わりに、もしくはそれらに加えて、他のタイプの要素を含む他の要素を有していてもよい。いくつかのコンポーネントは、本明細書におけるいくつかの実現例に記載されているブロックおよび動作を実行するものとされているが、環境100、デバイス400、同様のシステム、またはこのようなシステムに関連付けられた任意の好適なプロセッサの任意の好適なコンポーネントまたはコンポーネントの組み合わせが、記載されているブロックおよび動作を実行してもよい。
【0106】
本明細書に記載されている方法は、コンピュータ上で実行可能なコンピュータプログラム命令またはコードによって実現することができる。たとえば、このコードは、1つまたは複数のデジタルプロセッサ(たとえば、マイクロプロセッサまたは他の処理回路)によって実行することができ、コンピュータプログラム製品上に格納されることができ、コンピュータプログラム製品は、磁気記憶媒体、光記憶媒体、電磁記憶媒体または半導体記憶媒体などの非一時的なコンピュータ読取可能媒体(たとえば、記憶媒体)を含み、半導体またはソリッドステートメモリ、磁気テープ、リムーバブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、フラッシュメモリ、剛性磁気ディスク、光ディスク、ソリッドステートメモリドライブなどを含む。また、プログラム命令は、たとえばサーバ(たとえば、分散型システムおよび/またはクラウドコンピューティングシステム)から送達されたソフトウェア・アズ・ア・サービス(SaaS)の形式の電子信号内に収容されて電子信号として提供されることもできる。代替的に、1つまたは複数の方法は、ハードウェア(論理ゲートなど)またはハードウェアとソフトウェアとの組み合わせで実現することができる。例示的なハードウェアは、プログラマブルプロセッサ(たとえば、フィールドプログラマブルゲートアレイ(FPGA)、コンプレックスプログラマブルロジックデバイス)、汎用プロセッサ、グラフィックスプロセッサ、特定用途向け集積回路(ASIC)などであり得る。1つまたは複数の方法は、システム上で実行されるアプリケーションの一部もしくはコンポーネントとして、または、他のアプリケーションおよびオペレーティングシステムとともに実行されるアプリケーションもしくはソフトウェアとして実行することができる。
【0107】
説明はその特定の実現例に関連付けて記載されてきたが、これらの特定の実現例は、例示に過ぎず、限定的なものではない。これらの例に示されている概念は、他の例および実現例にも適用されてもよい。
【0108】
本明細書に記載されている特定の実現例が、ユーザについての個人情報(たとえば、ユーザデータ、ユーザのソーシャルネットワークについての情報、ユーザの場所および当該場所における時刻、ユーザのバイオメトリック情報、ユーザの行動および人口統計情報)を収集または使用し得る状況では、情報が収集されるか否か、個人情報が格納されるか否か、個人情報が使用されるか否か、ユーザについての情報がどのように収集され、格納され、使用されるかを制御する1つまたは複数の機会がユーザに提供される。すなわち、本明細書に記載されているシステムおよび方法は、特にユーザ個人情報を収集、格納および/または使用するための明確な認可を関連するユーザから受信すると、ユーザ個人情報を収集、格納および/または使用する。たとえば、プログラムまたは特徴が、特定のユーザまたは当該プログラムまたは特徴に関連する他のユーザについてのユーザ情報を収集するか否かということに対する制御がユーザに提供される。個人情報を収集される各ユーザは、当該ユーザに関連する情報収集に対する制御を可能にし、情報が収集されるか否かおよび情報のどの部分が収集されるかについて許可または認可を提供する1つまたは複数のオプションを提示される。たとえば、ユーザは、通信ネットワークを介した1つまたは複数のこのような制御オプションを提供され得る。また、特定のデータは、個人を特定できる情報が除去されるように、格納または使用される前に1つまたは複数の方法で処理されてもよい。一例として、ユーザのアイデンティティは、個人を特定できる情報を割り出すことができないように処理されてもよい。別の例として、ユーザデバイスの地理的場所は、ユーザの特定の場所を割り出すことができないように、より大きな領域に一般化されてもよい。
【0109】
なお、当業者に公知であるように、本開示に記載されている機能ブロック、動作、特徴、方法、装置およびシステムは、システム、装置および機能ブロックのさまざまな組み合わせに統合されたり分割されたりしてもよい。任意の好適なプログラミング言語およびプログラミング技術を使用して、特定の実現例のルーチンを実現してもよい。さまざまなプログラミング技術(たとえば、手続き型またはオブジェクト指向)が利用されてもよい。ルーチンは、単一の処理装置上で実行されてもよく、または複数のプロセッサ上で実行されてもよい。ステップ、動作または計算は、特定の順序で示されているが、この順序は、さまざまな特定の実現例において変更されてもよい。いくつかの実現例において、本明細書にシーケンシャルであるように示されている複数のステップまたは動作は、同時に実行されてもよい。