Bug 472503 - Video slideshow tool does not produce playable video file - Port tool from QtAv to FFmpeg CLI tool.
Summary: Video slideshow tool does not produce playable video file - Port tool from Qt...
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Plugin-Generic-VideoSlideshow (show other bugs)
Version: 8.3.0
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-07-22 15:55 UTC by Paul Worrall
Modified: 2024-01-07 13:22 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 8.3.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Worrall 2023-07-22 15:55:58 UTC
STEPS TO REPRODUCE
1. Tools=>Create video slideshow...
2. Selection method = Albums
3. Select an album with jpg files
4. Confirm list of jpg files
5. Number of frames = 125
    Video Standard = PAL - 25fps
    Video Type = HDTV
    Bit Rate = 1200k
    Codec = H.264/AVC
   No effects or transitions
6. Container format = MP4

OBSERVED RESULT
Encoding appears to proceed OK but generated mp4 file does not play in VLC media player and cannot be loaded into Kdenlive

EXPECTED RESULT
Playable mp4 slideshow

SOFTWARE/OS VERSIONS
KDE Plasma Version: 5.27.6
KDE Frameworks Version: 5.108.0
Qt Version: 5.15.10
Graphics Platform: Wayland
Graphics Processor: AMD CEDAR
Comment 1 Maik Qualmann 2023-07-22 16:13:46 UTC
Slideshow video encoding currently only works with FFmpeg4.

Maik
Comment 2 caulier.gilles 2023-11-25 16:56:39 UTC
HI Maik,

The video slide show tool is the last part of digiKam which depend of qtav API, when we switch definitively to Qt6.

QtMultimedia version 6 do not allows to encode frame by frame from Image. Qt6 API have this kind of feature, but this have been dropped in Qt6. I see a report in Qt bugzilla about missing API, but Qt team report that it's not a priority to restore the ful API in Qt6.

So, we needs to found a C++ API based on ffmpeg to do the job in-place of QtAv. Also, the current implementation do not allow to set audio track on the video.

I found this interesting project on github :

https://github.com/apc-llc/moviemaker-cpp

I use also Numa and GTK3 API, but i'm sure that we can drop this in favor to Qt API.
Comment 3 Maik Qualmann 2023-11-26 08:43:54 UTC
Hi Gilles,

The audio player in the presentation tool is also still based on QtAV.

Maik
Comment 4 caulier.gilles 2023-11-26 08:45:41 UTC
Right, i forget this. It can be ported to Qt6Multimedia easily...

Gilles
Comment 5 caulier.gilles 2023-11-27 17:50:00 UTC
Maik,

I ported the Presentation tool to Qt6Multimedia to play sound.

The track preview read files, but without no sound. Can you reproduce ?

Gilles
Comment 6 Maik Qualmann 2023-11-27 18:17:35 UTC
Yes, I can reproduce.

Maik
Comment 7 Maik Qualmann 2023-11-27 21:51:24 UTC
add audio output to media player in the presentations tool:

https://invent.kde.org/graphics/digikam/-/commit/49be815d5403ba84651b674004ffb09c142ee299

Maik
Comment 8 caulier.gilles 2023-12-13 10:59:06 UTC
Git commit 44da06a0b008eb4030ae59e57c11a1341c157c8c by Gilles Caulier.
Committed on 13/12/2023 at 11:53.
Pushed by cgilles into branch 'master'.

Remove ENABLE_QTMULTIMEDIA cmake option.
Auto-detect automatically the mediaplyer to use : Qt5:QtAV | Qt6:QtMultimedia
Separate ffmpeg rules in a separate cmake script
Disable VideoSlideshow tool with Qt6: It needs to be ported to FFmpeg API instead QtAV
Note: now with Qt6, QtAV codes are not compiled at all.
Related: bug 448681

