Jak poprawnie policzyć SUMĘ czasu plików MP4? Łindołs to robi i nie ma problemów.
private void SummarizeMP4Duration(string folderPath)
{
try
{
string[] mp4Files = Directory.GetFiles(folderPath, "*.mp4");
TimeSpan totalDuration = TimeSpan.Zero;
foreach (string mp4File in mp4Files)
{
totalDuration += GetDurationWithFFmpeg(mp4File);
}
richTextBox1.AppendText("Czas trwania wszystkich plików MP4: " + totalDuration.ToString(@"hh\:mm\:ss") + Environment.NewLine);
}
catch (Exception ex)
{
richTextBox1.AppendText("Błąd podczas obliczania czasu trwania plików MP4: " + ex.Message + Environment.NewLine);
}
}
private unsafe TimeSpan GetDurationWithFFmpeg(string filePath)
{
AVFormatContext* formatContextPtr = null;
try
{
ffmpeg.avformat_network_init(); // Inicjalizacja biblioteki FFmpeg
// Otwieranie pliku wideo
if (ffmpeg.avformat_open_input(&formatContextPtr, filePath, null, null) != 0)
{
throw new InvalidOperationException("Nie można otworzyć pliku wideo.");
}
// Pobieranie informacji o strumieniach w pliku wideo
if (ffmpeg.avformat_find_stream_info(formatContextPtr, null) < 0)
{
throw new InvalidOperationException("Nie można znaleźć informacji o strumieniach w pliku wideo.");
}
// Obliczanie czasu trwania
var duration = formatContextPtr->duration * ffmpeg.av_q2d(ffmpeg.av_get_time_base_q());
return TimeSpan.FromSeconds(duration);
}
catch (Exception ex)
{
richTextBox1.AppendText("Błąd podczas uzyskiwania czasu trwania pliku MP4 za pomocą FFmpeg: " + ex.Message + Environment.NewLine);
return TimeSpan.Zero;
}
finally
{
// Zwolnienie zasobów po zakończeniu pracy
if (formatContextPtr != null)
{
ffmpeg.avformat_close_input(&formatContextPtr);
ffmpeg.avformat_free_context(formatContextPtr);
}
}
}
U mnie jest od razu błąd, że Błąd podczas uzyskiwania czasu trwania pliku MP4 za pomocą FFmpeg: Określona metoda nie jest obsługiwana.
Więc jak to zrobić?
Oczekuję wyniki jak w łindołsie.