オーディオとビデオをマスターすることはトレンドであり、Androidオーディオとビデオの基本的な分析は、誰もが学習の「高いしきい値」を破るのに役立ちます

オーディオとビデオ業界は長年にわたって発展してきました。近年、モバイル端末でのオーディオとビデオのアプリの出現により、オーディオとビデオは最高潮に達しました。しかし、オーディオのコストが高いためです。時代のペースに追いつくために、私はこのオーディオとビデオの基本を書き、オーディオとビデオの関連知識を説明し、オーディオとビデオの「高いしきい値」を破りました。みんな、一緒に進歩することを望んでいます。

実際、Androidのオーディオとビデオの開発に関する体系的なチュートリアルや本はなく、インターネット上のブログ投稿は比較的散在しています。この知識は、少しの学習と蓄積によってのみ、連続して蓄積することができます。

オーディオとビデオを学ぶ私自身の経験を共有してください:

オーディオ

サウンドをオーディオとして保存するプロセスは、実際にはアナログオーディオをデジタル化するプロセスです。このプロセスを実現するには、アナログオーディオをサンプリング、量子化、およびコード化する必要があります。次に、このプロセスについて詳しく説明します。

サンプリング

サンプリングは、信号を連続時間領域のアナログ信号から離散時間領域の離散信号に変換するプロセスです(離散は不連続を意味します)。有名なナイキストの定理によれば、サンプリングは音の最高周波数の2倍である必要があります。 。耳に聞こえる音は20Hz〜20kHzなので、サンプリングレートは通常44.1KHzです(なぜ40KHzではなく44.1KHzなのか?このサンプリングレートをサンプリングに使ってみたところ、効果が最高です)。参考までに、その他のサンプリングレートを以下に示します。

  • 8,000Hz-電話で使用されるサンプリングレート。これは人間の発話に十分です。
  • 11,025 Hz
  • 22,050Hz-ラジオ放送のサンプリングレート
  • 32,000 Hz-miniDVデジタルビデオカムコーダー、DAT(LPモード)のサンプリングレート
  • 44,100 Hz-オーディオCD、MPEG-1オーディオ(VCD、SVCD、MP3)サンプリングレートでも一般的に使用されます
  • 47,250 Hz-日本コロムビア(デノン)が開発した世界初の商用PCMレコーダーで使用されるサンプリングレート
  • 48,000 Hz-miniDV、デジタルTV、DVD、DAT、映画、プロオーディオで使用されるデジタルサウンドのサンプリングレート
  • 50,000Hz-1970年代後半に3MとSoundstreamによって開発された最初の商用デジタルレコーダーで使用されたサンプリングレート
  • 50,400Hz-三菱X-80デジタルレコーダーで使用されるサンプリングレート
  • 96,000または192,000Hz-DVDオーディオ、一部のLPCM DVDオーディオトラック、Blu-rayディスク(Blu-rayディスク)オーディオトラック、およびHD-DVD(高精細DVD)オーディオトラックに使用されるサンプリングレート
  • 2.8224 MHz-SACD、ソニー、フィリップスが共同開発したDirect StreamDigitalと呼ばれる1ビットのシグマデルタ変調プロセスで使用されるサンプリングレート。

上の図に示すように、これはサンプリングプロセスです。アナログオーディオは、x軸での操作である連続時間領域で離散時間領域信号にカットされます。次に、x軸とy軸があります。実際、y軸の演算は数量化です。

定量化

定量化とは何ですか?上記のセグメント化された情報を表すために特定のデータを使用することです。鮮やかな言葉で、それはそのy軸の変化値に対応する各x時間軸を与えることです。したがって、音の特定の値を表現する場合は、最初に可変間隔を割り当てる必要があります(この間隔は量子化形式と呼ばれます)。バイナリの単位はビットで、通常は8ビット、16ビット、および32ビットです。 。