M  +0    -1    Mainpage.dox
M  +0    -1    bootstrap.linux
M  +0    -1    bootstrap.tarball
M  +0    -1    bootstrap.vcpkg
M  +1    -0    core/CMakeLists.txt
M  +9    -1    core/app/DigikamCoreTarget.cmake
A  +107  -0    core/cmake/rules/RulesFFmpeg.cmake
M  +269  -364  core/cmake/rules/RulesMediaPlayer.cmake
M  +0    -1    core/cmake/rules/RulesOptionDefinitions.cmake
M  +10   -2    core/dplugins/generic/tools/CMakeLists.txt
M  +12   -12   core/libs/video/CMakeLists.txt
R  +0    -0    core/libs/video/ffmpegconfighelper.cpp [from: core/libs/video/qtav/ffmpeg/ffmpegconfighelper.cpp - 100% similarity]
R  +0    -0    core/libs/video/ffmpegconfighelper.h [from: core/libs/video/qtav/ffmpeg/ffmpegconfighelper.h - 100% similarity]
M  +1    -1    core/tests/CMakeLists.txt
M  +0    -1    project/bundles/appimage/03-build-digikam.sh
M  +1    -1    project/bundles/macports/03-build-digikam.sh

https://invent.kde.org/graphics/digikam/-/commit/44da06a0b008eb4030ae59e57c11a1341c157c8c
Comment 9 caulier.gilles 2023-12-13 14:21:30 UTC
A new link to a possible implementation to encode QIMge with ffmpeg API :

https://stackoverflow.com/questions/37861764/creating-gif-from-qimages-with-ffmpeg

Gilles
Comment 10 caulier.gilles 2023-12-14 12:03:38 UTC
Another interresting code :

https://github.com/liuyanghejerry/encoding

Gilles
Comment 11 caulier.gilles 2024-01-03 16:19:35 UTC
Git commit 5c0ce6aa787931b22bde21c50c6fa492883ae564 by Gilles Caulier.
Committed on 03/01/2024 at 16:56.
Pushed by cgilles into branch 'master'.

Add ffmpeg CLI binary finder for Video Slideshow.
Prepare to port the plugin to use the FFmpeg CLI tool instead QtAV (Qt6Multimedia cannot be used here).
NOTE: VideoSlideshow plugin is the last part of the Qt6 port of digiKam using QtAV.
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +1    -1    core/dplugins/generic/tools/videoslideshow/videoslideshowplugin.cpp
M  +1    -0    core/libs/video/CMakeLists.txt
A  +43   -0    core/libs/video/manager/ffmpegbinary.cpp     [License: GPL(v2.0+)]
A  +38   -0    core/libs/video/manager/ffmpegbinary.h     [License: GPL(v2.0+)]

https://invent.kde.org/graphics/digikam/-/commit/5c0ce6aa787931b22bde21c50c6fa492883ae564
Comment 12 caulier.gilles 2024-01-03 17:17:39 UTC
Git commit 420608c891d65372095db103bf8e795ffb289359 by Gilles Caulier.
Committed on 03/01/2024 at 18:16.
Pushed by cgilles into branch 'master'.

restore previous videoslideshow settings including audio track support
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +173  -10   core/libs/video/manager/qtav/vidslidetask.cpp
M  +1    -1    core/libs/video/manager/qtav/vidslidetask.h
M  +5    -1    core/libs/video/manager/vidslidesettings.cpp
M  +3    -1    core/libs/video/manager/vidslidesettings.h

https://invent.kde.org/graphics/digikam/-/commit/420608c891d65372095db103bf8e795ffb289359
Comment 13 caulier.gilles 2024-01-03 22:34:58 UTC
Git commit 4ff9e0d9fedf3189f62cbd3f0de64657bcc64116 by Gilles Caulier.
Committed on 03/01/2024 at 23:34.
Pushed by cgilles into branch 'master'.

add ffmpeg path tp the settings
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +1    -0    core/libs/video/manager/vidslidesettings.h

https://invent.kde.org/graphics/digikam/-/commit/4ff9e0d9fedf3189f62cbd3f0de64657bcc64116
Comment 14 caulier.gilles 2024-01-03 22:48:01 UTC
Git commit 982a06b8e1973a8447cac2ab92503f20a3f4fdfc by Gilles Caulier.
Committed on 03/01/2024 at 23:46.
Pushed by cgilles into branch 'master'.

