オーディオとビデオを支える技術(5) - ffmpegを使用する

オーディオとビデオの開発で最も重要なことは、エンコードとでコードの操作です。
h.264を例にとると、h.264エンコードを自分で実装したい場合は、h.264について十分に理解する必要があります。
まずh.264のドキュメントを確認する必要があります。このドキュメントは、300ページに及ぶようです。(まだ読んでいません)
気になる方はこの下のリンクからh.264の仕様書を見学に行ってください。

https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-H.264-200305-S!!PDF-E&type=items

このことを考えて、あなたは、デコーダー、エンコダーを、初めから書きますか?忘れてください。
幸い、h.264エンコーダーは、誰かが作成してくれており、ソースコードも提供されています。主流なh264エンコーダーには、x264,t264などがあります。

自分は、研究や、エンコーダーの作成を行うつもりは、ないのでh.264のマニュアルを読む必要はありません。
自分たちにとって必要なことは、マニュアルの場所を確認しておくこと、必要な時にh.264データ形式を確認することです。
優れたプログラムは、開発できる限り規制のものを使用し、エネルギーを削減し、時間を削減し、安定性を改善する必要があります。

t264およびx264は、h.264エンコード、デコードするためのライブラリーです。通常は、x.264を使います。しかし、これらのライブラリーは、1つの形式しかエンコードできません。そのため最初は、複数の形式をエンコード、デコードできるffmpegを使用します。

ffmpegは、さまざまなビデオコーデックを統合するライブラリーです。汎用的なツールといえます。
ビデオの取得、ビデオのエンコードから、ビデオの送信まで、ffmpegで完成され、さらにffmpegは、クロスプラットフォームであり、windowsLinux、Andorid、IOSなどの主流なOSで使えます。

さてffmpegの使用方法を開始しましょう

1. ffmpegの取得

ffmpegのダウンロードを行います。

ffmpeg.zeranoe.com

開くと次のようなサイトに飛びます。

f:id:nakadasanda1:20200625221206p:plain

2020年6月25日現在の様子がこのようになります。 自分の知る限り、この前にも3度ほどサイトのデザインが変更されているため、将来的にこのような画面になるとは、限りません。

一番上のバージョンの設定を行い 2つ目にOSを選択します。 3つ目にライブラリーの形式を設定してダウンロードします。

自分の開発環境に合わせてdev開発者向けのライブラリーをダウンロードします。
画像のように設定します。

2. プロジェクトにffmpegを導入します。

Qt Createrを開きます。
純粋なc++ファイルを作ります。 今回は、ffmpegtestと名前を作ります。

f:id:nakadasanda1:20200625221433p:plain

ダウンロードしたffmpegフォルダーの中にあるincludeとlibをコピーして、作成したプロジェクトの中にffmpegファイルを追加してその中に2つのファイルを入れます。

f:id:nakadasanda1:20200625222055p:plain

QtCreaterでプロジェクト構成ファイルffmpegtest.proを変更します

INCLUDEPATH += $$PWD/ffmpeg/include

LIBS += \
     $$PWD/ffmpeg/lib/avcodec.lib \
     $$PWD/ffmpeg/lib/avdevice.lib \
     $$PWD/ffmpeg/lib/avfilter.lib \
     $$PWD/ffmpeg/lib/avformat.lib \
     $$PWD/ffmpeg/lib/postproc.lib \
     $$PWD/ffmpeg/lib/swresample.lib \
     $$PWD/ffmpeg/lib/swscale.lib \

main.cppに書き込みます。

#include <iostream>
using namespace std;

extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavdevice/avdevice.h"
}

int main()
{
    cout << "Hello FFmpeg!" << endl;
    unsigned version = avcodec_version();
    cout << "version is:" << version;
    return 0;
}

このまま固まって動かないようです。 f:id:nakadasanda1:20200625230749p:plain

ffmpegの実行ファイルを入れていませんでした。

さっきのサイトから実行ファイルをダウンロードしてきます。
3番目の値をsharedに変更してダウンロードします。
f:id:nakadasanda1:20200625231013p:plain

Cドライブにダウンロードしたファイルを展開します。
コントロールパネル->システム->システムの詳細設定と進んで環境変数のpathに先ほど追加したffmpegファイルのbinを追加します。

f:id:nakadasanda1:20200625231933p:plain

再び実行すると、 f:id:nakadasanda1:20200625232419p:plain

ちゃんと実行することができました。

ソースコードです。

github.com

シリーズ一覧 nakadasanda.hatenablog.jp