ここでもデシベル(単位db)の概念を紹介する必要があります:それは音のサイズを表す単位であり、人間の耳が耐えることができるdB範囲は次のとおりです:0〜90dB、0dBは人間の耳よりも弱い音です聞こえます。90dB環境での聴覚は深刻な影響を受けます。調査後、1ビットで約6デシベルの音を録音できるので、以下のデータを取得できます。

単位 範囲 dB
8ビット 0〜2 ^ 8-1 <=> 0〜255 0〜48
16ビット 0〜2 ^ 16-1 <=> 0〜65535 0〜96
32ビット 0〜2 ^ 32 -1 <=> 0〜4294967295 0〜192

上記から、8ビット処理オーディオは0から255までしか変化せず、変化はできないのに対し、0から65535まで変化し、人間の声のサイズの範囲にぴったり合うため、通常16ビットを使用していることがわかります。次に、32ビットを使用してみませんか?これは、32ビットがストレージを消費しすぎるためです。もちろん、オーディオをより詳細にしたい場合は、32ビットを使用することもできます。量子化はサンプリングに基づいているので、すべての量子化は1つのサンプリングに対応します。では、どのようにそれを保存しますか?これには、次のコーディングが含まれます。

サウンドトラック

サウンドトラックとは何ですか?チャンネルは音源のソースです。つまり、サウンド、コモンMono、およびStereo

  • モノモノ、単一音源、多くの場所がStereo置き換えられました
  • ステレオステレオ、2つ以上の音源

さまざまな位置に立ってモノラルを聴くと、ステレオではなく、効果が異なります。それでも、さまざまな方向で自然で心地よいものになります。現在、CDは一般的に2チャンネルステレオであり、チャンネル数は2です。 。

オーディオコーディング

いわゆるエンコーディングとは、サンプリングおよび量子化されたデジタルデータを、シーケンシャルストレージや圧縮ストレージスペースなどの特定の形式で記録することです。巨視的には、圧縮コーディングと非圧縮コーディングの2つのカテゴリに分類できます。

ストレージには多くの形式があります。通常、生のオーディオデータはPCMと呼ばれ、パルスコード変調(英語:パルスコード変調、略称:PCM)とも呼ばれ、アナログ信号のデジタル方式であり、一種の非圧縮です。エンコード形式。一般に、PCMデータの一部を記述するには、次の概念が必要です。

  • 量子化フォーマット-SampleFormat、デフォルトは16ビット
  • サンプリングレート-SampleRate、デフォルトは44.1KHz
  • チャネル数-チャネル、デフォルトでは2

一般に码率、オーディオ、つまり1秒以内のスループットをbpsで表すために使用します。

码率 = 采样率 * 量化格式 * 声道数

上記のように、次のようになります。ビットレート= 44100 * 16 * 2 = 1411200 bps = 1411.2 kbps 1分のデータサイズも取得できます:1411.2 * 60/8/1024 = 10.34M

下の図は、mp3形式から取得した基本情報です。量子化形式、サンプリングレート、チャネル数は同じですが、ビットレートは320kbpsであることがわかります。これは、上記から導き出した結論です。計算式に一貫性がありませんか?これは、関連する圧縮エンコーディング形式です。

Duration: 00:00:39.99, start: 0.011995, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s

圧縮コーディングとは、データを圧縮することです。圧縮コーディングの原理は、実際には冗長信号を圧縮することです。冗長信号とは、人間の聴覚の範囲外でマスクされた音声信号など、人間の耳では認識できない信号を指します。音声信号など。、一般的に2つのタイプに圧縮されます:

  • 非可逆圧縮、データが圧縮された後、情報が失われることはなく、圧縮前の元の状態に完全に復元できます
  • 可逆圧縮、この方法で圧縮および解凍されたデータは元のデータとは異なりますが、非常に近いです