add FFMpeg binary search in the wizard
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +12   -9    core/dplugins/generic/tools/videoslideshow/wizard/vidslidefinalpage.cpp
M  +45   -9    core/dplugins/generic/tools/videoslideshow/wizard/vidslideintropage.cpp
M  +3    -8    core/dplugins/generic/tools/videoslideshow/wizard/vidslideoutputpage.cpp
M  +3    -8    core/dplugins/generic/tools/videoslideshow/wizard/vidslidevideopage.cpp

https://invent.kde.org/graphics/digikam/-/commit/982a06b8e1973a8447cac2ab92503f20a3f4fdfc
Comment 15 caulier.gilles 2024-01-04 10:30:39 UTC
Git commit 2eb84eeb93994d93c4b3f4bdb001cba2fba67fb1 by Gilles Caulier.
Committed on 04/01/2024 at 11:26.
Pushed by cgilles into branch 'master'.

Complete isolation of QtAv code.
Tested with Qt5 and Qt5.
Tested with and without mediaplayer cmake option.
The linking problem with QtAv was the auto reccursive parsing of header file in whole source repository. QtAv was always parsed and add to the compilation rules.
Not qtav and qtmm are removed from the parse and add at the demand when necessary.
Continue to port VideoSlideshw to FFmpeg CLI tool to drop QtAV (Qt5 and Qt6).
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +6    -2    core/CMakeLists.txt
M  +27   -0    core/cmake/rules/RulesMediaPlayer.cmake
M  +1    -1    core/dplugins/generic/tools/CMakeLists.txt
M  +3    -4    core/dplugins/generic/tools/videoslideshow/wizard/vidslidefinalpage.cpp
M  +6    -8    core/libs/video/CMakeLists.txt

https://invent.kde.org/graphics/digikam/-/commit/2eb84eeb93994d93c4b3f4bdb001cba2fba67fb1
Comment 16 caulier.gilles 2024-01-04 12:43:32 UTC
Git commit 002af12bc3aad5cdfff34f2e6dd4eed71310df66 by Gilles Caulier.
Committed on 04/01/2024 at 13:42.
Pushed by cgilles into branch 'master'.

add C++17 support
use QString instead QUrl for the video output path
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +5    -9    core/dplugins/generic/tools/videoslideshow/wizard/vidslidealbumspage.cpp
M  +8    -15   core/dplugins/generic/tools/videoslideshow/wizard/vidslidefinalpage.cpp
M  +4    -6    core/dplugins/generic/tools/videoslideshow/wizard/vidslideimagespage.cpp
M  +9    -15   core/dplugins/generic/tools/videoslideshow/wizard/vidslideoutputpage.cpp
M  +12   -24   core/dplugins/generic/tools/videoslideshow/wizard/vidslidevideopage.cpp
M  +11   -21   core/dplugins/generic/tools/videoslideshow/wizard/vidslidewizard.cpp
M  +2    -2    core/libs/video/manager/vidslidesettings.cpp
M  +1    -1    core/libs/video/manager/vidslidesettings.h

https://invent.kde.org/graphics/digikam/-/commit/002af12bc3aad5cdfff34f2e6dd4eed71310df66
Comment 17 caulier.gilles 2024-01-04 14:09:58 UTC
Git commit 58ece9388d0a3ef6ba90db979902ba7cbf2a9b84 by Gilles Caulier.
Committed on 04/01/2024 at 15:07.
Pushed by cgilles into branch 'master'.

new video slideshow task to encode frame as temporary JPEG files.
This JPEG stream will be pipe to the FFmpeg cli tool to encode as video.

M  +2    -3    core/libs/video/CMakeLists.txt
D  +0    -452  core/libs/video/manager/qtav/vidslidetask.cpp
A  +184  -0    core/libs/video/manager/vidslidetask.cpp     [License: GPL(v2.0+)]
R  +0    -0    core/libs/video/manager/vidslidetask.h [from: core/libs/video/manager/qtav/vidslidetask.h - 100% similarity]

https://invent.kde.org/graphics/digikam/-/commit/58ece9388d0a3ef6ba90db979902ba7cbf2a9b84
Comment 18 caulier.gilles 2024-01-04 14:10:09 UTC
Git commit 58ece9388d0a3ef6ba90db979902ba7cbf2a9b84 by Gilles Caulier.
Committed on 04/01/2024 at 15:07.
Pushed by cgilles into branch 'master'.

