Dive media: Extract thumbnails from videos with ffmpeg

Extract thumbnails using ffmpeg.
Behavior is controlled by three new preferences fields:
 - extract_video_thumbnails (bool): if true, thumbnails are calculated.
 - extract_video_thumbnail_position (int 0..100): position in video
   where thumbnail is fetched.
 - ffmpeg_executable (string): path of ffmpeg executable.

If ffmpeg refuses to start, extract_video_thumbnails is set to false
to avoid unnecessary churn.

Video thumbnails are marked by an overlay.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-07-10 15:04:35 +02:00 committed by Dirk Hohndel
parent 51066e5478
commit fce42d4858
14 changed files with 727 additions and 20 deletions

View file

@ -1474,6 +1474,21 @@ bool GeneralSettingsObjectWrapper::autoRecalculateThumbnails() const
return prefs.auto_recalculate_thumbnails;
}
bool GeneralSettingsObjectWrapper::extractVideoThumbnails() const
{
return prefs.extract_video_thumbnails;
}
int GeneralSettingsObjectWrapper::extractVideoThumbnailsPosition() const
{
return prefs.extract_video_thumbnails_position;
}
QString GeneralSettingsObjectWrapper::ffmpegExecutable() const
{
return prefs.ffmpeg_executable;
}
void GeneralSettingsObjectWrapper::setDefaultFilename(const QString& value)
{
if (value == prefs.default_filename)
@ -1579,6 +1594,43 @@ void GeneralSettingsObjectWrapper::setAutoRecalculateThumbnails(bool value)
emit autoRecalculateThumbnailsChanged(value);
}
void GeneralSettingsObjectWrapper::setExtractVideoThumbnails(bool value)
{
if (value == prefs.extract_video_thumbnails)
return;
QSettings s;
s.beginGroup(group);
s.setValue("extract_video_thumbnails", value);
prefs.extract_video_thumbnails = value;
emit extractVideoThumbnailsChanged(value);
}
void GeneralSettingsObjectWrapper::setExtractVideoThumbnailsPosition(int value)
{
if (value == prefs.extract_video_thumbnails_position)
return;
QSettings s;
s.beginGroup(group);
s.setValue("extract_video_thumbnails_position", value);
prefs.extract_video_thumbnails_position = value;
emit extractVideoThumbnailsPositionChanged(value);
}
void GeneralSettingsObjectWrapper::setFfmpegExecutable(const QString &value)
{
if (value == prefs.ffmpeg_executable)
return;
QSettings s;
s.beginGroup(group);
s.setValue("ffmpeg_executable", value);
free((void *)prefs.ffmpeg_executable);
prefs.ffmpeg_executable = copy_qstring(value);
emit ffmpegExecutableChanged(value);
}
LanguageSettingsObjectWrapper::LanguageSettingsObjectWrapper(QObject *parent) :
QObject(parent)
{