This was a SoC last year and got of to a nice start, but taking it a production level could be a possibility for this years SoC.
Contents
What is it?
This project brings to user all conversions, extractions and media operations that a user want to make integrated in desktop environment. Each application have different needs of a transcode operation, working in background with GStreamer. These operations are implemented as GStreamer services to any application, offering to them dialogs and functions to these media operations.
Wanted operations
At MediaServices/wanted page you can post a operation that you want and/or use in your day, like "convert mp3 to ogg" or "extract mp3 from flash video". Please contribute with it, your opinion is very important to this project!
Developing
The official repository is being stored at Google hosting. To download it, you can use:
svn checkout http://gst-media-services.googlecode.com/svn/trunk/
Some developing discussions are presented below.
UI Dialogs
I made a screenshot of how the default UI dialog could be:
Files to convert: is a list that user can add or remove files with the right-side buttons, where user can add any number of files to input them. I'm not sure if that way is understandable to the user that he can choose many files to do a batch operation or he can choose audio and/or video and/or images to mix them. When a file is added, the list can have the properties on it to set properties of the mix (like in what time it should be shown, for how much time if is a image, what is it volume if is a sound, and so on). Not intented to be released at a first time, the input could be a stream or an URI address, considering any stream too.
Video Output: here user (or the application which uses this dialog) choose the video format, based in the Encoding Profiles. Each profile has some properties, which is under discussion at the EncodingProfiles section. The default option depends of the input, the selected files: If user choose only audio files, the video appears as "No Video" (better is to disable it). If he choose a video, this box goes to a "maintain the same format" option, considering that there weren't any application which called the dialog with a format input. If user choose many videos, the dialog counts how much videos have of each format and the major format is the selected, so user can convert the minority videos to the majority format. If user choose videos and images, audios and videos, audios videos and images together, or just images, it's a mix case and dialog can handle this by showing some advanced options for each file selected.
Audio Output: default is to let the same audio. When user choose a video format, the audio choose the video-audio's profile, as I'm planning that all videos links audio profiles for its audio part. A "No Audio" option need to be done too.
Target folder: Where the results should be dropped. - problem with the mix operation: how can I presume what is the name of resulting file? Should I add another field for it if I detect a mix case?
Bottom Buttons: Edit profiles is a button to open the Profiles Editor, a tool that I want to do later, to help users to build their own profiles. At least, this button can let the user build its own pipeline, or change a pre-defined one. Transcode button transcode the files (is it the best name? Should I use Convert / Extract / Mix depending of selected operation?), and appear two new buttons when the operation is finished: "Close" and "Open target". A progress screen should appear when the transcode button is pressed.
Visions of how to offer service
A nice way to do this project is to provide a running service separated from the GUI dialogs. The options are:
- server: running under some port, allowing remote operations by socket connection;
- process: just run as a different process, good to don't open a new server, bad if I want to use other GUI types (like to do a web service to do these operations);
- lib call: maybe too much integrated with dialogs;
- program: just run as a separated program, with some input method like a temp file or even an input argument.
GStreamer Encoding Profiles
EncodingProfiles need to be implemented in XML, like Banshee's Audio profile, but adapting it to work with videos and more.
Questions about this:
- Is S-Expression not so much to do this? It covers all features needed, like integrate video and audio commands?
- How can video profiles use audio profiles, I mean, how the final gst pipeline will looks like? Demux audio from video and then do both separate, then integrate them? Is this every time possible? Is this efficient?
- Plugin-needed, a new tag to require the plugins for a profile be operated. Should we require a min version?
StefanKost's opinions on those:
- I would first like to see a (python script) that dumps possible configurations for muxer and codecs from the registry. Then we need a list what are the parameters users what to tweak. Obviously its bitrates for each stream, but the others are not uninteresting. Maybe all should be shown.
- For the transcoding building the pipeline needs to be smart, if one or more codecs are the same if should not decode and reencode. Decodebin2 has a caps property that could be used here.
No versioning needed, the newer the better
Services to provide
I was thinking on the possible services that could be useful, not only the conversion - which is my primary objective for now. Here are some:
- A dialog for get a pipeline of conversion only - application can choose to do the operation by itself, maybe not at this selection time.
- A dialog which select and convert files.
- A file selector which select and return files with media info -- maybe offer a filter to files which gstreamer can open only, or just by mimetype / extensions.
Similar projects
Here is a list with similar projects, which doesn't use necessarily GStreamer or act as dialogs only, but do conversions and are free software:
Project name |
Project URL |
Engine |
Language |
Use any profile system |
Video Conversion |
Audio Conversion |
Dialog or App |
Comments |
nautilus-sound-converter |
GStreamer |
C ANSI |
Yes, gnome-audio-profiles |
No |
Yes |
Dialog |
good to integrate with nautilus, the simplest UI I saw. |
|
AudioFormat |
GStreamer |
Python |
Yes, gnome-audio-profiles |
No |
Yes |
both |
Juri Pakaste (author) allowed me to fork the code to support video and offer as a gst service. |
|
SoundConverter |
GStreamer |
Python |
No |
No |
Yes |
App |
Gnome app, have nice features to get to gst-media-services, like the file list showing music title and author (and the filename) and some tag name utilities. |
|
SoundKonverter |
Various |
C++ |
No |
No |
Yes |
App |
KDE app, more complicated UI, but richest then others. |
|
Movic |
FFMpeg |
C++ |
No |
Yes |
No (not only audio) |
App |
Easy to use convertor, have some default profiles to encode for some mobile formats (you choose your mobile device and movic knows what is your format), but can't convert to a personalized format. |
|
MultimediaConverter |
FFMpeg & Mplayer |
KDE Komander script |
No |
Yes |
Yes |
App |
A bit complex GUI, don't auto-detect input stream format |
Original design can be found at MediaServices/design