音楽アプリケーションでは、「ロスレス音楽」がよく見られます。mp3形式であることがわかった場合は、非可逆圧縮である必要があります。これを偽ロスレスと呼びます。一般的な非可逆圧縮は次のとおりです。

  • MP2
  • MP3
  • AAC
  • WMA
  • ADPCM
  • アトラクション
  • ドルビーAC-3
  • Musepack
  • Ogg Vorbis
  • オーパス
  • LDAC

ビデオ

オーディオについて話した後、ビデオについて話しましょう。まず、ビデオとは何ですか?ビデオはフレームごとにリンクされた画像で構成されていることは誰もが知っているので、ビデオを紹介する前に、まず画像とは何かを理解する必要がありますか?

画像

三菱の鏡を通して光をさまざまな色に分散させることができるという物理学を幼い頃から学びましたが、さらに調べてみると、分解できないのは赤(R)、緑(G)、青(B)だけなので、光の3つの主要な色と呼ばれます。

一般的に携帯電話を買うときはその解像度を指しますが、もちろん解像度が大きいほど元の外観に近いので良いのですが、なぜですか?

実際、携帯電話で画像を認識できるようにするために、このRGBモードも採用されています。「1080x1920」を例にとると、水平方向に1080ピクセル、垂直方向に1920ピクセルあるため、合計で1080x1920 = 2073600ピクセルになります。各ピクセルには、赤(R)、緑(G)、青(B)の3つのサブピクセルが含まれているため、各ピクセルは独自のフルカラーレンダリングを行うことができます。

画像表現

赤(R)、緑(G)、青(B)は00〜FFまたは0〜255で表すことができます。上記から、8ビットは0〜255を表すことができ、1つのピクセルには赤( R)、緑(G)、青(B)3つのサブピクセル、1つのピクセルには少なくとも24ビットが必要です。通常、色に不透明度(A)を追加するため、ピクセルは実際には32ビットであり、この表現方法です。私たちがよく使うのRGBA_8888は、上記の解像度で携帯電話に全画面表示する場合、どのくらいのスペースが必要ですか?

1080*1920*4 = 8294400b = 8100kb = 7.91Mb

これはメモリ内のビットマップ(ビットマップ)のサイズでもあります。各画像の生データは非常に大きいため、ビットマップを電話機に直接ロードすると、メモリがすぐにオーバーフローします。したがって、画像をネットワーク上で直接歩かせると、確実に機能しなくなります。通常、圧縮が実行されます。一般的な圧縮形式は次のとおりです。

  • BMP-ロスレス圧縮
  • PNG-可逆圧縮
  • JPEG非可逆圧縮

これが、小さい画像(アイコンなど)を作成するときにこのpng形式が使用され、大きい画像が使用される理由ですjpeg。小さい画像は、可逆圧縮および拡大後にぼやけすぎず、大きい画像を鮮明にすることができます。

ビデオ表現

通常、裸のビデオデータを表すためにYUVを使用します。YUVは色分け方法でもあります。RGBを使用してみませんか?RGBビデオ信号送信と比較して、その最大の利点は、帯域幅をほとんど使用しないことです(RGBでは、3つの独立したビデオ信号を同時に送信する必要があります)

「Y」は、グレースケール値としても知られる輝度(Luminance、Luma)を表します。「U」と「V」は色度であり、それらの機能は画像の色と彩度を表すことであり、の色を指定するために使用されます。ピクセル。UVを無視すると、以前の白黒TV信号と同じ灰色(Y)だけが残るため、YUVは白黒TVからカラーTVに移行するために発明されました。

UVはCbとCrで表されます。CbはRGB入力信号の青色部分とRGB信号の輝度値の差を反映し、CrはRGB入力信号の赤色部分との輝度値の差を反映します。 RGB信号。UV信号は、特定の基準に従って特定の色の明るさをシフトするようにディスプレイに指示します。UV値が高いほど、ピクセルの彩度が高くなります。

