Accord.Video.FFMpeg: проблема разницы в длительности между временем записи и видео - PullRequest
0 голосов
/ 05 марта 2020

Я хочу сохранить отснятый материал с веб-камеры в виде видео в формате webM (Vp8). Я пользуюсь библиотекой Accord. Но при записи разница между затраченным временем и временем видео почти в 2-3 раза больше. Код, который я использую, и некоторые результаты отладки приведены ниже.

Accord.Video.FFMpeg 3.8.2-Alpha (исправлена ​​ошибка с двойным pts / dts)
Формат сохранения видео: VP8 (.WebM)

Настройки запуска записи:

videoCodec = VideoCodec.Vp8;    
bitrate : 1250000   
framerate :10   
height :720 
width: 1280 
videoSource.VideoResolution: 1280x720, 30 fps (30 max fps), 24 bpp  
FileWriter.BitRate = bitRate;   
FileWriter.FrameRate = new Accord.Math.Rational((int)framerate );   
FileWriter.Width = width;   
FileWriter.Height = height; 
FileWriter.VideoCodec = videoCodec; 
FileWriter.Open(FileName);  
_recording = true;  
StartTimeStamp = DateTime.Now;  

Событие newFrame

private void VideoSourcePlayer1_NewFrame(object sender, ref Bitmap image)
{
    if (_recording)
    {
        try
        {
            Bitmap CurrentBitmap = image;
            DateTime CurrentTimeStamp = DateTime.Now;
            TimeSpan CurrentTimeSpan = StartTimeStamp - CurrentTimeStamp;
            Console.WriteLine("Video Write Timespan: " + CurrentTimeSpan.ToString());
            FileWriter.WriteVideoFrame(CurrentBitmap, CurrentTimeSpan);
            // FileWriter.WriteVideoFrame(image);  
        }
        catch (Exception ex)
        {
            Console.WriteLine("VideoSourcePlayer1_NewFrame catch: " + ex.Message);
        }
    }
}

Примечание: Это та же проблема, что и при записи по времени или без записи.

В течение 122 секунд (02.02 мин) создается 50 секунд видеозаписи. Я не смог ее решить.

Маленькая часть вывода отладки:

Время записи видео: -00: 01: 55.4107365
баллов: 4,730000e +004 pts_time: 47,3 dts: 4,730000e + 004 dts_time: 47,3 длительность: 1,000000e + 002 duration_time: 0,1
Интервал времени записи видео: -00: 01: 55.6136263
pts: 4 , 740000e + 004 pts_time: 47,4 dts: 4,740000e + 004 dts_time: 47,4 длительность: 1,000000e + 002 duration_time: 0,1
Время записи видео: -00: 01: 55.8354960
pts : 4,750000e + 004 pts_time: 47,5 точек: 4,750000e + 004 dts_time: 47,5 длительности: 1,000000e + 002 duration_time: 0,1
Время записи видео: -00: 01: 56.5161088
pts: 4,760000e + 004 pts_time: 47,6 dts: 4,760000e + 004 dts_time: 47,6 длительность: 1,000000e + 002 duration_time: 0,1
Продолжительность записи видео: -00: 01: 56.7309841
баллов: 4,770000e + 004 баллов: время: 47,7 точек: 4,770000e + 004 время_цента: 47,7 длительность: 1,000000e + 002 длительность_время: 0,1
интервал записи видео: -00: 01 : 56,9758413
баллов: 4,780000e + 004 баллов_время: 47,8 днс: 4,780000e + 004 днс_время: 47,8 длительность: 1,0000 00e + 002 duration_time: 0,1
Время записи видео: -00: 01: 57.1947200
pts: 4,790000e + 004 pts_time: 47,9 dts: 4,790000e + 004 dts_time: 47,9 продолжительность: 1,000000e + 002 duration_time: 0,1
Время записи видео: -00: 01: 57.4375834
баллов: 4800000e + 004 баллов_time: 48 точек: 4800000e + 004 днс_ времени: 48 длительность: 1, 000000e + 002 duration_time: 0,1
Время записи видео: -00: 01: 57.5804983

Последние два выхода:

Время записи видео: -00 : 02: 02.7505463
pts: 5,000000e + 004 pts_time: 50 dts: 5,000000e + 004 dts_time: 50 длительность: 1,000000e + 002 duration_time: 0, 1
Время записи видео: -00: 02: 02.9884038
pts: 5,010000e + 004 pts_time: 50,1 dts: 5 , 010000e + 004 dts_time: 50,1 длительность: 1,000000e + 002 duration_time: 0,1

Почему существует разница между временным интервалом и dts / pts время? Может ли проблема быть из-за этого?

Примечание. Когда я устанавливаю частоту кадров 30; Другой процесс записи видео составляет 95 секунд (1,35 мин) и составляет 16 секунд.

По мере увеличения частоты кадров длина видео становится все меньше и меньше фактического значения.

Выход:

Время записи видео: -00: 01: 35.1086178
pts: 1,606700e + 004 pts_time: 16 067 точек: 1,606700e + 004 время периода: 16,067 продолжительность: 3,300000e + 001 duration_time: 0,033
Время записи видео: -00: 01: 35.2565302
количество точек: 1,610000e + 004 pts_time: 16,1 dts: 1,610000e + 004 dts_time: 16,1 длительность: 3300000e + 001 duration_time: 0,033
Продолжительность записи видео: - 00: 01: 35.3984494
pts: 1,613300e + 004 pts_time: 16,133 dts: 1,613300e + 004 dts_time: 16,133 длительность: 3,300000e + 001 duration_time: 0,033

Таким образом, продолжительность видео равна dts_time. Почему продолжительность видео не является значением временного интервала, я все еще не могу его найти ??

Извините за мой плохой английский sh & выражение,

...