OpenCVSharp4で動画ファイルが正しく保存できない
Q&A
Closed
解決したいこと
OpenCVSharpを使って、ウェブカメラの映像を動画として保存するコードを書きましたが、保存したファイルが再生できません。
動画ファイルのフォーマットが、
・.mp4の場合
・.aviの場合
・.wmvの場合
でそれぞれ少しずつ違うメッセージ、症状になります。
上記の三種類以外でもいいので何らかのフォーマットで動画が正常に保存され、再生できるようにしたいです。
言語・環境
C#
VisualStudio 2019(Version 16.10.3)
.NET Framework(Version 4.8)
NuGetパッケージ
・OpenCVSharp4
・OpenCVSharp4.Extensions
・OpenCVSharp4.runtime.win
・OpenCVSharp4.runtime.win.cuda
・OpenCVSharp4.Windows
・OpenCVSharp4.WpfExtensions
発生している問題・エラー
[.mp4の場合]
ソースコードの//1の部分を有効にして実行すると出力に以下のメッセージが出ます。
OpenCV: FFMPEG: tag 0x34363258/'X264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x31637661/'avc1'
保存された動画ファイルを再生しようとすると出るメッセージ
MMname2で調べた動画ファイルの情報
[.aviの場合]
エラーメッセージ等は無し
[.wmvの場合]
エラーメッセージ等は無し
動画再生時
メッセージは出ないが、動画の再生時間が0秒になっている
該当するソースコード
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
RecordAppControl();
}
private int RecordAppControl()
{
VideoCapture capture = new VideoCapture();
capture.Open(1);
if (!capture.IsOpened())
{
Console.WriteLine("Camera not activated.");
return -1;
}
//1(mp4)
VideoWriter video = new VideoWriter("result.mp4", OpenCvSharp.FourCC.H264, 30, new OpenCvSharp.Size(600, 300));
//2(avi)
//VideoWriter video = new VideoWriter("result.avi", OpenCvSharp.FourCC.DIVX, 30, new OpenCvSharp.Size(600, 300));
//3(wmv)
//VideoWriter video = new VideoWriter("result.wmv", OpenCvSharp.FourCC.WMV1, 30, new OpenCvSharp.Size(600, 300));
Mat mat = new Mat();
int count = 0;
System.Timers.Timer recordControlTimer = new System.Timers.Timer(33);
recordControlTimer.Elapsed += (sender, e) =>
{
if (count >= 150)
{
recordControlTimer.Stop();
Console.WriteLine("Timer Stopped\n");
video.Dispose();
capture.Release();
}
else
{
capture.Read(mat);
video.Write(mat);
pictureBox1.Image = BitmapConverter.ToBitmap(mat);
count++;
}
};
recordControlTimer.Start();
return 0;
}
}
自分で試したこと
最初にOpenH264を入れずに実行したところリンク先と同じエラーが出た。
openh264-1.8.0-win32.dllを入れた後はmp4の場合に書いたエラーが出るようになった。