帯域幅を節約するために、ほとんどのYUVフォーマットは平均してピクセルあたり24ビット未満を使用します。主なサブサンプル形式は、YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1、YCbCr 4:4:4です。YUVの表記はA:B:C表記と呼ばれます。

  • 4:4:4は、RGBと同様に、完全なサンプリングを意味します
  • 4:2:2は、2:1の水平サンプリングと垂直の完全サンプリングを意味します。
  • 4:2:0は、2:1の水平サンプリングと垂直の2:1サンプリングを意味します。
  • 4:1:1は、4:1の水平サンプリングと垂直フルサンプリングを意味します。

次に、次のように、1080x1920携帯電話で1フレームのビデオのデータサイズを表示します。

YUVフォーマット サイズ(1080x1920解像度)
444 1080 * 1920 * 3 = 6220800b = 6075 kb = 5.93Mb
422 1080 * 1920 *(1 + 0.5 + 0.5)= 4147200 b = 4050 kb = 3.96Mb
420 1080 * 1920 *(1 + 0.5 + 0)= 3110400 b = 3037.5 kb = 2.97Mb
411 1080 * 1920 *(1 + 0.25 + 0.25)= 3110400 b = 3037.5 kb = 2.97Mb

上の写真から、1フレームにYUV420を使用すると、RGBを直接使用するよりも約3M少なくなることがわかります。これが、RGBの代わりにYUVを使用する主な理由です。

一般的なビデオではYUV4:2:0を使用していることに注意してください。YUV4:2:0は、U(つまり、Cb)、V(つまり、Cr)だけが0でなければならないという意味ではなく、U:Vが相互に引用し合うことを意味します。表示時間は非表示です。つまり、各行にはUまたはVコンポーネントが1つだけあります。1つの行が4:2:0の場合、次の行は4:2:0で、次の行は4:2です。 0 ...など。

YUVをRGBデータに変換して携帯電話に表示するにはどうすればよいですか?これには変換式が必要です

この時点で、ビデオの内容がわかります。ビデオは1フレームと1フレームの画像で構成され、1フレームの画像はYUVネイキッドデータで構成されます。YUVネイキッドデータはRGBに変換され、最終的にに表示されます。上記は変換されたRGBです。

ビデオエンコーディング

コーディングを紹介する前に、まず2つの概念を紹介します。

  • フレームレート(fps)-単位時間(s)あたりに表示されるフレーム数が測定されます。通常、ビデオには24fpsで十分です。ゲームの場合、フレームレートが30 fps未満の場合、不連続性が発生します。これは通常、スタッターと呼ばれます。
  • ビットレート-単位時間あたりのデータのサイズを測定します。

1080 * 1920携帯電話でYUV420ビデオデータを再生するビットレートを計算できます。

bitRate = 1080* 1920* (1+0.5+0)* 24 = 71.2 Mbps

また、90分の映画データボリュームを取得することもできます。

total = bitRate * 60 * 90 = 375.42 GB

これは私たちには絶対に受け入れられないので、エンコードする必要があります。オーディオエンコードと同様に、圧縮エンコードが一般的に使用されます。それ以外の場合は再生する必要はありません〜

オーディオコーディングとは異なり、ビデオデータ、つまり、時間内の冗長情報と空間内の冗長情報を含む大量の冗長情報の間には強い相関関係があります。

  • 時間的冗長性-ビデオデータでは、通常、隣接するフレーム間に強い相関関係があります。このような相関関係は時間的冗長性です。
  • 空間的冗長性-同じフレーム内で、隣接するピクセルには通常強い相関関係があり、そのような相関関係は空間的冗長性情報です。

一般的なビデオコーディングには2つのシリーズがあります。

  • MPEGシリーズ-Mpeg1(VCD用)、Mpeg2(DVD用)、Mpeg4 AVC(現在最も使用されているストリーミングメディア)を含む
  • H.26xシリーズ-H.261、H.262、H.263、H.264を含む(現在最も使用されているビデオです)

IPBフレーム

