comparison libervia/backend/tools/video.py @ 4071:4b842c1fb686

refactoring: renamed `sat` package to `libervia.backend`
author Goffi <goffi@goffi.org>
date Fri, 02 Jun 2023 11:49:51 +0200
parents sat/tools/video.py@7550ae9cfbac
children 0d7bb4df2343
comparison
equal deleted inserted replaced
4070:d10748475025 4071:4b842c1fb686
1 #!/usr/bin/env python3
2
3 # Libervia: an XMPP client
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
5
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU Affero General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU Affero General Public License for more details.
15
16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
19 """Methods to manipulate videos"""
20 from typing import Union
21 from pathlib import Path
22 from twisted.python.procutils import which
23 from libervia.backend.core.i18n import _
24 from libervia.backend.core import exceptions
25 from libervia.backend.core.log import getLogger
26 from .common import async_process
27
28
29 log = getLogger(__name__)
30
31
32
33
34
35 try:
36 ffmpeg_path = which('ffmpeg')[0]
37 except IndexError:
38 log.warning(_(
39 "ffmpeg executable not found, video thumbnails won't be available"))
40 ffmpeg_path = None
41
42
43 async def get_thumbnail(video_path: Union[Path, str], dest_path: Path) -> Path:
44 """Extract thumbnail from video
45
46 @param video_path: source of the video
47 @param dest_path: path where the file must be saved
48 @return: path of the generated thumbnail
49 image is created in temporary directory but is not delete automatically
50 it should be deleted after use.
51 Image will be in JPEG format.
52 @raise exceptions.NotFound: ffmpeg is missing
53 """
54 if ffmpeg_path is None:
55 raise exceptions.NotFound(
56 _("ffmpeg executable is not available, can't generate video thumbnail"))
57
58 await async_process.run(
59 ffmpeg_path, "-i", str(video_path), "-ss", "10", "-frames:v", "1", str(dest_path)
60 )