# HG changeset patch # User Thierry Florac # Date 1441725161 -7200 # Node ID 240f2efa4a1f9cc4469d96c490d0a45591cea566 # Parent 967f905e1de5252a0a2650a151da81595b8b9e17 First "stable" version diff -r 967f905e1de5 -r 240f2efa4a1f .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,19 @@ + +syntax: regexp +^develop-eggs$ +syntax: regexp +^parts$ +syntax: regexp +^bin$ +syntax: regexp +^\.installed\.cfg$ +syntax: regexp +^\.settings$ +syntax: regexp +^build$ +syntax: regexp +^dist$ +syntax: regexp +^\.idea$ +syntax: regexp +.*\.pyc$ diff -r 967f905e1de5 -r 240f2efa4a1f LICENSE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,42 @@ +Zope Public License (ZPL) Version 2.1 +===================================== + +A copyright notice accompanies this license document that identifies +the copyright holders. + +This license has been certified as open source. It has also been designated +as GPL compatible by the Free Software Foundation (FSF). + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions in source code must retain the accompanying copyright + notice, this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the accompanying copyright + notice, this list of conditions, and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Names of the copyright holders must not be used to endorse or promote + products derived from this software without prior written permission + from the copyright holders. + 4. The right to distribute this software or to use it for any purpose does + not give you the right to use Servicemarks (sm) or Trademarks (tm) of the + copyright holders. Use of them is covered by separate agreement with the + copyright holders. + 5. If any files are modified, you must cause the modified files to carry + prominent notices stating that you changed the files and the date of any + change. + + +Disclaimer +========== + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff -r 967f905e1de5 -r 240f2efa4a1f MANIFEST.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MANIFEST.in Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,5 @@ +include *.txt +recursive-include docs * +recursive-include src * +global-exclude *.pyc +global-exclude *.*~ diff -r 967f905e1de5 -r 240f2efa4a1f bootstrap.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bootstrap.py Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,178 @@ +############################################################################## +# +# Copyright (c) 2006 Zope Foundation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Bootstrap a buildout-based project + +Simply run this script in a directory containing a buildout.cfg. +The script accepts buildout command-line options, so you can +use the -c option to specify an alternate configuration file. +""" + +import os +import shutil +import sys +import tempfile + +from optparse import OptionParser + +tmpeggs = tempfile.mkdtemp() + +usage = '''\ +[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] + +Bootstraps a buildout-based project. + +Simply run this script in a directory containing a buildout.cfg, using the +Python that you want bin/buildout to use. + +Note that by using --find-links to point to local resources, you can keep +this script from going over the network. +''' + +parser = OptionParser(usage=usage) +parser.add_option("-v", "--version", help="use a specific zc.buildout version") + +parser.add_option("-t", "--accept-buildout-test-releases", + dest='accept_buildout_test_releases', + action="store_true", default=False, + help=("Normally, if you do not specify a --version, the " + "bootstrap script and buildout gets the newest " + "*final* versions of zc.buildout and its recipes and " + "extensions for you. If you use this flag, " + "bootstrap and buildout will get the newest releases " + "even if they are alphas or betas.")) +parser.add_option("-c", "--config-file", + help=("Specify the path to the buildout configuration " + "file to be used.")) +parser.add_option("-f", "--find-links", + help=("Specify a URL to search for buildout releases")) +parser.add_option("--allow-site-packages", + action="store_true", default=False, + help=("Let bootstrap.py use existing site packages")) + + +options, args = parser.parse_args() + +###################################################################### +# load/install setuptools + +try: + if options.allow_site_packages: + import setuptools + import pkg_resources + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +ez = {} +exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez) + +if not options.allow_site_packages: + # ez_setup imports site, which adds site packages + # this will remove them from the path to ensure that incompatible versions + # of setuptools are not in the path + import site + # inside a virtualenv, there is no 'getsitepackages'. + # We can't remove these reliably + if hasattr(site, 'getsitepackages'): + for sitepackage_path in site.getsitepackages(): + sys.path[:] = [x for x in sys.path if sitepackage_path not in x] + +setup_args = dict(to_dir=tmpeggs, download_delay=0) +ez['use_setuptools'](**setup_args) +import setuptools +import pkg_resources + +# This does not (always?) update the default working set. We will +# do it. +for path in sys.path: + if path not in pkg_resources.working_set.entries: + pkg_resources.working_set.add_entry(path) + +###################################################################### +# Install buildout + +ws = pkg_resources.working_set + +cmd = [sys.executable, '-c', + 'from setuptools.command.easy_install import main; main()', + '-mZqNxd', tmpeggs] + +find_links = os.environ.get( + 'bootstrap-testing-find-links', + options.find_links or + ('http://downloads.buildout.org/' + if options.accept_buildout_test_releases else None) + ) +if find_links: + cmd.extend(['-f', find_links]) + +setuptools_path = ws.find( + pkg_resources.Requirement.parse('setuptools')).location + +requirement = 'zc.buildout' +version = options.version +if version is None and not options.accept_buildout_test_releases: + # Figure out the most recent final version of zc.buildout. + import setuptools.package_index + _final_parts = '*final-', '*final' + + def _final_version(parsed_version): + for part in parsed_version: + if (part[:1] == '*') and (part not in _final_parts): + return False + return True + index = setuptools.package_index.PackageIndex( + search_path=[setuptools_path]) + if find_links: + index.add_find_links((find_links,)) + req = pkg_resources.Requirement.parse(requirement) + if index.obtain(req) is not None: + best = [] + bestv = None + for dist in index[req.project_name]: + distv = dist.parsed_version + if _final_version(distv): + if bestv is None or distv > bestv: + best = [dist] + bestv = distv + elif distv == bestv: + best.append(dist) + if best: + best.sort() + version = best[-1].version +if version: + requirement = '=='.join((requirement, version)) +cmd.append(requirement) + +import subprocess +if subprocess.call(cmd, env=dict(os.environ, PYTHONPATH=setuptools_path)) != 0: + raise Exception( + "Failed to execute command:\n%s" % repr(cmd)[1:-1]) + +###################################################################### +# Import and run buildout + +ws.add_entry(tmpeggs) +ws.require(requirement) +import zc.buildout.buildout + +if not [a for a in args if '=' not in a]: + args.append('bootstrap') + +# if -c was provided, we push it back into args for buildout' main function +if options.config_file is not None: + args[0:0] = ['-c', options.config_file] + +zc.buildout.buildout.main(args) +shutil.rmtree(tmpeggs) diff -r 967f905e1de5 -r 240f2efa4a1f buildout.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/buildout.cfg Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,59 @@ +[buildout] +eggs-directory = /var/local/env/pyams/eggs + +socket-timeout = 3 +show-picked-versions = true +newest = false + +allow-hosts = + bitbucket.org + *.python.org + *.sourceforge.net + github.com + +#extends = http://download.ztfy.org/webapp/ztfy.webapp.dev.cfg +versions = versions +newest = false +#allow-picked-versions = false + +src = src +develop = . + +parts = + package + i18n + pyflakes + test + +[package] +recipe = zc.recipe.egg +eggs = + pyams_media + pyramid + zope.component + zope.interface + +[i18n] +recipe = zc.recipe.egg +eggs = + babel + lingua + +[pyflakes] +recipe = zc.recipe.egg +eggs = pyflakes +scripts = pyflakes +entry-points = pyflakes=pyflakes.scripts.pyflakes:main +initialization = if not sys.argv[1:]: sys.argv[1:] = ["${buildout:src}"] + +[pyflakesrun] +recipe = collective.recipe.cmd +on_install = true +cmds = ${buildout:develop}/bin/${pyflakes:scripts} + +[test] +recipe = zc.recipe.testrunner +eggs = pyams_media [test] + +[versions] +pyams_media = 0.1.0 diff -r 967f905e1de5 -r 240f2efa4a1f docs/HISTORY.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/HISTORY.txt Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,6 @@ +History +======= + +0.1.0 +----- + - First release diff -r 967f905e1de5 -r 240f2efa4a1f docs/README.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/README.txt Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,40 @@ +.. contents:: + + +Introduction +============ + +pyams_media is a Pyramid/PyAMS extension package used to automatically convert and +display medias, actually audio and video files. + +Medias conversion is based on FFmpeg binary, which must be available on the web server. + + +Medias conversions +================== + +Medias conversion implies several pre-requisites: + + - the ''ffmpeg'' executable must be available in your path; + + - you have to rely a ZEO connection handling a blobs cache directory; + + - you have to create this ZEO connection in your PyAMS control panel. + +A PyAMS medias converter is automatically created when pyams_package is included into your configuration +when you execute the ''pyams_upgrade'' command line tool (see ''pyams_utils'' package). + + +Conversion configuration +======================== + +Medias conversion is based on a specific listening process using ØMQ messages. The listening address must be defined +in your configuration file under the key ''pyams_media.tcp_handler'', in the ''ip:port'' form. For example:: + + pyams_media.tcp_handler = 127.0.0.1:5556 + +PyAMS control panel allows you to define several conversion settings, for example to define which audio and video +formats should be available, as well as a few FFmpeg conversion settings (frame size, bitrate, sampling...). + +Conversion is launched automatically in the background as soon as a media file is added to any content. Converted +medias are stored in the ZODB as blob files in the original media file annotations. diff -r 967f905e1de5 -r 240f2efa4a1f setup.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/setup.py Tue Sep 08 17:12:41 2015 +0200 @@ -0,0 +1,67 @@ +# +# Copyright (c) 2008-2015 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# + +""" +This module contains pyams_media package +""" +from setuptools import setup, find_packages +import os + +DOCS = os.path.join(os.path.dirname(__file__), + 'docs') + +README = os.path.join(DOCS, 'README.txt') +HISTORY = os.path.join(DOCS, 'HISTORY.txt') + +version = '0.1.0' +long_description = open(README).read() + '\n\n' + open(HISTORY).read() + +tests_require = [] + +setup(name='pyams_media', + version=version, + description="PyAMS media interfaces and classes", + long_description=long_description, + classifiers=[ + "License :: OSI Approved :: Zope Public License", + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Framework :: Pyramid", + "Topic :: Software Development :: Libraries :: Python Modules", + ], + keywords='Pyramid PyAMS media', + author='Thierry Florac', + author_email='tflorac@ulthar.net', + url='http://hg.ztfy.org/pyams/pyams_media', + license='ZPL', + packages=find_packages('src'), + package_dir={'': 'src'}, + namespace_packages=[], + include_package_data=True, + package_data={'': ['*.zcml', '*.txt', '*.pt', '*.pot', '*.po', '*.mo', '*.png', '*.gif', '*.jpeg', '*.jpg', '*.css', '*.js']}, + zip_safe=False, + # uncomment this to be able to run tests with setup.py + test_suite="pyams_media.tests.test_utilsdocs.test_suite", + tests_require=tests_require, + extras_require=dict(test=tests_require), + install_requires=[ + 'setuptools', + # -*- Extra requirements: -*- + 'pyramid', + 'zope.component', + 'zope.interface', + ], + entry_points={ + 'fanstatic.libraries': [ + 'pyams_media = pyams_media.skin:library' + ] + }) diff -r 967f905e1de5 -r 240f2efa4a1f src/pyams_media/locales/fr/LC_MESSAGES/pyams_media.mo Binary file src/pyams_media/locales/fr/LC_MESSAGES/pyams_media.mo has changed diff -r 967f905e1de5 -r 240f2efa4a1f src/pyams_media/locales/fr/LC_MESSAGES/pyams_media.po --- a/src/pyams_media/locales/fr/LC_MESSAGES/pyams_media.po Tue Sep 08 17:02:47 2015 +0200 +++ b/src/pyams_media/locales/fr/LC_MESSAGES/pyams_media.po Tue Sep 08 17:12:41 2015 +0200 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE 1.0\n" -"POT-Creation-Date: 2015-08-28 15:21+0200\n" +"POT-Creation-Date: 2015-09-08 16:32+0200\n" "PO-Revision-Date: 2015-08-28 13:59+0200\n" "Last-Translator: Thierry Florac \n" "Language-Team: French\n" @@ -16,51 +16,67 @@ "Generated-By: Lingua 3.8\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/pyams_media/converter.py:89 +#: src/pyams_media/converter.py:103 msgid "WAV audio converter" msgstr "Conversion audio WAV" -#: src/pyams_media/converter.py:97 +#: src/pyams_media/converter.py:111 msgid "MP3 audio converter" msgstr "Conversion audio MP3" -#: src/pyams_media/converter.py:105 +#: src/pyams_media/converter.py:119 msgid "OGG audio converter" msgstr "Conversion audio OGG" -#: src/pyams_media/converter.py:151 +#: src/pyams_media/converter.py:178 msgid "FLV (Flash Video) video converter" msgstr "Conversion vidéo FLV (Flash)" -#: src/pyams_media/converter.py:159 +#: src/pyams_media/converter.py:194 msgid "MP4 (HTML5) video converter" msgstr "Conversion vidéo MP4 (HTML5)" -#: src/pyams_media/converter.py:168 +#: src/pyams_media/converter.py:213 msgid "OGG video converter" msgstr "Conversion vidéo OGG" -#: src/pyams_media/converter.py:176 +#: src/pyams_media/converter.py:221 msgid "WebM video converter" msgstr "Conversion vidéo WebM" -#: src/pyams_media/zmi/__init__.py:50 +#: src/pyams_media/zmi/media.py:47 +msgid "Media conversions..." +msgstr "Conversion du média..." + +#: src/pyams_media/zmi/media.py:58 +msgid "Selected media conversions" +msgstr "Conversions du média" + +#: src/pyams_media/zmi/__init__.py:51 msgid "Update medias converter properties" msgstr "Modifier les propriétés du convertisseur de médias" -#: src/pyams_media/zmi/__init__.py:71 +#: src/pyams_media/zmi/__init__.py:68 +msgid "Video conversion" +msgstr "Conversion vidéo" + +#: src/pyams_media/zmi/__init__.py:85 +msgid "Audio conversion" +msgstr "Conversion audio" + +#: src/pyams_media/zmi/__init__.py:105 msgid "Test process connection..." msgstr "Tester la connexion..." -#: src/pyams_media/zmi/__init__.py:94 +#: src/pyams_media/zmi/__init__.py:128 msgid "Test medias converter process connection" msgstr "Tester la connexion au processus de conversion" -#: src/pyams_media/zmi/__init__.py:81 src/pyams_media/zmi/video.py:71 +#: src/pyams_media/zmi/__init__.py:115 src/pyams_media/zmi/video.py:71 msgid "Close" msgstr "Fermer" -#: src/pyams_media/zmi/__init__.py:82 +#: src/pyams_media/zmi/__init__.py:116 msgid "Test connection" msgstr "Tester la connexion" @@ -101,63 +117,87 @@ msgid "An error occurred. No created thumbnail." msgstr "Une erreur est intervenue. L'illustration n'a pas pu être générée." -#: src/pyams_media/interfaces/__init__.py:161 +#: src/pyams_media/zmi/templates/media-conversions.pt:10 +msgid "Original size" +msgstr "Taille d'origine" + +#: src/pyams_media/zmi/templates/media-conversions.pt:39 +#: src/pyams_media/zmi/templates/media-conversions.pt:56 +msgid "OK" +msgstr "OK" + +#: src/pyams_media/zmi/templates/media-conversions.pt:42 +#: src/pyams_media/zmi/templates/media-conversions.pt:59 +msgid "Waiting..." +msgstr "En attente..." + +#: src/pyams_media/interfaces/__init__.py:167 msgid "ZEO connection name" msgstr "Connexion ZEO" -#: src/pyams_media/interfaces/__init__.py:162 +#: src/pyams_media/interfaces/__init__.py:168 msgid "Name of ZEO connection utility defining converter connection" msgstr "Nom de la connexion ZEO utilisée par le processus de conversion" -#: src/pyams_media/interfaces/__init__.py:166 +#: src/pyams_media/interfaces/__init__.py:172 msgid "Video formats conversions" msgstr "Formats de conversion vidéo" -#: src/pyams_media/interfaces/__init__.py:167 +#: src/pyams_media/interfaces/__init__.py:173 msgid "Published video files will be automatically converted to this format" msgstr "Les vidéos publiées seront automatiquement converties dans ces formats" -#: src/pyams_media/interfaces/__init__.py:171 +#: src/pyams_media/interfaces/__init__.py:177 msgid "Video frames size" msgstr "Taille de l'image" -#: src/pyams_media/interfaces/__init__.py:172 +#: src/pyams_media/interfaces/__init__.py:178 msgid "Leave empty to keep original frame size..." msgstr "Indiquez ici les différentes résolutions qui seront générées..." -#: src/pyams_media/interfaces/__init__.py:176 +#: src/pyams_media/interfaces/__init__.py:182 msgid "Video audio frequency" msgstr "Fréquence audio" -#: src/pyams_media/interfaces/__init__.py:177 +#: src/pyams_media/interfaces/__init__.py:183 +#: src/pyams_media/interfaces/__init__.py:201 msgid "A common value is 22050. Leave empty to keep original value." msgstr "" "Une valeur courante est 22050. Laissez cette zone vide pour garder la valeur " -"de la vidéo d'origine." +"du média d'origine." -#: src/pyams_media/interfaces/__init__.py:180 +#: src/pyams_media/interfaces/__init__.py:186 msgid "Video audio bitrate" msgstr "Débit vidéo" -#: src/pyams_media/interfaces/__init__.py:181 +#: src/pyams_media/interfaces/__init__.py:187 +#: src/pyams_media/interfaces/__init__.py:205 msgid "In kilo-bytes per second. Leave empty to keep original value." msgstr "" -"En kilo-octets par seconde. Laissez cette zone vide pour garder la valeur de " -"la vidéo d'origine." +"En kilo-octets par seconde. Laissez cette zone vide pour garder la valeur du " +"média d'origine." -#: src/pyams_media/interfaces/__init__.py:184 +#: src/pyams_media/interfaces/__init__.py:190 msgid "Video quantisation scale" msgstr "Quantification vidéo" -#: src/pyams_media/interfaces/__init__.py:185 +#: src/pyams_media/interfaces/__init__.py:191 msgid "Lower value indicates higher quality" msgstr "Une valeur faible indique une qualité plus élevée" -#: src/pyams_media/interfaces/__init__.py:189 +#: src/pyams_media/interfaces/__init__.py:195 msgid "Audio formats conversions" msgstr "Formats de conversion audio" -#: src/pyams_media/interfaces/__init__.py:190 +#: src/pyams_media/interfaces/__init__.py:196 msgid "Published audio files will be automatically converted to this format" msgstr "" "Les fichiers audios publiés seront automatiquement convertis dans ces formats" + +#: src/pyams_media/interfaces/__init__.py:200 +msgid "Audio frequency" +msgstr "Fréquence audio" + +#: src/pyams_media/interfaces/__init__.py:204 +msgid "Audio bitrate" +msgstr "Débit audio" diff -r 967f905e1de5 -r 240f2efa4a1f src/pyams_media/locales/pyams_media.pot --- a/src/pyams_media/locales/pyams_media.pot Tue Sep 08 17:02:47 2015 +0200 +++ b/src/pyams_media/locales/pyams_media.pot Tue Sep 08 17:12:41 2015 +0200 @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE 1.0\n" -"POT-Creation-Date: 2015-08-28 15:21+0200\n" +"POT-Creation-Date: 2015-09-08 16:32+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" @@ -16,51 +16,67 @@ "Content-Transfer-Encoding: 8bit\n" "Generated-By: Lingua 3.8\n" -#: ./src/pyams_media/converter.py:89 +#: ./src/pyams_media/converter.py:103 msgid "WAV audio converter" msgstr "" -#: ./src/pyams_media/converter.py:97 +#: ./src/pyams_media/converter.py:111 msgid "MP3 audio converter" msgstr "" -#: ./src/pyams_media/converter.py:105 +#: ./src/pyams_media/converter.py:119 msgid "OGG audio converter" msgstr "" -#: ./src/pyams_media/converter.py:151 +#: ./src/pyams_media/converter.py:178 msgid "FLV (Flash Video) video converter" msgstr "" -#: ./src/pyams_media/converter.py:159 +#: ./src/pyams_media/converter.py:194 msgid "MP4 (HTML5) video converter" msgstr "" -#: ./src/pyams_media/converter.py:168 +#: ./src/pyams_media/converter.py:213 msgid "OGG video converter" msgstr "" -#: ./src/pyams_media/converter.py:176 +#: ./src/pyams_media/converter.py:221 msgid "WebM video converter" msgstr "" -#: ./src/pyams_media/zmi/__init__.py:50 +#: ./src/pyams_media/zmi/media.py:47 +msgid "Media conversions..." +msgstr "" + +#: ./src/pyams_media/zmi/media.py:58 +msgid "Selected media conversions" +msgstr "" + +#: ./src/pyams_media/zmi/__init__.py:51 msgid "Update medias converter properties" msgstr "" -#: ./src/pyams_media/zmi/__init__.py:71 +#: ./src/pyams_media/zmi/__init__.py:68 +msgid "Video conversion" +msgstr "" + +#: ./src/pyams_media/zmi/__init__.py:85 +msgid "Audio conversion" +msgstr "" + +#: ./src/pyams_media/zmi/__init__.py:105 msgid "Test process connection..." msgstr "" -#: ./src/pyams_media/zmi/__init__.py:94 +#: ./src/pyams_media/zmi/__init__.py:128 msgid "Test medias converter process connection" msgstr "" -#: ./src/pyams_media/zmi/__init__.py:81 ./src/pyams_media/zmi/video.py:71 +#: ./src/pyams_media/zmi/__init__.py:115 ./src/pyams_media/zmi/video.py:71 msgid "Close" msgstr "" -#: ./src/pyams_media/zmi/__init__.py:82 +#: ./src/pyams_media/zmi/__init__.py:116 msgid "Test connection" msgstr "" @@ -96,58 +112,82 @@ msgid "An error occurred. No created thumbnail." msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:161 -msgid "ZEO connection name" +#: ./src/pyams_media/zmi/templates/media-conversions.pt:10 +msgid "Original size" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:162 -msgid "Name of ZEO connection utility defining converter connection" +#: ./src/pyams_media/zmi/templates/media-conversions.pt:39 +#: ./src/pyams_media/zmi/templates/media-conversions.pt:56 +msgid "OK" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:166 -msgid "Video formats conversions" +#: ./src/pyams_media/zmi/templates/media-conversions.pt:42 +#: ./src/pyams_media/zmi/templates/media-conversions.pt:59 +msgid "Waiting..." msgstr "" #: ./src/pyams_media/interfaces/__init__.py:167 +msgid "ZEO connection name" +msgstr "" + +#: ./src/pyams_media/interfaces/__init__.py:168 +msgid "Name of ZEO connection utility defining converter connection" +msgstr "" + +#: ./src/pyams_media/interfaces/__init__.py:172 +msgid "Video formats conversions" +msgstr "" + +#: ./src/pyams_media/interfaces/__init__.py:173 msgid "Published video files will be automatically converted to this format" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:171 +#: ./src/pyams_media/interfaces/__init__.py:177 msgid "Video frames size" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:172 +#: ./src/pyams_media/interfaces/__init__.py:178 msgid "Leave empty to keep original frame size..." msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:176 +#: ./src/pyams_media/interfaces/__init__.py:182 msgid "Video audio frequency" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:177 +#: ./src/pyams_media/interfaces/__init__.py:183 +#: ./src/pyams_media/interfaces/__init__.py:201 msgid "A common value is 22050. Leave empty to keep original value." msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:180 +#: ./src/pyams_media/interfaces/__init__.py:186 msgid "Video audio bitrate" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:181 +#: ./src/pyams_media/interfaces/__init__.py:187 +#: ./src/pyams_media/interfaces/__init__.py:205 msgid "In kilo-bytes per second. Leave empty to keep original value." msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:184 +#: ./src/pyams_media/interfaces/__init__.py:190 msgid "Video quantisation scale" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:185 +#: ./src/pyams_media/interfaces/__init__.py:191 msgid "Lower value indicates higher quality" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:189 +#: ./src/pyams_media/interfaces/__init__.py:195 msgid "Audio formats conversions" msgstr "" -#: ./src/pyams_media/interfaces/__init__.py:190 +#: ./src/pyams_media/interfaces/__init__.py:196 msgid "Published audio files will be automatically converted to this format" msgstr "" + +#: ./src/pyams_media/interfaces/__init__.py:200 +msgid "Audio frequency" +msgstr "" + +#: ./src/pyams_media/interfaces/__init__.py:204 +msgid "Audio bitrate" +msgstr ""