MPEGは、Iフレーム、Pフレーム、Bフレームを定義し、フレームごとに異なる圧縮アルゴリズムを実装します。

  • Iフレーム-フレーム内でコード化されたフレームは、圧縮アルゴリズムによって単一の完全なビデオ画像に圧縮されます。これはグループの最初のフレームでもあるため、Iフレームは空間次元でビデオフレームの冗長な情報を削除します。
  • Pフレームフォワード予測コーディングフレーム。完全なビデオ画像にデコードするには、前のIフレームまたはPフレームを参照する必要があります。
  • Bフレーム-双方向予測補間コーディングフレーム。完全なビデオ画像を生成するには、前のIフレームまたはPフレームと次のPフレームを参照する必要があるため、PフレームとBフレームは時間次元でビデオフレームを削除します。冗長情報に

注:Iフレームには特別なフレームがあります。これはIフレームIDRでもあります。ビデオエ​​ンコーディングプロセスでIDRフレームが表示された場合、後続のすべてのフレームが前のフレームを参照できなくなり、その機能は同等になります。流域へ。

前述したように、ビデオは一連の画像で構成され、各画像はフレームです。画像はグループで処理されます。フレームのグループの一般的に使用される構造は、IBBPBBPBBPBBPBBの形式の15フレームで構成されます。フレームのグループは、とも呼ばれGOPます。次の図を参照してください。

上の図から、デコード順と表示順は同じではありませんが、Bフレームがない場合は同じであることがわかります。

上記はオーディオとビデオの基本的な関連コンテンツです。理解できない場合や間違っている場合は、下のコメント領域にメッセージを残してください。


最後に、オーディオとビデオに関連する知識ポイントとインタビューに関連する知識の原則を誰もが深く理解できるように、エントリーから上級までのオーディオとビデオの開発に関する学習ドキュメントをまとめました。

オーディオおよびビデオシステムについて学ぶための方向性は次のとおりです。

次に、学習資料と一緒に学んだほうがいいですよ〜

1.初歩的な紹介

画像の描画
AudioRecordAPIの詳細な説明
AudioRecordを使用して録音を実現し、wav
生成するAudioTrackを使用してPCMオーディオを再生するCameraAPIを
使用してビデオデータを収集
するMediaExtractorとMediaMuxerAPIを使用してmp4ファイルを解析およびカプセル化する
MediaCodecAPIの詳細

2.中級上級章-AndroidOpenGLES開発

OpenGL ESを導入し
構築するためのOpenGL ES環境
のOpenGL ESは、形状を定義する
のOpenGL ESは形状描画
にOpenGL ESを投影し、カメラビュー使用
のOpenGL ESは、モーションエフェクト追加
のOpenGL ESがイベント触れて反応する
のOpenGL ESシェーダ言語GLSL
のOpenGL ESのテクスチャマッピングを使用するOpenGLを
GLES20経由しとシェーダーの相互作用
画像を表示する
GLSurfaceviwカメラのプレビュー画面を描画して写真の撮影
実現するOpenGLESを使用してビデオ録画を完了し、ビデオの透かし効果を実現します

3つのFFmpeg学習記録-構造学習

メディアファイルヘッダー情報ツールを表示するffprobeツール
でメディアファイル再生するffplay
メディアファイル変換ツールffmpegFFmpeg
キャプチャデバイス
FFmpegオーディオとビデオの再生速度を調整する
FFmpegの紹介
Macに
FFmpegをインストールしてFFmpegをAndroidプラットフォーム移植するFFmpegAPIの
紹介と一般的なAPI分析
FFmpegコーデックAPI分析
FFmpegのコアモジュールはlibavformatとのlibavcodecの分析
のAVFormatContext分析
のAVStream分析
のAVPacket分析
AVFrame分析
...

上記のコンテンツはオープンソースプロジェクトに配置されており、直接私を突いて取得します:[ github ]
(または取得するためにWeChat追加したプライベートメッセージ)。

おすすめ

転載: blog.csdn.net/weixin_44339238/article/details/111319360