1

c言語を使用して一連の画像を含むディレクトリからビデオを作成するにはどうすればよいですか。これをacクラスファイル内で実行したい(コマンドプロンプトでは実行しない)。これに似たもの。

void ImagetoVideo(char [] path)
{
   // create video from file
}

スタックオーバーフローにいくつかのコードがありましたが、それはすべてコマンドラインコードの実行に関するものです。これはコードです

ffmpeg -f image2 -start_number n -i "PATH_TO_IMAGE_FILE" video.mpg 
    -vcodec mpeg4 test.avi
4

2 に答える 2

1

自分でコーディングすることもできますが、それほど難しくはありません。

AVIエンコーディングの場合、Revelを使用できます。JPG画像処理には、libJPEGを使用できます。他の形式の画像がある場合は、適切なライブラリを使用してそれらを読み取ることができます。

すべての画像を読み取ってエンコードするための完全なコードは少し長くなります。そこで、擬似コードを使用するアイデアを紹介します。同様のタスクを行ったときも同じように使用しました。

   #include "revel.h"
    extern "C" {
     #include "libjpeg/jpeglib.h"
    }

    std::vector<BYTE> frame_buffer;

    Revel_Error revError;
    int encoderHandle;
    revError = Revel_CreateEncoder(&encoderHandle);
    Revel_Params revParams;
    Revel_InitializeParams(&revParams);

    revParams.width = ; // put image width here
    revParams.height = ; // put image height here
//
    revParams.frameRate = 25;
    revParams.quality = 1.0f;
    revParams.codec = REVEL_CD_XVID;
    revParams.hasAudio = 0;
    revParams.audioSampleFormat = REVEL_ASF_UNKNOWN;
    char favi[] = "encoded_video.avi";
    revError = Revel_EncodeStart(encoderHandle, favi, &revParams);

while(read & decode every image into 'frame_buffer' with apropriate lib)
{
    Revel_VideoFrame frame;
    frame.width = image.getwidth();
    frame.height = image.getheight();
    frame.bytesPerPixel = ; // color depth in bytes. if you're using libjpeg it would be cinfo.num_components;
    frame.pixelFormat = REVEL_PF_BGR;
    frame.pixels = &frame_buffer[0];
    int frameSize;
    revError = Revel_EncodeFrame(encoderHandle, &frame, &frameSize);
}

    int totalSize;
    revError = Revel_EncodeEnd(encoderHandle, &totalSize);
    Revel_DestroyEncoder(encoderHandle);
于 2012-12-12T10:06:49.050 に答える
1

以下を使用して、C++ (または C) コード内でこのコマンドを実行できます。

詳細はこちら: system(..)

于 2012-12-10T10:17:39.387 に答える