kio: extract duration metadata via FFmpeg

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-04-14 21:01:02 +03:00
parent a49685fcf5
commit 1d5bd20054

View file

@ -18,6 +18,8 @@
#include "kfilemetadata_ffmpeg.h" #include "kfilemetadata_ffmpeg.h"
#include "kpluginfactory.h" #include "kpluginfactory.h"
#include "kglobal.h"
#include "klocale.h"
#include "kmimetype.h" #include "kmimetype.h"
#include "kdebug.h" #include "kdebug.h"
@ -43,6 +45,7 @@ KFileMetaDataFFmpegPlugin::~KFileMetaDataFFmpegPlugin()
QStringList KFileMetaDataFFmpegPlugin::keys() const QStringList KFileMetaDataFFmpegPlugin::keys() const
{ {
static const QStringList result = QStringList() static const QStringList result = QStringList()
<< QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#duration")
<< QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#musicAlbum") << QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2009/02/19/nmm#musicAlbum")
<< QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#artist") << QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/05/10/nexif#artist")
<< QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment") << QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#comment")
@ -98,6 +101,18 @@ QList<KFileMetaInfoItem> KFileMetaDataFFmpegPlugin::metaData(const KUrl &url, co
kWarning() << "Could not open" << urlpath; kWarning() << "Could not open" << urlpath;
return result; return result;
} }
if (ffmpegcontext->duration > 0) {
const QString ffmpegduration = KGlobal::locale()->formatTime(
QTime().addSecs((ffmpegcontext->duration / AV_TIME_BASE)),
true, true
);
result.append(
KFileMetaInfoItem(
QString::fromLatin1("http://www.semanticdesktop.org/ontologies/2007/03/22/nfo#duration"),
ffmpegduration
)
);
}
AVDictionaryEntry *ffmpegentry = av_dict_get(ffmpegcontext->metadata, "album", NULL, 0); AVDictionaryEntry *ffmpegentry = av_dict_get(ffmpegcontext->metadata, "album", NULL, 0);
if (ffmpegentry) { if (ffmpegentry) {
result.append( result.append(