0

以下は、2 つのビデオを結合するためのコードです。プログラムを実行すると、2 つのビデオが結合され、結合されたビデオがフォルダーに入れられます。結合されたビデオのサイズは正しいはずです。

しかし、ビデオを再生すると、WMP でビデオの最初の部分が再生されますが、VLC でビデオを再生すると、ビデオの 2 番目の部分が再生されます。

public void JoiningVideo()
{
    string j = @"D:/test2";

    string outputpath = @"D:/test3/beforeEventab1.wmv";
    DirectoryInfo di = new DirectoryInfo(j);
    FileStream fs;
    fs = new FileStream(outputpath, FileMode.Append);
    foreach (FileInfo fi in di.GetFiles(@"*.wmv"))
    {
        byte[] bytesource = System.IO.File.ReadAllBytes(fi.FullName);
        fs.Write(bytesource, 0, bytesource.Length);
    }
    fs.Close();
}
4

1 に答える 1

0

各ビデオファイルは「ヘッダー」と呼ばれるもので始まることをご存知ですか?

ファイルのこの部分には、長さなどに関する情報が含まれています。別の
ビデオ ファイルに結合する場合は、両方の (結合された) 部分に関する情報を含む新しいヘッダーにヘッダーをマージし、両方のビデオがそれぞれに収まるようにする必要があります。他の。(*)
それ以外の場合、ビデオは有効なファイルではありません。

WMP と VLC のデコーダの違いにより、一方は最初のファイルを認識し、もう一方は 2 番目のファイルを認識します。
プログラムがこの「破損した」ファイルを再生したことは幸運です。;)

 

検索エンジンに、あなたに合った解決策を尋ねてmerge wmvください!

(*)
必要な 2 つのビデオを結合するには

  • 同じ形式 (例: 解像度、フレームレート、ビットレート)
    これが当てはまらない場合は、少なくとも 1 つを他のビデオと一致するように変換する必要があります
  • ビデオは互いに「接着」する必要があります。一方のデータを他方のデータに追加するだけでは十分ではありません。
    各ビデオはヘッダーで始まります。このヘッダーは、新しい (結合された) ビデオに関する情報を含むように変更する必要があります。
    また、生の画像データを単純に追加することはできません。すべての画像は、ビデオの次の画像に合うパズルのピースのようなものです。移行は、作成する必要があるパズルの新しいピースのようなものです。トランジションを機能させるには、2 番目のファイル全体を変更/並べ替える必要がある場合もあります。

私は専門家ではありませんが、少なくとも、この手順はビデオの種類 (MPEG、WMV など) ごとに異なることをお伝えできます。最善の方法は、この目的のために既存のライブラリを使用することです。

于 2013-02-06T06:48:08.617 に答える