5

AndroidでMPEG4データをMP4ファイルに書き込む(ラップする)方法は?

Androidプラットフォームである種のビデオ処理を行っていますが、処理されたデータ(MPEG4などの何らかの標準でエンコードされたもの)をmp4などのビデオファイルに書き戻す方法がわかりません。これを行うには API を使用するのが最善だと思いますが、必要な API が見つかりません。

アイデアを持っている人はいますか?

4

4 に答える 4

1

OpenCVはこの仕事には少し多すぎるかもしれませんが、これ以上簡単なものは思いつきません。OpenCV は、C、C++、および Python 用の API を提供するコンピューター ビジョン ライブラリです。

Android を使用しているため、 JavaCVという名前の OpenCV 用の Java ラッパーをダウンロードする必要があります。これはサードパーティ API です。Windows に OpenCV/JavaCV をインストールし、Netbeans で使用するための手順を記載した小さな投稿を書きましたが、最後に、Android プラットフォームに OpenCV/JavaCV をインストールする方法を示すチュートリアルを検索する必要があります。

これは、入力ビデオを開いてフレームを出力ファイルにコピーする方法を示すC++ の例です。ただし、Android を使用しているため、JavaCV を使用した例の方が優れているため、次のコードは入力ビデオからフレームをコピーし、それを という名前の出力ファイルに書き込みますout.mp4

package opencv_videowriter;

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class OpenCV_videowriter 
{
    public static void main(String[] args) 
    {
        CvCapture capture = cvCreateFileCapture("cleanfish47.mp4");
        if (capture == null)
        {
            System.out.println("!!! Failed cvCreateFileCapture");
            return;
        }

        int fourcc_code = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC);
        double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
        int w = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
        int h = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);

        CvVideoWriter writer = cvCreateVideoWriter("out.mp4",       // filename
                                                    fourcc_code,    // video codec
                                                    fps,            // fps
                                                    cvSize(w, h),   // video dimensions
                                                    1);             // is colored
        if (writer == null) 
        {
            System.out.println("!!! Failed cvCreateVideoWriter");

            return;
        }


        IplImage captured_frame = null;        
        while (true)
        {
            // Retrieve frame from the input file
            captured_frame = cvQueryFrame(capture);
            if (captured_frame == null)
            {
                System.out.println("!!! Failed cvQueryFrame");
                break;
            }


            // TODO: write code to process the captured frame (if needed)


            // Store frame in output file
            if (cvWriteFrame(writer, captured_frame) == 0) 
            {
                System.out.println("!!! Failed cvWriteFrame");
                break;
            }

        }

        cvReleaseCapture(capture);
        cvReleaseVideoWriter(writer);        
    }
}

: OpenCV のフレームは、BGRの順序でピクセルを格納します。

于 2012-11-19T12:13:21.433 に答える
0

あなたの質問は 100% 意味がありません。MPEG-4 は一連の仕様 (すべて ISO/IEC 14496-*) であり、MP4 は ISO/IEC 14496-14 で指定されているファイル形式です。

生の AAC や H264 ストリームから MP4 ファイルを作成する場合は、mp4parserライブラリを使用することをお勧めします。AAC と H264 を MP4 ファイルに多重化する方法を示すがあります。

于 2012-12-30T02:15:31.943 に答える