ffmpeg(cライブラリ形式)を使用して、ビデオをより多くの部分に分割し、それらを再構成して、最終結果をエンコードしたいと思います。基本的なもの。しかし、これに関するドキュメントやヒントを見つけるのは非常に困難です。どこを見てアドバイスを求めるべきですか?
4 に答える
FFmpegプロジェクトによって維持されているコマンドラインユーティリティのソースから多くを学ぶことができます。
ffplay.cでは、main()はライブラリを初期化する方法を示します。 stream_component_open()は、メディア内のストリームにコーデックを一致させる方法を示し、get_video_frame()は、パケットをデコードしてそのPTS(表示タイムスタンプ)を取得する方法を示します。スプリットのタイミングを正しく設定するには、これが必要になります。
これで、デコード側から始めることができます。エンコード側では、ffmpeg.cを見てください。ffplayよりも大きくて複雑ですが、フレームをエンコードするプロセスは、フレームをデコードするプロセスをほぼ反映しているため、デコードが機能するようになったら、より理にかなっているはずです。
私はFFmpegチュートリアルとphpを探していましたが、以下がどの言語でもそれを学ぶのに最適な場所であることがわかりました。FFmpegFFmpegの基本についての唯一の本だと思います。高速オーディオおよびビデオエンコーダーを使用したマルチメディア処理
そしてscondの場所は http://ffmpeg.org/documentation.htmlです
私はしばらくの間、良いc / c ++ FFmpegチュートリアルも探していましたが、このc / c++ffmpeg-libav-tutorialは間違いなくこれまでに見つけた中で最高のものです。FFmpegをライブラリとして使用する方法を説明し、その前に、ビデオにあまり詳しくない人に非常に役立つビデオキーワード(エンコード、デコード、トランスコンディング、多重化など)についての明確な概要を示します。
さらに、このチュートリアルはビデオの概念を理解するのに最適なので、ビデオの世界に精通していない人は、これから始めて、c / c++ffmpeg-libav-tutorialを続けることをお勧めします。
TLDR;
https://github.com/ShootingKing-AM/ffmpeg-pseudocode-tutorial-緩い擬似コードによるffmpeg-cliの幅広いワークフローの理解。
FFmpeg devsによる最良の方法は、ffmpeglibavおよび/またはffmpeg-cliの完全なソースを読み取ることです。
ffmpeg-cliを理解する目的は、マルチメディア操作を行うためにバックグラウンドでffmpeg-cliを呼び出すことなく、FFmpegをプロジェクトに統合できるようにすることです。これは重要です。なぜなら、
- 外部実行可能ファイルの起動は、ウイルス対策ソフトウェアによってブロックされる傾向があり、ユーザーに問題を引き起こす可能性があります。
- プロジェクト固有のlibavの使用法を最適化し、ffmpeg-cliから不要なコードをスキップします。また、ffmpegの公式ドキュメントはせいぜい曖昧であり、ffmpegのライブラリ(libav)機能をコードに実装しようとしている開発者にとっての唯一のオプションは、コマンドラインインターフェイスのソースコードを読み取ることです。 。
しかし、ffmpeg-cliのソースコードを読むのは非常に困難です。これは、libavの使用方法を理解するための学習資料としてではなく、最適化されたマルチメディアツールとして使用することを目的としているためです。したがって、私はそのソースコードを単純な擬似コード関数にまっすぐにして、ffmpegワークフローの全体像を把握するために、重要な(ほとんどすべての)libavの関数をいつどこで呼び出すかを強調しようとしました。libav関数呼び出しを呼び出す方法については、doxygenのドキュメントとffmpeg-cli-sourceファイルを参照してください。