new video slideshow task to encode frame as temporary JPEG files.
This JPEG stream will be pipe to the FFmpeg cli tool to encode as video.

M  +2    -3    core/libs/video/CMakeLists.txt
D  +0    -452  core/libs/video/manager/qtav/vidslidetask.cpp
A  +184  -0    core/libs/video/manager/vidslidetask.cpp     [License: GPL(v2.0+)]
R  +0    -0    core/libs/video/manager/vidslidetask.h [from: core/libs/video/manager/qtav/vidslidetask.h - 100% similarity]

https://invent.kde.org/graphics/digikam/-/commit/58ece9388d0a3ef6ba90db979902ba7cbf2a9b84
Comment 19 caulier.gilles 2024-01-04 14:18:14 UTC
Git commit ae723b3daa572b4fa26fbe820b4f9b3131979b6c by Gilles Caulier.
Committed on 04/01/2024 at 15:16.
Pushed by cgilles into branch 'master'.

start the encoding thread to generate temprary JPEG frame before encode video with FFMPEG
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +13   -9    core/dplugins/generic/tools/videoslideshow/wizard/vidslidefinalpage.cpp

https://invent.kde.org/graphics/digikam/-/commit/ae723b3daa572b4fa26fbe820b4f9b3131979b6c
Comment 20 caulier.gilles 2024-01-04 15:26:06 UTC
Git commit 7c0981484d4371bd1e5ff7db5da6785f9393f65b by Gilles Caulier.
Committed on 04/01/2024 at 16:25.
Pushed by cgilles into branch 'master'.

Create a temporary directory to host JPEG frames
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +1    -1    core/dplugins/generic/tools/CMakeLists.txt
M  +23   -8    core/libs/video/manager/vidslidetask.cpp

https://invent.kde.org/graphics/digikam/-/commit/7c0981484d4371bd1e5ff7db5da6785f9393f65b
Comment 21 caulier.gilles 2024-01-05 13:50:57 UTC
Git commit dd325854d3021dacb139d387bd37544bf89d3df8 by Gilles Caulier.
Committed on 05/01/2024 at 14:45.
Pushed by cgilles into branch 'master'.

First version for testing of the new video slideshow tool based on FFmpeg CLI tool to encode images as video.

A small demo is available here: https://drive.google.com/file/d/1posBo2rqkatU7N6qkbZWGBbOELsUGdgg/view?usp=sharing

It still plenty of features to restore, as to adjust the codecs, the size, the frame rate, the format. The audio track must be supported too.
Currently the temporary directory containing frames to encode is not yet deleted at end, it's for debuging.
It's planed to remove temp dir when all features will be completed.
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +1    -3    core/dplugins/generic/tools/CMakeLists.txt
M  +1    -1    core/dplugins/generic/tools/videoslideshow/wizard/vidslidefinalpage.cpp
M  +6    -6    core/libs/video/manager/ffmpeglauncher.cpp
M  +17   -4    core/libs/video/manager/vidslidethread.cpp
M  +15   -1    core/libs/video/manager/vidslidethread.h

https://invent.kde.org/graphics/digikam/-/commit/dd325854d3021dacb139d387bd37544bf89d3df8
Comment 22 caulier.gilles 2024-01-07 11:21:49 UTC
Git commit 90b508130131d470ef6051e0296d24f058bd85b1 by Gilles Caulier.
Committed on 07/01/2024 at 12:20.
Pushed by cgilles into branch 'master'.

run the ffmpeg process in a separate thread to not block the GUI while encoding frames.
Related: bug 425284, bug 427221, bug 139781, bug 462810, bug 448681

M  +6    -1    core/libs/threads/processlauncher.cpp
M  +6    -2    core/libs/threads/processlauncher.h

https://invent.kde.org/graphics/digikam/-/commit/90b508130131d470ef6051e0296d24f058bd85b1
Comment 23 caulier.gilles 2024-01-07 13:22:49 UTC
In digiKam 8.3.0, Video Slide Show tool use FFmpeg CLI tool instead QtAv API.