├── COPYING ├── HISTORY.md ├── README.md ├── data ├── codepages.lst ├── devede.1 ├── devede_ng.py.desktop ├── devedeng.svg ├── devedeng_icon.svg ├── interface │ ├── wabout.ui │ ├── wadd_files.ui │ ├── wask.ui │ ├── wask_subtitles.ui │ ├── wcreate.ui │ ├── wdone.ui │ ├── werror.ui │ ├── wfile_properties.ui │ ├── wmain.ui │ ├── wmenu.ui │ ├── wmessage.ui │ ├── wneeded.ui │ ├── wopen_project.ui │ ├── wpreview.ui │ ├── wprogress.ui │ ├── wsave_project.ui │ ├── wselect_disk.ui │ ├── wsettings.ui │ └── wtitle_properties.ui ├── languages.lst └── pixmaps │ ├── background.png │ ├── backgrounds │ ├── biglens.png │ ├── blackbg.png │ ├── default_bg.png │ └── dvdfilm.png │ ├── base_ntsc.mpg │ ├── base_ntsc_wide.mpg │ ├── base_pal.mpg │ ├── base_pal_wide.mpg │ ├── devedeng.png │ ├── icon_cvd.png │ ├── icon_divx.png │ ├── icon_dvd.png │ ├── icon_mkv.png │ ├── icon_svcd.png │ ├── icon_vcd.png │ ├── silence.ogg │ ├── to_classic_blackbars.png │ ├── to_classic_cut.png │ ├── to_classic_scale.png │ ├── to_wide_blackbars.png │ ├── to_wide_cut.png │ └── to_wide_scale.png ├── doc ├── basic.html ├── contact.html ├── converting.png ├── create.png ├── devede.css ├── disc_type_window.png ├── disk.html ├── done.png ├── error.png ├── faq.html ├── file.html ├── gpl.html ├── index.html ├── main.html ├── main.png ├── menu.html ├── menu.png ├── movie1.png ├── movie1b.png ├── movie2.png ├── movie2b.png ├── movie3.png ├── movie4.png ├── movie5.png ├── movie6.png ├── movie7.png ├── preferences.html ├── preferences.png └── select.html ├── po ├── POTFILES.in ├── ca.po ├── cs_CZ.po ├── da.po ├── de_DE.po ├── el.po ├── es.po ├── fr.po ├── gl.po ├── hu_HU.po ├── it_IT.po ├── nb_NO.po ├── nl.po ├── pl.po ├── pt_BR.po ├── pt_PT.po ├── ru.po ├── sk.po ├── sv.po ├── tr.po ├── untitled.pot ├── zh_CN.po └── zh_TW.po ├── setup.cfg ├── setup.py ├── src ├── copy_files_verbose.py ├── devede_ng.py ├── devedeng │ ├── __init__.py │ ├── about.py │ ├── add_files.py │ ├── ask.py │ ├── ask_subtitles.py │ ├── avbase.py │ ├── avconv.py │ ├── avprobe.py │ ├── brasero.py │ ├── choose_disc_type.py │ ├── configuration_data.py │ ├── converter.py │ ├── create_disk_window.py │ ├── dvd_menu.py │ ├── dvdauthor_converter.py │ ├── end_job.py │ ├── error.py │ ├── executor.py │ ├── ffmpeg.py │ ├── ffprobe.py │ ├── file_copy.py │ ├── file_movie.py │ ├── genisoimage.py │ ├── help.py │ ├── interface_manager.py │ ├── k3b.py │ ├── message.py │ ├── mkisofs.py │ ├── mplayer.py │ ├── mpv.py │ ├── mux_dvd_menu.py │ ├── opensave.py │ ├── preview.py │ ├── project.py │ ├── runner.py │ ├── settings.py │ ├── shutdown.py │ ├── subtitles_mux.py │ ├── title.py │ ├── vcdimager_converter.py │ ├── vlc.py │ └── xfburn.py └── unitests │ └── test_avconv.py ├── stdeb.cfg └── stpacman.cfg /HISTORY.md: -------------------------------------------------------------------------------- 1 | # History of versions # 2 | 3 | * version 4.11.0 (2018-05-01) 4 | * Added support for XFBurn 5 | * Added experimental support for 16:9 menues 6 | 7 | * version 4.10.0 (2018-04-29) 8 | * Now, when using a custom audio in the menu, it will last the whole audio duration, not 30 seconds 9 | 10 | * version 4.9.0 (2018-04-08) 11 | * Fixed a division by 0 when it is not possible to get the original aspect ratio 12 | * Added extra check for MSGFMT binary, needed to install Devede 13 | 14 | * version 4.8.12 (2018-01-21) 15 | * Fixed the icons in the main window 16 | 17 | * version 4.8.11 (2017-12-03) 18 | * Now shows the icon in wayland 19 | * Now sets transient for settings window 20 | 21 | * version 4.8.10 (2017-11-26) 22 | * Removed minrate during second pass when using two-pass encoding because it fails with ffmpeg 23 | 24 | * version 4.8.9 (2017-07-10) 25 | * Fixed bug when there are no CD burner installed 26 | 27 | * version 4.8.8 (2017-02-07) 28 | * Fixed genisoimage bug with some locales 29 | 30 | * version 4.8.7 (2017-01-29) 31 | * Allows to translate the "Play all" text in the DVD menu 32 | * Fixed mkisofs bug with some locales 33 | 34 | * version 4.8.6 (2016-12-14) 35 | * Now ensures that the average bitrate is never smaller than the minimum bitrate 36 | * Now the matroska and divx files have the right extension 37 | 38 | * version 4.8.5 (2016-11-24) 39 | * Fixed a bug when loading a project file (thanks to RecursiveProgrammer) 40 | * Updated the german translation 41 | 42 | * version 4.8.4 (2016-11-03) 43 | * Allows to set if a movie is shown or not in the DVD menu from the main window 44 | 45 | * version 4.8.3 (2016-10-16) 46 | * Fixed the problem fixed bitrate problem with FFMpeg and AVConv (thanks to Juniorsnet) 47 | 48 | * version 4.8.2 (2016-09-24) 49 | * Fixed a problem when adding several subtitles to the same movie (thanks to Rocco Barisci) 50 | 51 | * version 4.8.1 (2016-09-05) 52 | * Fixed a float value used for volume where it expected an integer 53 | 54 | * version 4.8.0 (2016-08-12) 55 | * Fixed a division by zero when a clip has a duration of less than one second 56 | 57 | * version 4.7.1 (2016-07-17) 58 | * Updated translations 59 | 60 | * version 4.7.0 (2016-04-24) 61 | * Fixed a bug when creating the subtitles'XML: now ensures that an integer value is passed 62 | 63 | * version 4.6.1 (2016-03-14) 64 | * Fixed translations 65 | 66 | * version 4.6.0 (2016-03-13) 67 | * Fixed a bug when using the Play all option on menus with several pages 68 | * Updated italian translation 69 | 70 | * version 4.5.0 (2016-01-02) 71 | * Reduced the height of the MENU window 72 | * Now the menu works fine when enabling the "Play all" option 73 | 74 | * version 4.4.0 (2015-11-07) 75 | * Removed MPlayer as an option for getting movie information 76 | 77 | * version 4.3.2 (2015-11-07) 78 | * Added extra debug info in the log 79 | 80 | * version 4.3.1 (2015-11-07) 81 | * Added manpage (thanks to Alession Treglia) 82 | 83 | * version 4.3 (2015-10-26) 84 | * Now doesn't fail when creating a DVD without menu 85 | * Added help in html format 86 | 87 | * version 4.2 (2015-09-08) 88 | * Now can work with old and new versions of AVConv 89 | * Added extra debug code to be able to track problems with MKV files 90 | 91 | * version 4.1 (2015-06-30) 92 | * Fixed dependencies in package 93 | * Trying to fix a bug with MKV files (incorrect stream assign) 94 | 95 | * version 4.0 (2015-04-26) 96 | * First stable version of DevedeNG 97 | 98 | * version 0.1.0 beta 12 (2015-02-01) 99 | * Now uses the version number available in the CONFIGURATION_DATA file for the setup process 100 | * Fixed the icon name in the .desktop file 101 | 102 | * version 0.1 beta 11 (2015-01-29) 103 | * Now allows to automatically generate a debian package 104 | * Renamed the module from 'devede' to 'devedeng' 105 | * Renamed some files to avoid clashing with the 'classic devede' debian package. 106 | 107 | * version 0.1 beta 10 (2015-01-22) 108 | * Now jumps to the desired next video when the current movie ends and the creator set it to jump to another menu entry 109 | 110 | * version 0.1 beta 9 (2015-01-16) 111 | * Now doesn't fail with AVPROBE or FFPROBE if a file doesn't have streams 112 | 113 | * version 0.1 beta 8 (2014-12-28) 114 | * Added an extra fix for AVPROBE and FFPROBE, using the human readable strings to get the duration 115 | * Cleaner code for AVPROBE and FFPROBE 116 | * Removed devedesans.ttf file 117 | * Updated the setup.py file 118 | 119 | * version 0.1 beta 7 (2014-12-28) 120 | * Moved the priority of MPLAYER over AVPROBE and FFPROBE until I discover what is happening with some data fields 121 | 122 | * version 0.1 beta 6 (2014-12-27) 123 | * Fixed AVPROBE and FFPROBE command line 124 | 125 | * version 0.1 beta 5 (2014-12-27) 126 | * Added support for MPV as movie player 127 | * Added support for ffprobe and avprobe as movie info detector 128 | 129 | * version 0.1 beta 4 (2014-12-25) 130 | * Now ensures that the maximum bitrate is honored 131 | * Added the maximum bitrates for each available format 132 | 133 | * version 0.1 beta 3 (2014-12-21) 134 | * Fixed the subtitle colors 135 | * Now puts the video and audio streams in the right order 136 | 137 | * version 0.1 beta 2 (2014-12-07) 138 | * Fixed a bug when jumping to a video not visible in the main menu 139 | * Fixed a bug when the main menu has two or more pages 140 | * Default size for main window bigger 141 | * Allows to change the title by double-clicking on it 142 | * Shows the duration of each title 143 | 144 | * version 0.1 beta 1 (2014-09-22) 145 | * Fixed several strings in the menu 146 | * Fixed the bug that prevented to choose the final folder 147 | * Removed single quotes that triggered an exception when creating a DVD without menu 148 | 149 | * version 0.1 alpha 2 (2014-08-13) 150 | * Updated spanish translation and added POTFILES.in file 151 | * Allows to choose between MP2 and AC3 audio for menus 152 | * Now only deletes the bare minimum files and folders to be able to create a disk in the specified final folder 153 | * Better message text to specify which folder will be deleted when the final folder already exists 154 | * It failed when the selected backend was not installed in the system. Fixed. 155 | * Now shows a default value for preview duration 156 | * Fixed progress bar for subtitle creation 157 | * Allows to choose the subtitle colors 158 | * Allows to set properties for several files in one step 159 | * Fixed bug when setting PAL or NTSC toggle in file properties 160 | * Added two-pass conversion 161 | * Now detects separately MKISOFS and GENISOIMAGE, allowing to have only one of them installed in the system 162 | * Now checks that the number of files is smaller than the limit for DVD projects 163 | * Now uses GLib for DBus instead of python-dbus 164 | * Fixed the DESKTOP file to ensure that an icon is shown in the applications menu 165 | 166 | * version 0.1 alpha 1 (2014-08-06) 167 | * First public version 168 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DEVEDE NG # 2 | 3 | **IMPORTANT: Devede has been migrated to Gitlab** 4 | 5 | https://gitlab.com/rastersoft/devedeng 6 | 7 | ## WHAT IS IT? ## 8 | 9 | Devede NG is a rewrite of the Devede DVD disc authoring program. This new 10 | code has been written from scratch, and uses Python3 and Gtk3. It is also 11 | cleaner, which will allow to add new features in the future. 12 | 13 | 14 | ## INSTALLING DEVEDE NG ## 15 | 16 | Just type: 17 | 18 | sudo ./setup.py install 19 | 20 | 21 | ## USING DEVEDE NG ## 22 | 23 | Devede NG is very similar to the old devede, with the 24 | exception that, when creating a DVD disc, there are no more "titles" and 25 | "files". Instead, you just add files to the disc. It also lacks support for Mencoder, 26 | and can use only FFMpeg or AVConv for video conversion. 27 | 28 | The current visible changes are quite small in number: 29 | 30 | * Now allows to add several files at once 31 | * Now makes better use of multicore systems by parallelizing the conversion of several movie files 32 | * The menu edition is interactive 33 | * Has a new "cut" resizing method, to allow to store as widescreen movies with black bars 34 | * Allows to create Matroska files with H.264 video and MP3 audio 35 | * Allows to use VLC, MPV or MPlayer for preview 36 | * Allows to choose between Brasero or K3B for burning the discs 37 | * Allows to set properties for several files in one step 38 | * Allows to choose the subtitle colors 39 | * Allows to choose between MP2 and AC3 audio for menus 40 | 41 | 42 | ## THINGS TO DO ## 43 | 44 | Some of the future ideas to add to Devede NG are, without an specific order: 45 | 46 | * add more backends 47 | * add more output formats 48 | * allow to replace the movie's audio track with one or several MP3 or OGG audio files 49 | * preview of a converted menu 50 | 51 | 52 | ## CONTACTING THE AUTHOR ## 53 | 54 | Sergio Costas Rodriguez 55 | rastersoft@gmail.com 56 | http://www.rastersoft.com 57 | https://gitlab.com/rastersoft/devedeng.git 58 | -------------------------------------------------------------------------------- /data/codepages.lst: -------------------------------------------------------------------------------- 1 | ASCII 2 | UTF-8 3 | ARMSCII-8 4 | BIG5 5 | BIG5-HKSCS 6 | CP850 7 | CP862 8 | CP866 9 | CP874 10 | CP932 11 | CP949 12 | CP950 13 | CP1133 14 | CP1250 15 | CP1251 16 | CP1252 17 | CP1253 18 | CP1254 19 | CP1255 20 | CP1256 21 | CP1257 22 | CP1258 23 | EUC-CN 24 | EUC-JP 25 | EUC-KR 26 | EUC-TW 27 | GBK 28 | GB18030 29 | Georgian-Academy 30 | Georgian-PS 31 | HZ 32 | ISO-2022-CN 33 | ISO-2022-CN-EXT 34 | ISO-2022-JP 35 | ISO-2022-JP-2 36 | ISO-2022-JP-1 37 | ISO-2022-KR 38 | ISO-8859-1 39 | ISO-8859-2 40 | ISO-8859-3 41 | ISO-8859-4 42 | ISO-8859-5 43 | ISO-8859-6 44 | ISO-8859-7 45 | ISO-8859-8 46 | ISO-8859-9 47 | ISO-8859-10 48 | ISO-8859-13 49 | ISO-8859-14 50 | ISO-8859-15 51 | ISO-8859-16 52 | JOHAB 53 | KOI8-R 54 | KOI8-T 55 | KOI8-U 56 | KOI8-RU 57 | MuleLao-1 58 | SHIFT_JIS 59 | TCVN 60 | TIS-620 61 | UTF-8 62 | UTF-16 63 | UTF-16BE 64 | UTF-16LE 65 | VISCII 66 | -------------------------------------------------------------------------------- /data/devede.1: -------------------------------------------------------------------------------- 1 | .IX Title "devede 1" 2 | .TH devede 1 "2009-08-25" "" "" 3 | .\" For nroff, turn off justification. Always turn off hyphenation; it makes 4 | .\" way too many mistakes in technical documents. 5 | .if n .ad l 6 | .nh 7 | .SH "NAME" 8 | \&\fBdevede\fR \- A simple application to create Video DVDs 9 | .SH "SYNOPSIS" 10 | .IX Header "SYNOPSIS" 11 | .B devede 12 | .SH "DESCRIPTION" 13 | .IX Header "DESCRIPTION" 14 | \&\fBDeVeDe\fR allows users to create Video DVDs, suitable for home players, \ 15 | from any number of video files, in any of the formats supported by Mplayer. 16 | .PP 17 | It also allows user to create subtitles and even animated menus. 18 | .PP 19 | \&\fBDeVeDe\fR has been written in Python and GTK+ and after the \ 20 | installation the application is available from the Applications menu. 21 | .SH "AUTHOR" 22 | .IX Header "AUTHOR" 23 | \fBDeVeDe\fR was written by Sergio Costas 24 | .PP 25 | This manual was provided by Alessio Treglia \ 26 | for the Ubuntu project (and may be used by others). 27 | -------------------------------------------------------------------------------- /data/devede_ng.py.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | X-MultipleArgs=false 3 | Type=Application 4 | Name=DevedeNG 5 | GenericName=DVD/CD Video Creator 6 | X-GNOME-FullName=DevedeNG DVD/CD Video Creator 7 | X-GNOME-FullName[ca]=DevedeNG creador de CD/DVDs de vídeo 8 | X-GNOME-FullName[es]=DevedeNG creador de CD/DVDs de vídeo 9 | X-GNOME-FullName[gl]=DevedeNG creador de CD/DVDs de vídeo 10 | X-GNOME-FullName[pl]=DevedeNG tworzenie wideo na CD/DVD 11 | X-GNOME-FullName[it]=DevedeNG creatore di video CD/DVD 12 | Comment=Allows to create video CDs and DVDs, suitable to be reproduced in home DVD players 13 | Comment[ca]=Permet crear CDs i DVDs de vídeo, que poden reproduir-se en reproductors domèstics 14 | Comment[es]=Permite crear video CDs y DVDs, que pueden reproducirse en reproductores domésticos 15 | Comment[gl]=Permite crear video CDs e DVDs, que poden reproducirse en reproductores domésticos 16 | Comment[pl]=Pozwala stworzyć wideo na płytach CD lub DVD, do otwarzania w domowych odtwarzaczach DVD 17 | Comment[it]=Permette di creare video CD e DVD che possono essere riprodotti con lettori DVD 18 | Icon=devedeng_icon.svg 19 | TryExec=devede_ng.py 20 | Exec=devede_ng.py 21 | Categories=AudioVideo; 22 | -------------------------------------------------------------------------------- /data/interface/wabout.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | False 7 | False 8 | True 9 | center 10 | dialog 11 | False 12 | Devede NG 13 | 2014 Raster Software Vigo 14 | Sergio Costas Rodríguez 15 | devedeng.png 16 | 17 | gpl-3-0 18 | 19 | 20 | False 21 | vertical 22 | 2 23 | 24 | 25 | False 26 | end 27 | 28 | 29 | False 30 | True 31 | end 32 | 0 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /data/interface/wadd_files.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 740 7 | 400 8 | False 9 | Add new file(s) 10 | True 11 | center 12 | devedeng.svg 13 | dialog 14 | True 15 | False 16 | 17 | 18 | False 19 | vertical 20 | 2 21 | 22 | 23 | False 24 | end 25 | 26 | 27 | gtk-cancel 28 | True 29 | True 30 | True 31 | True 32 | 33 | 34 | False 35 | True 36 | 0 37 | 38 | 39 | 40 | 41 | gtk-ok 42 | True 43 | True 44 | True 45 | True 46 | 47 | 48 | False 49 | True 50 | 1 51 | 52 | 53 | 54 | 55 | False 56 | True 57 | end 58 | 0 59 | 60 | 61 | 62 | 63 | True 64 | False 65 | False 66 | True 67 | 68 | 69 | 70 | True 71 | True 72 | 1 73 | 74 | 75 | 76 | 77 | 78 | button1 79 | button_accept 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /data/interface/wask.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 320 7 | 240 8 | False 9 | False 10 | True 11 | center 12 | devedeng.svg 13 | dialog 14 | True 15 | False 16 | False 17 | 18 | 19 | False 20 | vertical 21 | 2 22 | 23 | 24 | False 25 | end 26 | 27 | 28 | gtk-cancel 29 | True 30 | True 31 | True 32 | True 33 | 34 | 35 | False 36 | True 37 | 0 38 | 39 | 40 | 41 | 42 | gtk-ok 43 | True 44 | True 45 | True 46 | True 47 | 48 | 49 | False 50 | True 51 | 1 52 | 53 | 54 | 55 | 56 | False 57 | True 58 | end 59 | 0 60 | 61 | 62 | 63 | 64 | True 65 | False 66 | True 67 | center 68 | True 69 | False 70 | 71 | 72 | True 73 | True 74 | 1 75 | 76 | 77 | 78 | 79 | 80 | button1 81 | button2 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /data/interface/wcreate.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 380 7 | 270 8 | False 9 | devede 10 | center 11 | devedeng.svg 12 | dialog 13 | 14 | 15 | False 16 | vertical 17 | 2 18 | 19 | 20 | False 21 | end 22 | 23 | 24 | gtk-cancel 25 | True 26 | True 27 | True 28 | True 29 | 30 | 31 | False 32 | True 33 | 0 34 | 35 | 36 | 37 | 38 | gtk-ok 39 | True 40 | True 41 | True 42 | True 43 | 44 | 45 | False 46 | True 47 | 1 48 | 49 | 50 | 51 | 52 | False 53 | True 54 | end 55 | 0 56 | 57 | 58 | 59 | 60 | True 61 | False 62 | vertical 63 | 64 | 65 | 380 66 | True 67 | False 68 | Choose the folder where Devede will create the files and a name for it. Do not use a folder in a VFAT/FAT32 drive. Characters /, | and \ are not accepted and will be replaced by underscores. 69 | fill 70 | True 71 | 72 | 73 | True 74 | True 75 | 0 76 | 77 | 78 | 79 | 80 | True 81 | False 82 | select-folder 83 | False 84 | 85 | 86 | 87 | False 88 | True 89 | 1 90 | 91 | 92 | 93 | 94 | True 95 | True 96 | 97 | 98 | 99 | False 100 | True 101 | 2 102 | 103 | 104 | 105 | 106 | Shutdown computer when disc is done 107 | True 108 | True 109 | False 110 | 0 111 | True 112 | 113 | 114 | False 115 | True 116 | 3 117 | 118 | 119 | 120 | 121 | True 122 | True 123 | 1 124 | 125 | 126 | 127 | 128 | 129 | button1 130 | accept 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /data/interface/werror.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 640 8 | False 9 | False 10 | True 11 | center 12 | dialog 13 | 14 | 15 | False 16 | vertical 17 | 2 18 | 19 | 20 | False 21 | center 22 | 23 | 24 | gtk-ok 25 | True 26 | True 27 | True 28 | True 29 | 30 | 31 | False 32 | True 33 | 0 34 | 35 | 36 | 37 | 38 | False 39 | True 40 | end 41 | 0 42 | 43 | 44 | 45 | 46 | True 47 | False 48 | vertical 49 | 50 | 51 | True 52 | False 53 | There was an error while creating the disc. 54 | 55 | 56 | False 57 | True 58 | 31 59 | 0 60 | 61 | 62 | 63 | 64 | True 65 | True 66 | True 67 | True 68 | True 69 | True 70 | 71 | 72 | True 73 | False 74 | True 75 | True 76 | vertical 77 | 78 | 79 | True 80 | True 81 | True 82 | True 83 | in 84 | 85 | 86 | 240 87 | True 88 | True 89 | True 90 | True 91 | debug_buffer 92 | 93 | 94 | 95 | 96 | True 97 | True 98 | 0 99 | 100 | 101 | 102 | 103 | gtk-copy 104 | True 105 | True 106 | True 107 | True 108 | 109 | 110 | 111 | False 112 | True 113 | 1 114 | 115 | 116 | 117 | 118 | 119 | 120 | True 121 | False 122 | Debugging data 123 | start 124 | 125 | 126 | 127 | 128 | True 129 | True 130 | 1 131 | 132 | 133 | 134 | 135 | True 136 | True 137 | 1 138 | 139 | 140 | 141 | 142 | 143 | button1 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /data/interface/wmessage.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 480 13 | 360 14 | False 15 | False 16 | True 17 | center 18 | dialog 19 | False 20 | 21 | 22 | False 23 | vertical 24 | 2 25 | 26 | 27 | False 28 | center 29 | 30 | 31 | gtk-ok 32 | True 33 | True 34 | True 35 | True 36 | 37 | 38 | False 39 | True 40 | 0 41 | 42 | 43 | 44 | 45 | False 46 | True 47 | end 48 | 0 49 | 50 | 51 | 52 | 53 | True 54 | False 55 | vertical 56 | 57 | 58 | True 59 | False 60 | fill 61 | True 62 | 63 | 64 | True 65 | True 66 | 0 67 | 68 | 69 | 70 | 71 | True 72 | True 73 | in 74 | 75 | 76 | True 77 | True 78 | liststore_elements 79 | False 80 | False 81 | False 82 | 83 | 84 | 85 | 86 | 87 | column 88 | 89 | 90 | 91 | 0 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | True 101 | True 102 | 1 103 | 104 | 105 | 106 | 107 | True 108 | True 109 | 1 110 | 111 | 112 | 113 | 114 | 115 | button1 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /data/interface/wneeded.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 640 8 | 350 9 | False 10 | dialog 11 | 12 | 13 | False 14 | vertical 15 | 2 16 | 17 | 18 | False 19 | center 20 | 21 | 22 | gtk-ok 23 | True 24 | True 25 | True 26 | True 27 | 28 | 29 | False 30 | True 31 | 0 32 | 33 | 34 | 35 | 36 | False 37 | True 38 | end 39 | 0 40 | 41 | 42 | 43 | 44 | True 45 | False 46 | vertical 47 | 48 | 49 | True 50 | False 51 | 4 52 | 4 53 | Programs needed by Devede NG 54 | 55 | 56 | False 57 | True 58 | 0 59 | 60 | 61 | 62 | 63 | True 64 | True 65 | in 66 | 67 | 68 | True 69 | True 70 | False 71 | False 72 | textbuffer 73 | 74 | 75 | 76 | 77 | True 78 | True 79 | 1 80 | 81 | 82 | 83 | 84 | True 85 | True 86 | 1 87 | 88 | 89 | 90 | 91 | 92 | button1 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /data/interface/wopen_project.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 680 7 | 420 8 | False 9 | True 10 | center 11 | devedeng.svg 12 | normal 13 | False 14 | 15 | 16 | False 17 | vertical 18 | 2 19 | 20 | 21 | False 22 | end 23 | 24 | 25 | gtk-cancel 26 | True 27 | True 28 | True 29 | True 30 | 31 | 32 | False 33 | True 34 | 0 35 | 36 | 37 | 38 | 39 | gtk-ok 40 | True 41 | True 42 | True 43 | True 44 | 45 | 46 | False 47 | True 48 | 1 49 | 50 | 51 | 52 | 53 | False 54 | True 55 | end 56 | 0 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | button1 66 | button2 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /data/interface/wpreview.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 7 | 1000 8 | 60 9 | 1 10 | 10 11 | 12 | 13 | False 14 | dialog 15 | 16 | 17 | False 18 | vertical 19 | 2 20 | 21 | 22 | False 23 | end 24 | 25 | 26 | gtk-cancel 27 | True 28 | True 29 | True 30 | True 31 | 32 | 33 | False 34 | True 35 | 0 36 | 37 | 38 | 39 | 40 | gtk-ok 41 | True 42 | True 43 | True 44 | True 45 | 46 | 47 | False 48 | True 49 | 1 50 | 51 | 52 | 53 | 54 | False 55 | True 56 | end 57 | 0 58 | 59 | 60 | 61 | 62 | True 63 | False 64 | vertical 65 | 66 | 67 | True 68 | False 69 | <b>Preview video</b> 70 | 71 | Devede will create a preview with the selected parameters, so you will be able to check the video quality, audio sync and so on. 72 | True 73 | center 74 | True 75 | 76 | 77 | True 78 | True 79 | 0 80 | 81 | 82 | 83 | 84 | True 85 | False 86 | 87 | 88 | True 89 | False 90 | Preview length: 91 | 92 | 93 | False 94 | True 95 | 0 96 | 97 | 98 | 99 | 100 | True 101 | True 102 | length 103 | 60 104 | 105 | 106 | True 107 | True 108 | 1 109 | 110 | 111 | 112 | 113 | False 114 | True 115 | 1 116 | 117 | 118 | 119 | 120 | True 121 | True 122 | 1 123 | 124 | 125 | 126 | 127 | 128 | button1 129 | button2 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /data/interface/wprogress.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 640 7 | False 8 | Creating... 9 | False 10 | True 11 | center 12 | devedeng.svg 13 | False 14 | False 15 | 16 | 17 | True 18 | False 19 | vertical 20 | 21 | 22 | True 23 | False 24 | Creating disc 25 | 26 | 27 | False 28 | True 29 | 28 30 | 0 31 | 32 | 33 | 34 | 35 | True 36 | False 37 | 0 38 | none 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | False 48 | True 49 | 1 50 | 51 | 52 | 53 | 54 | True 55 | False 56 | 0 57 | none 58 | 59 | 60 | True 61 | False 62 | True 63 | 64 | 65 | 66 | 67 | True 68 | False 69 | 6 70 | Project progress 71 | 72 | 73 | 74 | 75 | False 76 | True 77 | 2 78 | 79 | 80 | 81 | 82 | gtk-cancel 83 | True 84 | True 85 | True 86 | True 87 | 88 | 89 | 90 | False 91 | True 92 | 8 93 | 3 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /data/interface/wsave_project.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | False 7 | True 8 | center 9 | devedeng.svg 10 | normal 11 | save 12 | 13 | 14 | False 15 | vertical 16 | 2 17 | 18 | 19 | False 20 | end 21 | 22 | 23 | gtk-cancel 24 | True 25 | True 26 | True 27 | True 28 | 29 | 30 | False 31 | True 32 | 0 33 | 34 | 35 | 36 | 37 | gtk-ok 38 | True 39 | True 40 | True 41 | True 42 | 43 | 44 | False 45 | True 46 | 1 47 | 48 | 49 | 50 | 51 | False 52 | True 53 | end 54 | 0 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | button1 64 | button2 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /data/languages.lst: -------------------------------------------------------------------------------- 1 | AA (AFAR) 2 | AB (ABKHAZIAN) 3 | AF (AFRIKAANS) 4 | AM (AMHARIC) 5 | AR (ARABIC) 6 | AS (ASSAMESE) 7 | AY (AYMARA) 8 | AZ (AZERBAIJANI) 9 | BA (BASHKIR) 10 | BE (BYELORUSSIAN) 11 | BG (BULGARIAN) 12 | BH (BIHARI) 13 | BI (BISLAMA) 14 | BN (BENGALI;BANGLA) 15 | BO (TIBETAN) 16 | BR (BRETON) 17 | CA (CATALAN) 18 | CO (CORSICAN) 19 | CS (CZECH) 20 | CY (WELSH) 21 | DA (DANISH) 22 | DE (GERMAN) 23 | DZ (BHUTANI) 24 | EL (GREEK) 25 | EN (ENGLISH) 26 | EO (ESPERANTO) 27 | ES (SPANISH) 28 | ET (ESTONIAN) 29 | EU (BASQUE) 30 | FA (PERSIAN (farsi)) 31 | FI (FINNISH) 32 | FJ (FIJI) 33 | FO (FAROESE) 34 | FR (FRENCH) 35 | FY (FRISIAN) 36 | GA (IRISH) 37 | GD (SCOTS GAELIC) 38 | GL (GALICIAN) 39 | GN (GUARANI) 40 | GU (GUJARATI) 41 | HA (HAUSA) 42 | HI (HINDI) 43 | HR (CROATIAN) 44 | HU (HUNGARIAN) 45 | HY (ARMENIAN) 46 | IA (INTERLINGUA) 47 | IE (INTERLINGUE) 48 | IK (INUPIAK) 49 | IN (INDONESIAN) 50 | IS (ICELANDIC) 51 | IT (ITALIAN) 52 | IW (HEBREW) 53 | JA (JAPANESE) 54 | JI (YIDDISH) 55 | JV (JAVANESE) 56 | KA (GEORGIAN) 57 | KK (KAZAKH) 58 | KL (GREENLANDIC) 59 | KM (CAMBODIAN) 60 | KN (KANNADA) 61 | KO (KOREAN) 62 | KS (KASHMIRI) 63 | KU (KURDISH) 64 | KY (KIRGHIZ) 65 | LA (LATIN) 66 | LN (LINGALA) 67 | LO (LAOTHIAN) 68 | LT (LITHUANIAN) 69 | LV (LATVIAN;LETTISH) 70 | MG (MALAGASY) 71 | MI (MAORI) 72 | MK (MACEDONIAN) 73 | ML (MALAYALAM) 74 | MN (MONGOLIAN) 75 | MO (MOLDAVIAN) 76 | MR (MARATHI) 77 | MS (MALAY) 78 | MT (MALTESE) 79 | MY (BURMESE) 80 | NA (NAURU) 81 | NE (NEPALI) 82 | NL (DUTCH) 83 | NO (NORWEGIAN) 84 | OC (OCCITAN) 85 | OM (AFAN (OROMO)) 86 | OR (ORIYA) 87 | PA (PUNJABI) 88 | PL (POLISH) 89 | PS (PASHTO;PUSHTO) 90 | PT (PORTUGUESE) 91 | QU (QUECHUA) 92 | RM (RHAETO-ROMANCE) 93 | RN (KURUNDI) 94 | RO (ROMANIAN) 95 | RU (RUSSIAN) 96 | RW (KINYARWANDA) 97 | SA (SANSKRIT) 98 | SD (SINDHI) 99 | SG (SANGHO) 100 | SH (SERBO-CROATIAN) 101 | SI (SINGHALESE) 102 | SK (SLOVAK) 103 | SL (SLOVENIAN) 104 | SM (SAMOAN) 105 | SN (SHONA) 106 | SO (SOMALI) 107 | SQ (ALBANIAN) 108 | SR (SERBIAN) 109 | SS (SISWATI) 110 | ST (SESOTHO) 111 | SU (SUNDANESE) 112 | SV (SWEDISH) 113 | SW (SWAHILI) 114 | TA (TAMIL) 115 | TE (TELUGU) 116 | TG (TAJIK) 117 | TH (THAI) 118 | TI (TIGRINYA) 119 | TK (TURKMEN) 120 | TL (TAGALOG) 121 | TN (SETSWANA) 122 | TO (TONGA) 123 | TR (TURKISH) 124 | TS (TSONGA) 125 | TT (TATAR) 126 | TW (TWI) 127 | UK (UKRAINIAN) 128 | UR (URDU) 129 | UZ (UZBEK) 130 | VI (VIETNAMESE) 131 | VO (VOLAPUK) 132 | WO (WOLOF) 133 | XH (XHOSA) 134 | YO (YORUBA) 135 | ZH (CHINESE) 136 | ZU (ZULU) 137 | -------------------------------------------------------------------------------- /data/pixmaps/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/background.png -------------------------------------------------------------------------------- /data/pixmaps/backgrounds/biglens.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/backgrounds/biglens.png -------------------------------------------------------------------------------- /data/pixmaps/backgrounds/blackbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/backgrounds/blackbg.png -------------------------------------------------------------------------------- /data/pixmaps/backgrounds/default_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/backgrounds/default_bg.png -------------------------------------------------------------------------------- /data/pixmaps/backgrounds/dvdfilm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/backgrounds/dvdfilm.png -------------------------------------------------------------------------------- /data/pixmaps/base_ntsc.mpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/base_ntsc.mpg -------------------------------------------------------------------------------- /data/pixmaps/base_ntsc_wide.mpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/base_ntsc_wide.mpg -------------------------------------------------------------------------------- /data/pixmaps/base_pal.mpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/base_pal.mpg -------------------------------------------------------------------------------- /data/pixmaps/base_pal_wide.mpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/base_pal_wide.mpg -------------------------------------------------------------------------------- /data/pixmaps/devedeng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/devedeng.png -------------------------------------------------------------------------------- /data/pixmaps/icon_cvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_cvd.png -------------------------------------------------------------------------------- /data/pixmaps/icon_divx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_divx.png -------------------------------------------------------------------------------- /data/pixmaps/icon_dvd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_dvd.png -------------------------------------------------------------------------------- /data/pixmaps/icon_mkv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_mkv.png -------------------------------------------------------------------------------- /data/pixmaps/icon_svcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_svcd.png -------------------------------------------------------------------------------- /data/pixmaps/icon_vcd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/icon_vcd.png -------------------------------------------------------------------------------- /data/pixmaps/silence.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/silence.ogg -------------------------------------------------------------------------------- /data/pixmaps/to_classic_blackbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_classic_blackbars.png -------------------------------------------------------------------------------- /data/pixmaps/to_classic_cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_classic_cut.png -------------------------------------------------------------------------------- /data/pixmaps/to_classic_scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_classic_scale.png -------------------------------------------------------------------------------- /data/pixmaps/to_wide_blackbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_wide_blackbars.png -------------------------------------------------------------------------------- /data/pixmaps/to_wide_cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_wide_cut.png -------------------------------------------------------------------------------- /data/pixmaps/to_wide_scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/data/pixmaps/to_wide_scale.png -------------------------------------------------------------------------------- /doc/basic.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 |

Creating a disk: fast instructions

14 | 15 |

Before explaining all the options in Devede, here is the common sequence to create a disk.

16 | 17 |

First, you choose the disk type you want to create (DVD, VCD, sVCD, CVD or DivX). Then, you drag&drop 18 | the files you want in the main window, or add them with the Add file button.

19 | 20 |

If you want to add subtitles or fine-tune the properties of a file, you should use the Properties button.

21 | 22 |

Then you should click the Adjust disk usage button. This will automatically set the video bitrate for each 23 | file (which depends on the final size of the file, if it has one or more subtitles, if it's already a converted 24 | file...).

25 | 26 |

After that, use the Menu options button to ensure that you like the menu that Devede will create. If not, 27 | you can use the available options to change them. Remember that the menu will use the names of the files, unless you 28 | change them in the properties of each file.

29 | 30 |

Finally, just click the Forward button, choose a destination directory and a name, and enjoy a good 31 | coffee while Devede works.

32 | 33 |

When the ISO or BIN/CUE file has been created, you can just click the Burn button to dump it into a physical disc

34 | 35 |

Storing and restoring the disc structure

36 | 37 |

The options Load, Save and Save as in the File menu allow you to save 38 | the current disk structure, in case you want continue your work later or reuse it for another, 39 | slightly different, disk. Devede stores the disk format adding the extension .devedeng instead of the 40 | old .devede, because the internal format has changed.

41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /doc/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 |

Contacting the author

13 |

This program has been created by Sergio Costas (Raster Software Vigo).
14 | http://www.rastersoft.com
15 | e-mail: raster@rastersoft.com

16 | 17 |

Devede Forum

18 | 19 |

There is a forum where you can ask questions about Devede:

20 | 21 |

https://groups.google.com/forum/#!forum/devede-forum

22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /doc/converting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/converting.png -------------------------------------------------------------------------------- /doc/create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/create.png -------------------------------------------------------------------------------- /doc/devede.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #F0F0FF; 3 | width: 1280px; 4 | margin-left: auto; 5 | margin-right: auto; 6 | } 7 | 8 | p,li { 9 | font-size: 120%; 10 | } 11 | 12 | p.title { 13 | text-align: center; 14 | font-size: 200%; 15 | font-weight: bold; 16 | } 17 | 18 | p.subtitle { 19 | text-align: center; 20 | font-size: 150%; 21 | } 22 | 23 | p.section { 24 | text-align: left; 25 | font-size: 140%; 26 | font-weight: bold; 27 | } 28 | 29 | div.picture { 30 | text-align: center; 31 | width: 100%; 32 | } 33 | p.foot { 34 | text-align: center; 35 | font-size: 100%; 36 | font-weight: bold; 37 | } 38 | -------------------------------------------------------------------------------- /doc/disc_type_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/disc_type_window.png -------------------------------------------------------------------------------- /doc/disk.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 |

Creating the disk

13 | 14 |
15 | 16 |

After adding all the files you want and clicking in the Forward button, you will be prompted for a 17 | directory where Devede will create all the files, and a generic name for them. The directory must have 18 | enought free space to hold all the 19 | temporary files (aprox. the double of the final CD/DVD size if you delete temporary files, or the triple if you 20 | don't). The generic name will be used to name all 21 | the temporary files, so the MPEG files will be named as GENERICNAME_XX_YY.MPG, the DVD tree directory will 22 | be named GENERICNAME, the ISO image will be named GENERICNAME.ISO, and the BIN/CUE files will be 23 | GENERICNAME.BIN and GENERICNAME.CUE.

24 | 25 |

You can also activate the checkbutton labeled Shutdown computer when disc is done. As it says, it shuts down the computer when the job is finished, allowing you to 26 | leave your machine working at night. If there's an error, the computer won't be shut down.

27 | 28 |

Finally, the program will start to create the files. Remember that this is a very slow process, and can 29 | need more than two hours to be completed, depending on the files. You will see this window with all the process:

30 | 31 |
32 | 33 |

If there is an error during the creation process, you will see a window like this:

34 | 35 |
36 | 37 |

There you can expand the Debugging data element and you will have access to the debugging info. You can 38 | use the Copy button to copy all the text to the clipboard, and paste it into a mail, if needed.

39 | 40 |

Instead, if the disk image is created fine, you will see this window:

41 | 42 |
43 | 44 |

Here you can just click the Burn button and you will be able to burn the image in a DVD disc. Or you can 45 | just click OK and burn it later using a DVD burning program like Brasero or K3b.

46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /doc/done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/done.png -------------------------------------------------------------------------------- /doc/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/error.png -------------------------------------------------------------------------------- /doc/faq.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 |

FAQ

11 | 12 | 13 | 14 |

Generic

15 | 16 |
    17 | 18 |
  1. 19 | I installed Devede using the DEB package, but it doesn't work fine. I miss some features explained in 20 | the instructions. 21 |

    To install the DEB version you must remove first any version installed from a TAR.BZ2 package, or they will 22 | interfere. You can do it just running sudo ./uninstall.sh (from the TAR.BZ2 package) and then installing 23 | the DEB package.

  2. 24 | 25 |
  3. 26 | I created a PAL disc, and the final movie is played slightly faster, but older versions of Devede 27 | converts them at the right speed, but with a little jump each second. Why? 28 |

    This happens only when the original file has 24 frames per second (like classic films), and you create a 29 | PAL disc, which needs 25 frames per second. In older versions Devede converted the original 24 fps to 30 | 25 just by repeating one after 24. Unfortunately that produces a noticeable "jump" each second, because the 31 | picture, literally, stops during 1/25 of a second.

    32 |

    To avoid this, in this version Devede does the same that does a TV station: plays the movie at 25 fps instead 33 | of 24fps. That means that it's played about a 4% faster. That means that the pitch will be higher. Usually 34 | you won't be able to notice it, unless you compare the original and the new sound.

    35 |
  4. 36 | 37 |
  5. 38 | I added a VOB file and marked the option "This is already a DVD/xCD-suitable MPEG file", but Devede fails. 39 |

    The VOB files aren't fully suitable for DVDAuthor. In order to get the right file you can repackage it 40 | (without recompressing, so you will not loose quality) just marking the option Repack audio and video without reencoding.

    41 |
  6. 42 | 43 |
  7. Why can't I use a VFAT/FAT32 partition to create my DVDs? 44 |

    VFAT and FAT32 file systems doesn't understand uppercase/lowercase letters, and shows everything in 45 | lowercase. Unfortunately, the creation of a DVD tree is case sensitive.

    46 |
  8. 47 | 48 |
  9. 49 | I adjust the bitrate to use the 100%, but the final size is smaller. 50 |

    Unfortunately is impossible to accurately predict the disk's final size, because you specify a bitrate, but 51 | Mencoder can decide to use an smaller value in certain parts if it can compress it more without quality loss 52 | (like in very static scenes). That means that the final size can be smaller than the estimation made by Devede, 53 | but never bigger.

    54 |
  10. 55 | 56 |
  11. 57 | What about using VRC_MINRATE to ensure that the final size is mucho more acurate? 58 |

    I added that option in Devede 3.7; unfortunately the result was that, in a lot of cases, the final size was 59 | bigger than the predicted size, so I removed it in version 3.9.

    60 |
  12. 61 | 62 |
  13. 63 | When I add empty titles, the disk usage grows. Why? 64 |

    Each menu can hold up to 10 titles. If you create more titles Devede will need more menus, and 65 | each one needs some disk space.

    66 |
  14. 67 | 68 |
  15. 69 | What kind of disk is CVD? 70 |

    It stands for China Video Disk. It's an alternative format to SuperVCD, using a resolution of 352x480 (or 71 | 352x576 in PAL), which can result in better image quality in some players, because the widht and height are 72 | compatible with DVD standard (SuperVCD uses a width of 480 pixels, which can result in some picture artifacts 73 | in some players).

    74 |
  16. 75 | 76 |
  17. 77 | In some fast scenes the picture is jerky. I use bigger bitrates but it doesn't work. How can I fix it? 78 |

    Try to deinterlace your video. You can find the deinterlace options in the Properties window for 79 | that file, choosing the Quality tab.

    80 |
  18. 81 | 82 |
  19. 83 | Fine, but... what is the better deinterlacing filter? 84 |

    That's a good question. In guru-multimedia 85 | you can find a comparison. The YADIF in Devede is "yadif=0", without adding "mcdeint".

    86 |
  20. 87 | 88 |
  21. 89 | Why I can't add more than 61 files in a DVD? 90 |

    Because the DVD standard allows to put up to 128 commands in each menu. The current menu system needs two 91 | commands for each file, and six extra commands, which leaves only 61 files.

    92 |

    The limit for VCDs, sVCDs and CVDs is 99 files.

    93 |
  22. 94 | 95 |
96 | 97 |

Subtitles

98 | 99 |
    100 | 101 |
  1. I preview a video with subtitles and the text looks bad (text colors are inverted) 102 |

    Don't worry, it's a bug of MPlayer when showing DVD subtitles from a file instead of a true DVD. 103 | In the final disk they will look fine.

    104 |
  2. 105 | 106 |
  3. I preview a video with subtitles, but it doesn't show the subtitles... 107 |

    Some Mplayer/Mencoder versions seems to fail to show the subtitles when you watch an MPEG file from 108 | hard disk, but they are there. SVN versions seems to have this fixed.

  4. 109 | 110 |
  5. I dislike the font used to render the subtitles. How can I change it? 111 |

    Just choose a TrueType font you like and copy it in $HOME/.spumux directory, renaming it to 112 | devedesans.ttf.

    113 |
  6. 114 | 115 |
  7. I tried to create a DivX file with subtitles, but in the tab it says it's not possible. How can 116 | I add subtitles to a DivX? 117 |

    DivX format doesn't allow embedded subtitles, but nearly all software players (MPlayer, VLC...) and a 118 | lot of hardware players can render them on-demand if you put the file with the subtitles in the same 119 | directory than the movie, and rename the former with the same name than the later (this is, if your movie 120 | file is MYMOVIE.AVI and your subtitles are in .SRT format, just put the subtitles file in the same directory 121 | and rename it to MYMOVIE.SRT). The player should allow you to enable/disable them with the 122 | same button used for DVD subtitles.

    123 |
  8. 124 | 125 |
126 | 127 |

Menus

128 | 129 |
    130 | 131 |
  1. How can I add a menu to a VCD/SVCD/CVD? 132 |

    Currently you can't with Devede.

    133 |
  2. 134 | 135 |
  3. The menus created by Devede are simplistic. Will you add a menu editor to allow to create more 136 | complex menues? 137 |

    Probably not. My intention is to maintain Devede as an easy-to-use tool. If you want to create complex 138 | menues you have excellent tools like DVD Styler, 139 | Q DVD Author or 140 | PoliDori.

    141 |
  4. 142 | 143 |
144 | 145 |

Bugs

146 | 147 |
    148 | 149 |
  1. 150 | When I try to create a DVD, it fails at the very start. 151 |

    Try to change the audio codec used for the menus. Some AVconv and FFmpeg versions have trouble with that, so if you was using MP2, change to AC3, or vice-versa.

    152 |
  2. 153 | 154 |
  3. I created a DVD and my DVD player is unable to play it, but other players can. 155 |

    Go to Advanced options->Misc, and be sure that you have marked the option Use a GOP of 12 156 | frames.

    157 |
  4. 158 | 159 |
  5. I created a 5.1 DVD marking the Create DVD with 5.1 channel sound option, but the channels are 160 | out of order. 161 |

    If your source video file has AC3 audio, use the This file already has AC3 sound instead.

    162 |
  6. 163 | 164 |
  7. Devede still fails. How can I report a bug? 165 |

    You can ask everything you need in the Devede Forum, at http://groups.google.com/group/devede-forum/

    166 |

    If asked for a dump of Devede's output, just copy the text in the debugging data part of the error window.

    167 |
  8. 168 |
169 | 170 | 171 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /doc/file.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 | 14 |

Adding movie files to a title 15 | 16 |

To add a new file you have two options: first, you can drag and drop one or more files into the main 17 | window, so Devede will give them some fine default values; or you can choose the "Add" button, so you will see 18 | a file chooser that will allow you to add several files

19 | 20 |

Setting file properties

21 | 22 |

By clicking in the Properties button, you will get the properties window, which allows to set several 23 | properties in the specified movie:

24 | 25 |
26 | 27 |

First you choose the title that will be used in the menu. By default it is the file's name (without the extension), 28 | but you can change it to whatever you prefer. Also you can choose if you want this file to be displayed in the menu or not. 29 | In the later case, the user won't be able to manually select it, being displayed only if specified in a sequence (more on this later).

30 | 31 |

After that comes the properties zone, where you can see specific data about the video, like original size, bit rate, and so on.

32 | 33 |

In the bottom you have a Preview button, which allows you to check the quality of the output video whenever you want.

34 | 35 |

Now, there is a panel with several tabs that groups options. In the first tab, General, you can choose the format (PAL or 36 | NTSC). Maybe you ask why is here another PAL/NTSC option, when we already have chosen it in the main window. 37 | The answer is: because this way you can create hybrid DVDs, with some films in PAL/SECAM format and 38 | others in NTSC. What is the utility of this? Modern TV sets and DVD players can play both formats, 39 | so if you manually choose the one that fits better the original framerate of the file, you will have an 40 | smoother video. This is: if the original file has 25 fps, select PAL, and if it has 24 or 30 fps, select 41 | NTSC (the telecine option seems to work better with NTSC). Of course you can 42 | force one of them and Devede will adjust the framerate to 25 or 30 fps, ensuring that the DVD will have 43 | the rigth framerate and will play fine in all TV sets, but maybe the motion won't be not as smooth as it could 44 | be.

45 | 46 |

You can also set the audio and video bit rate. If you check the Automatic buttons, the bitrate will be calculated by Devede everytime you 47 | click the Adjust disk usage button in the main window. But if you uncheck them, you can manually choose an specific bitrate, and the Adjust disk usage button 48 | will honour them. Of course, you can have some files with automatic bitrate, and others with manual bitrate, in the same DVD.

49 | 50 |

You can also divide a file in blocks, to allow easy seeking. If you don't do this, you will be unable to jump inside a file (which is the nearest thing to fast forward that you 51 | have in a DVD player). You can divide it in homogeneus blocks with the upper option, or put the marks in specific points (like, in a concert, put them at the start of each song).

52 | 53 |

Finally, you can modify the volume. This is useful when you have several files with diferent audio levels.

54 | 55 |
56 | 57 |

In the Subtitles tab you can add text subtitles to the current file. You can set the color, size, and if they must be shown always, or only when the user enables them.

58 | 59 |
60 | 61 |

This is the window shown when you add a subtitle. Here you choose the file with the subtitles and its encoding (ussually UTF-8, but for some European languages, it could also be latinX).

62 | 63 |

You must choose the language too. This allows the DVD player to show the language code when you enable 64 | the subtitles, and also to add several subtitles, one for each language.

65 | 66 |

Finally, the option "Put subtitles upper" makes Devede to render the subtitles a little upper that normally. 67 | This is fine when you have a 16:9 film in 3:4 format (with black bars up and down) and want to use the ZOOM 68 | option in your TV without loosing the subtitles, or when your TV is old and misses too many lines in bottom and 69 | cuts the ordinary subtitles.

70 | 71 |

Have in mind that if you preview a video from Devede with subtitles, they will be shown in order to allow 72 | you to ensure that the sincronization is fine (needs MPlayer 1.0rc1 or later, and not always works :( ).

73 | 74 |
75 | 76 |

In the Video options you have several options. Here you can set the final resolution, rotate or mirror a video (useful for phone-recorded videos), set the output aspect ratio, 77 | and decide what to do when the original aspect ratio doesn't coincide with the final one. Here you can choose to add black bars (which keeps the relationship in the movie), scale the 78 | picture (which stretches them, like in the old cinemascope), or cut the picture (very useful when you have a video with black bars embedded).

79 | 80 |
81 | 82 |

The Quality tab allows to use double-pass conversion. This converts the file twice, the first one to take some metrics about bitrate usage, and the second one to 83 | really convert the file using the optimum bitrate in each part. Here you can also select if you want to apply a deinterlace filter (useful when converting some old TV programs).

84 | 85 |
86 | 87 |

In the Audio tab you can set a delay in the audio. This is useful when you have a movie with the audio delayed from the video. Also you can set the 5.1 option. If you enable it, you 88 | can also select the next option: This file already has AC3 sound. If you check them, Devede won't convert the audio, but will keep it as-is, allowing to preserve the 5.1 audio.

89 | 90 |
91 | 92 |

The Actions tab allows to choose what should the player do when this file ends. You can choose to just jump to the main menu (the default option), to jump to the next file, to the 93 | previous one, to the first one, to the last one, or to play this file again.

94 | 95 |
96 | 97 |

Finally, the Misc tab allows to specify that this file is already an MPEG1/2 file, ready to be inserted in a DVD directly, without conversion. Also allows to specify that this file 98 | is encoded with the right codecs, but not the container, so Devede will just repack them in a new container without recompressing them. These options allows to keep the maximum quality and 99 | speeds up the creation time, because those videos doesn't have to be converted.

100 | 101 |

Setting properties for several files at once

102 | 103 |

It is possible to set some properties in one single step for several files. To do so, choose the option Set multiproperties in the Edit option of the top menu. There you will 104 | see this window:

105 | 106 |
107 | 108 |

In the top list you should select the movies whose properties you want to set, and keep unselected the ones you don't want to modify. Then change what you need like in the previous case, 109 | and click Aply to set those changes. Until you click it, no change will be made.

110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /doc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 |

Current version: 4

11 |

What is it?

12 |

DeVeDe is a program that allows you to create a video DVD from an MPEG, AVI, MOV... video file, 13 | suitable for home DVD players. DeVeDe can use FFmpeg or AVconv to convert files, 14 | so you can use any video playable with Linux.

15 |

16 |

DISCLAIMER

17 |

This software is distributed as is, under the GPL license (version 3 or later), and 18 | without warranty of any kind. Use it at your own risk. Press here to read the 19 | GPLv3 license.

20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /doc/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | DeVeDe, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 |

The main interface

14 | 15 |

After choosing the kind of disk you want, you will see the main interface:

16 | 17 |

Main interface for DVD discs

18 | 19 |

A DVD is divided in Files. Each file is a film on its own, and, 20 | when played, you have to choose the one you want to see from the menu. Clicking on the buttons below the list of files 21 | you can add or delete them, change its position in the menu, or modify the properties of each one. It is also 22 | possible to set the properties of several files by using the option Set multiproperties, which is available in the Edit option, 23 | in the top menu.

24 | 25 |

Main window properties

26 | 27 |

In the DVD window screenshot we can see that there are two files. By default, after playing a file the DVD player 28 | will return to the DVD menu (this can be changed).

29 | 30 |

The Disk usage bar shows the percentage of the disk currently used. You can occupy more than the 31 | 100% because it's based in an estimation, so the final size can (and probably will) be lower than the 32 | espected, but never higher (see the FAQ for details). You can choose the CD/DVD size too. 33 | Have in mind another thing: a 700MB CD can contain 80 minutes of compressed audio/video, which, at 1152 kbps are 34 | about 800MB. This means that, when the media is a CD, you MUST use the bar to know how many disc space you are 35 | using, and not the estimated size of the files, because you can put up to 800MB of compressed video in a 700MB 36 | CD, or about 720MB in a 650MB CD.

37 | 38 |

Near the bar is the Adjust disk usage button. Clicking on it will adjust the video rate in each video 39 | in order to use the 100% of the disk. To do so, Devede takes in account the final resolution and the length, 40 | giving more bits per second to the videos with a higher resolution, but always in a proportional way. Remember 41 | that you should always click again the Adjust disk usage button after changing the final resolution, 42 | adding or removing subtitles, adding or removing titles, or, in general, before creating your disk, 43 | in order to assign a good video bit rate to each film. Also remember that changing the soundtrack used in the menus 44 | will change the disk usage too.

45 | 46 |

It is important to note that is very probable that the final size will be smaller than the estimated. This is 47 | because, usually, the codec can compress a lot of scenes with less than the specified bitrate but keeping the quality.

48 | 49 |

The Default format sets the format used by default in your disk. It's used to create the menus 50 | and each time you add a video file. But, as we will see in a moment, you can use a different format in some 51 | videos if you want, having PAL and NTSC videos mixed in the same disk.

52 | 53 |

In the Menus part you have, first, the create a menú with the titles chooser. By enabling this, the 54 | disc will have a DVD menu, allowing the user to select which file to watch. It also has the Menu options button, 55 | which allows you to see how will be the DVD menus and modify them, changing their properties (background picture, text 56 | colors, title...). This will be 57 | explained with more detail in the section Creating the DVD menu. 58 | 59 |

Finally, the button Forward starts the creation process itself, after the disc have been fully defined.

60 | 61 |

In the top you have the main menu, with several options. In the File part you can load and save your project, or start 62 | a fresh one. Keep in mind that the format used in 4.x versions is different than the one used in versions up to 3.x, so you can't 63 | open an old project with newer versions.

64 | 65 |

Also in the menu is the Edit option. Inside it you have two options. The first one is the Set multiproperties options, 66 | and the second one shows the Preferences window, which 67 | allows you to choose global options for all projects, like which backend use for each part, or how many cores use to compress video.

68 | 69 |

Up: help index

70 |

Next: preferences window

71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /doc/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/main.png -------------------------------------------------------------------------------- /doc/menu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 |

Menu options

14 | 15 |

Devede allows to add a menu to the video DVDs. This menu will allow to jump to each title. Here you can see 16 | the menu configuration window in a project with two files:

17 | 18 |
19 | 20 |

The first block allows you to add a title to your menu. This title will be shown at the upper part of the menu. 21 | You can choose the font type, size and color, add a shadow under it with the color 22 | you want, and change the place where it will be put.

23 | 24 |

When choosing a color you can set the transparency level by clicking the plus button in the Custom zone inside the color picker. If this value is 25 | set to 0, that color will be fully transparent, so the element with that color will be invisible. If this value 26 | is 255, that color will be fully opaque. With other values the element will be semitransparent, allowing to 27 | "see through" it. An example: if you don't want Devede to add the black background rectangles under each title, 28 | just set its opacity to 0, rendering it invisible.

29 | 30 |

The second block allows you to change the background picture. This way you can create a custom menu 31 | for your DVD. You can use all picture formats supported by Gnome. Clicking the Set default background will 32 | set again the default picture used by Devede: a white background with a DVD disk.

33 | 34 |

The third block allows to choose a sound file to use as soundtrack for the menu. By default the menus use 35 | a file with 38 seconds of pure silence, but you can change it, having this way menus with music. Again, the 36 | Set menus without sound button will restore the original silence file. Here you can also choose between MP2 and AC3 37 | audio codec for the menu.

38 | 39 |

The next block allows you to choose the alignment. You can put the list of titles left, center or right aligned, and also 40 | define some margins which will never be trespased (if there are too many files, the menu will be divided in several pages). 41 | The value is set as percentage, so a value of 10 in the top margin will mean "10% from the 42 | top of the screen".

43 | 44 |

The next block allows you to change the font style and size, and the colors used to render the inactive 45 | text, the active text, the text background color and the shadow color. Again you can use transparency, in order to 46 | remove the elements you don't want.

47 | 48 |

The button size will be automatically adapted to the font size.

49 | 50 |

The next block allows to decide if you want the menu to be shown when you put the disk in the 51 | player, or only when you press the Menu button in the remote. In the later case, when the disk is inserted 52 | it starts to play the first title.

53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /doc/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/menu.png -------------------------------------------------------------------------------- /doc/movie1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie1.png -------------------------------------------------------------------------------- /doc/movie1b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie1b.png -------------------------------------------------------------------------------- /doc/movie2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie2.png -------------------------------------------------------------------------------- /doc/movie2b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie2b.png -------------------------------------------------------------------------------- /doc/movie3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie3.png -------------------------------------------------------------------------------- /doc/movie4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie4.png -------------------------------------------------------------------------------- /doc/movie5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie5.png -------------------------------------------------------------------------------- /doc/movie6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie6.png -------------------------------------------------------------------------------- /doc/movie7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/movie7.png -------------------------------------------------------------------------------- /doc/preferences.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 |

The preferences window

14 | 15 |

Clicking in edit->preferences will show the preferences window:

16 | 17 |
<

Preferences window

18 | 19 |

Here is possible to set several options.

20 | 21 |

The first one, Multicore CPU, allows to set how many cores will be used to, simultaneously, convert movies. More cores, faster conversion, but your computer will have less spare time for you.

22 | 23 |

The next one is the Temporary files folser, which allows to choose where will Devede store temporary files.

24 | 25 |

Now you have several options for the backends. Here you can choose which backend use for each task, allowing you to choose between FFmpeg or AVconv, Brasero or K3b, and so on.

26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /doc/preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/doc/preferences.png -------------------------------------------------------------------------------- /doc/select.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Devede, a video DVD creator 7 | 8 | 9 |

Devede, a video DVD creator

10 | 11 | 12 | 13 |

The selection window

14 | 15 |
16 | 17 |

When you launch Devede, it will show you this window, asking what kind of disk you want to create. 18 | You can choose between:

19 | 20 |

21 |

    22 |
  • Video DVD: a classic video DVD, like the ones you rent in your videoclub or buy in your video shop.
  • 23 |
  • VideoCD: a CD with CBR MPEG-1 video at a resolution of 352x240 pixels (352x288 with PAL), a fixed bitrate 24 | of 1152 kbits/second for video and 224 kbits/second for audio. The quality is comparable to analog VHS, 25 | and a CD can contain as much compressed audio/video than uncompressed audio (this is, a 80-minutes CD 26 | can contain about 80 minutes of compressed video/audio). Is compatible with all DVD players, but video 27 | quality is medium-bad.
  • 28 |
  • Super VideoCD: a CD with VBR MPEG-2 video at a resolution of 480x480 pixels (480x576 with PAL) and 29 | video bitrates between 500 and 2600 kbits/second. The quality is comparable to LaserDisc, and a 80-minutes CD 30 | can contain about 60 minutes con compressed video/audio (more if you reduce the bitrate, but with less 31 | quality). Is compatible with a lot of DVD players, but maybe there is one very cheap which doesn't support it. 32 | Video quality is good.
  • 33 |
  • CVD (China Video Disk): identical to Super VideoCD, but with a resolution of 352x480 pixels (352x576 34 | with PAL). Offers less artifacts with same bitrate, but image is a bit less sharper than Super VideoCD. Is 35 | compatible with a lot of DVD players, but maybe there is one very cheap which doesn't support it.
  • 36 |
  • DIVX/MPEG4: creates DIVX files, ready to be played in DIVX-compliant players.
  • 37 |
  • Matroska/H.264: creates matroska files with the H.264 codec, useful for HD content.
  • 38 |
39 |

40 |

Of course you aren't limited to theses options, since you can choose, if you want, another resolution 41 | for your CD/DVD. This allows you to create Super VideoCDs with a resolution of 352x240 (or 352x288 for PAL), 42 | which is a very good compromise if you want to store a lot of video in a single CD. I don't recomend to use 43 | other resolutions with VideoCDs, because CBR MPEG-1 is very limited. Choose the Super VideoCD or CVD option 44 | (which uses VBR MPEG-2) and use there the resolution you want.

45 | 46 |

In the upper picture, the VideoCD, SuperVideoCD and China Video Disc are disabled. This is because the system 47 | lacks some program needed to do it. To know which ones you need but haven't installed, just click the Programs 48 | needed by Devede button.

49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /po/POTFILES.in: -------------------------------------------------------------------------------- 1 | src/devedeng/about.py 2 | src/devedeng/add_files.py 3 | src/devedeng/ask.py 4 | src/devedeng/ask_subtitles.py 5 | src/devedeng/avbase.py 6 | src/devedeng/avconv.py 7 | src/devedeng/avprobe.py 8 | src/devedeng/brasero.py 9 | src/devedeng/choose_disc_type.py 10 | src/devedeng/configuration_data.py 11 | src/devedeng/converter.py 12 | src/devedeng/create_disk_window.py 13 | src/devedeng/dvdauthor_converter.py 14 | src/devedeng/dvd_menu.py 15 | src/devedeng/end_job.py 16 | src/devedeng/error.py 17 | src/devedeng/executor.py 18 | src/devedeng/ffmpeg.py 19 | src/devedeng/ffprobe.py 20 | src/devedeng/file_copy.py 21 | src/devedeng/file_movie.py 22 | src/devedeng/genisoimage.py 23 | src/devedeng/help.py 24 | src/devedeng/__init__.py 25 | src/devedeng/interface_manager.py 26 | src/devedeng/k3b.py 27 | src/devedeng/message.py 28 | src/devedeng/mkisofs.py 29 | src/devedeng/mplayer.py 30 | src/devedeng/mpv.py 31 | src/devedeng/mux_dvd_menu.py 32 | src/devedeng/opensave.py 33 | src/devedeng/preview.py 34 | src/devedeng/project.py 35 | src/devedeng/runner.py 36 | src/devedeng/settings.py 37 | src/devedeng/shutdown.py 38 | src/devedeng/subtitles_mux.py 39 | src/devedeng/title.py 40 | src/devedeng/vcdimager_converter.py 41 | src/devedeng/vlc.py 42 | [type: gettext/glade]data/interface/wabout.ui 43 | [type: gettext/glade]data/interface/wadd_files.ui 44 | [type: gettext/glade]data/interface/wask_subtitles.ui 45 | [type: gettext/glade]data/interface/wask.ui 46 | [type: gettext/glade]data/interface/wcreate.ui 47 | [type: gettext/glade]data/interface/wdone.ui 48 | [type: gettext/glade]data/interface/werror.ui 49 | [type: gettext/glade]data/interface/wfile_properties.ui 50 | [type: gettext/glade]data/interface/wmain.ui 51 | [type: gettext/glade]data/interface/wmenu.ui 52 | [type: gettext/glade]data/interface/wmessage.ui 53 | [type: gettext/glade]data/interface/wneeded.ui 54 | [type: gettext/glade]data/interface/wopen_project.ui 55 | [type: gettext/glade]data/interface/wpreview.ui 56 | [type: gettext/glade]data/interface/wprogress.ui 57 | [type: gettext/glade]data/interface/wsave_project.ui 58 | [type: gettext/glade]data/interface/wselect_disk.ui 59 | [type: gettext/glade]data/interface/wsettings.ui 60 | [type: gettext/glade]data/interface/wtitle_properties.ui 61 | -------------------------------------------------------------------------------- /po/nb_NO.po: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rastersoft/devedeng/a348dc49d395d5ab5fa9986460d56e7167bb8893/po/nb_NO.po -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [bdist_rpm] 2 | release: 1 3 | requires: python3 python3-urllib3 python3-gobject gtk3 dvdauthor vcdimager python3-setuptools python3-cairo 4 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import sys 5 | from glob import glob 6 | from distutils.core import setup 7 | 8 | try: 9 | from distutils import dep_util 10 | except: 11 | pass 12 | 13 | 14 | def get_data_files(): 15 | data_files = [ 16 | (os.path.join('share', 'applications'), ['data/devede_ng.py.desktop']), 17 | (os.path.join('share', 'pixmaps'), ['data/devedeng.svg']), 18 | (os.path.join('share', 'icons', 'hicolor', 19 | 'scalable', 'apps'), ['data/devedeng_icon.svg']), 20 | (os.path.join('share', 'devedeng'), glob("data/interface/*")), 21 | (os.path.join('share', 'devedeng'), glob('data/pixmaps/*g')), 22 | (os.path.join('share', 'devedeng'), ['data/devedeng.svg']), 23 | (os.path.join('share', 'devedeng'), ['data/devedeng_icon.svg']), 24 | (os.path.join('share', 'devedeng'), ['data/codepages.lst']), 25 | (os.path.join('share', 'devedeng'), ['data/languages.lst']), 26 | (os.path.join('share', 'devedeng', 'backgrounds'), 27 | glob('data/pixmaps/backgrounds/*')), 28 | (os.path.join('share', 'doc', 'devedeng', 'html'), glob('doc/*')), 29 | (os.path.join('share', 'man', 'man1'), ['data/devede.1.gz']) 30 | ] 31 | 32 | for lang_name in [f for f in os.listdir('locale')]: 33 | mofile = os.path.join('locale', lang_name, 34 | 'LC_MESSAGES', 'devedeng.mo') 35 | # translations must be always in /usr/share because Gtk.builder only 36 | # search there. If someone knows how to fix this... 37 | # share/locale/fr/LC_MESSAGES/ 38 | target = os.path.join('/usr', 'share', 'locale', 39 | lang_name, 'LC_MESSAGES') 40 | data_files.append((target, [mofile])) 41 | 42 | return data_files 43 | 44 | 45 | def compile_translations(): 46 | 47 | if (os.system("msgfmt -V > /dev/null") != 0): 48 | print('You need the binary "msgfmt" (from "gettext") to compile the translations. Aborting') 49 | sys.exit(-1) 50 | 51 | try: 52 | for pofile in [f for f in os.listdir('po') if f.endswith('.po')]: 53 | pofile = os.path.join('po', pofile) 54 | 55 | lang = os.path.basename(pofile)[:-3] # len('.po') == 3 56 | # e.g. locale/fr/LC_MESSAGES/ 57 | modir = os.path.join('locale', lang, 'LC_MESSAGES') 58 | # e.g. locale/fr/LC_MESSAGES/devedeng.mo 59 | mofile = os.path.join(modir, 'devedeng.mo') 60 | 61 | # create an architecture for these locales 62 | if not os.path.isdir(modir): 63 | os.makedirs(modir) 64 | 65 | if not os.path.isfile(mofile) or dep_util.newer(pofile, mofile): 66 | # msgfmt.make(pofile, mofile) 67 | os.system("msgfmt \"" + pofile + "\" -o \"" + mofile + "\"") 68 | except: 69 | pass 70 | 71 | 72 | compile_translations() 73 | try: 74 | if os.path.isfile('data/devede.1'): 75 | os.system("gzip -c data/devede.1 > data/devede.1.gz") 76 | except: 77 | pass 78 | 79 | #here = os.path.abspath(os.path.dirname(__file__)) 80 | 81 | setup( 82 | name='devedeng', 83 | 84 | version='4.11.0', 85 | 86 | description='A video DVD creator', 87 | long_description="A program that allows to create video DVDs", 88 | 89 | url='http://www.rastersoft.com', 90 | 91 | author='Raster Software Vigo (Sergio Costas)', 92 | author_email='raster@rastersoft.com', 93 | 94 | license='GPLv3', 95 | 96 | # See https://pypi.python.org/pypi?%3Aaction=list_classifiers 97 | classifiers=[ 98 | # How mature is this project? Common values are 99 | # 1 - Planning 100 | # 2 - Pre-Alpha 101 | # 3 - Alpha 102 | # 4 - Beta 103 | # 5 - Production/Stable 104 | 'Development Status :: 5 - Production/Stable', 105 | 'Environment :: X11 Applications :: GTK', 106 | 'Intended Audience :: End Users/Desktop', 107 | 'Topic :: Multimedia :: Video :: Conversion', 108 | 'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', 109 | 'Operating System :: POSIX :: Linux', 110 | 'Programming Language :: Python :: 3', 111 | 'Topic :: Multimedia :: Video :: Conversion' 112 | ], 113 | 114 | keywords='dvd video', 115 | 116 | packages=['devedeng'], 117 | 118 | package_dir={"devedeng": "src/devedeng"}, 119 | 120 | #package_data={'devede': ['data/*.ui']}, 121 | 122 | # Although 'package_data' is the preferred approach, in some case you may 123 | # need to place data files outside of your packages. 124 | # see http://docs.python.org/3.4/distutils/setupscript.html#installing-additional-files 125 | # In this case, 'data_file' will be installed into '/my_data' 126 | #data_files=[('share/devedeng/ui', ['ui/test.ui'])], 127 | data_files=get_data_files(), 128 | scripts=['src/devede_ng.py', 'src/copy_files_verbose.py'], 129 | ) 130 | 131 | if (len(sys.argv) == 2) and (sys.argv[1] == "install"): 132 | os.system("gtk-update-icon-cache") 133 | -------------------------------------------------------------------------------- /src/copy_files_verbose.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import sys 21 | import os 22 | 23 | if len(sys.argv) != 3: 24 | print("Usage: copy_files_verbose input_file output_file") 25 | sys.exit(-1) 26 | 27 | filesize = os.path.getsize(sys.argv[1]) 28 | done = 0.0 29 | f1 = open(sys.argv[1], "rb") 30 | f2 = open(sys.argv[2], "wb") 31 | 32 | while (done < filesize): 33 | data = f1.read(65536) 34 | f2.write(data) 35 | done += len(data) 36 | print("Copied %.1f%%" % (100.0 * float(done) / float(filesize))) 37 | -------------------------------------------------------------------------------- /src/devede_ng.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import gi 21 | gi.require_version('Gtk', '3.0') 22 | import sys 23 | import gettext 24 | import locale 25 | from gi.repository import Gtk 26 | 27 | import devedeng.project 28 | import devedeng.configuration_data 29 | import devedeng.choose_disc_type 30 | 31 | config_data = devedeng.configuration_data.configuration.get_config() 32 | 33 | if config_data is None: 34 | print("Can't locate extra files. Aborting.") 35 | sys.exit(1) 36 | 37 | gettext.bindtextdomain(config_data.gettext_domain, config_data.share_locale) 38 | try: 39 | locale.setlocale(locale.LC_ALL, "") 40 | except locale.Error: 41 | pass 42 | gettext.textdomain(config_data.gettext_domain) 43 | gettext.install(config_data.gettext_domain, localedir=config_data.share_locale) 44 | 45 | _ = gettext.gettext 46 | 47 | Gtk.init(sys.argv) 48 | 49 | mwindow = devedeng.project.devede_project() 50 | ask_type = devedeng.choose_disc_type.choose_disc_type() 51 | 52 | Gtk.main() 53 | config_data.save_config() 54 | -------------------------------------------------------------------------------- /src/devedeng/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see . 19 | -------------------------------------------------------------------------------- /src/devedeng/about.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class about_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | builder = Gtk.Builder() 30 | builder.set_translation_domain(self.config.gettext_domain) 31 | 32 | builder.add_from_file(os.path.join(self.config.glade, "wabout.ui")) 33 | builder.connect_signals(self) 34 | w_window = builder.get_object("about_devedeng") 35 | w_window.set_version(self.config.version) 36 | 37 | w_window.show_all() 38 | w_window.run() 39 | w_window.destroy() 40 | -------------------------------------------------------------------------------- /src/devedeng/add_files.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class add_files: 24 | 25 | last_path = None 26 | 27 | def __init__(self): 28 | 29 | self.config = devedeng.configuration_data.configuration.get_config() 30 | 31 | def run(self): 32 | 33 | builder = Gtk.Builder() 34 | builder.set_translation_domain(self.config.gettext_domain) 35 | 36 | builder.add_from_file(os.path.join(self.config.glade, "wadd_files.ui")) 37 | builder.connect_signals(self) 38 | wadd_files = builder.get_object("add_files") 39 | self.wfile_chooser = builder.get_object("filechooserwidget1") 40 | if (add_files.last_path is not None): 41 | self.wfile_chooser.set_current_folder(add_files.last_path) 42 | self.wbutton_accept = builder.get_object("button_accept") 43 | 44 | file_filter_videos = Gtk.FileFilter() 45 | file_filter_videos.set_name(_("Video files")) 46 | file_filter_videos.add_mime_type("video/*") 47 | file_filter_videos.add_pattern("*.rmvb") 48 | 49 | file_filter_all = Gtk.FileFilter() 50 | file_filter_all.set_name(_("All files")) 51 | file_filter_all.add_pattern("*") 52 | 53 | self.wfile_chooser.add_filter(file_filter_videos) 54 | self.wfile_chooser.add_filter(file_filter_all) 55 | 56 | wadd_files.show_all() 57 | 58 | retval = wadd_files.run() 59 | self.files = None 60 | 61 | if (retval == 2): 62 | self.files = self.get_files() 63 | 64 | add_files.last_path = self.wfile_chooser.get_current_folder() 65 | wadd_files.destroy() 66 | 67 | if (retval == 2): 68 | return True 69 | else: 70 | return False 71 | 72 | def get_files(self): 73 | files = self.wfile_chooser.get_filenames() 74 | files_out = [] 75 | for element in files: 76 | if (os.path.isdir(element)): 77 | continue 78 | files_out.append(element) 79 | return files_out 80 | 81 | def on_filechooserwidget1_selection_changed(self, b): 82 | 83 | files = self.get_files() 84 | if (len(files) == 0): 85 | self.wbutton_accept.set_sensitive(False) 86 | else: 87 | self.wbutton_accept.set_sensitive(True) 88 | -------------------------------------------------------------------------------- /src/devedeng/ask.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class ask_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | def run(self, text, title): 30 | 31 | builder = Gtk.Builder() 32 | builder.set_translation_domain(self.config.gettext_domain) 33 | 34 | builder.add_from_file(os.path.join(self.config.glade, "wask.ui")) 35 | builder.connect_signals(self) 36 | wask_window = builder.get_object("dialog_ask") 37 | wask_window.set_title(title) 38 | wask_text = builder.get_object("label_ask") 39 | wask_text.set_markup(text) 40 | 41 | wask_window.show_all() 42 | retval = wask_window.run() 43 | wask_window.destroy() 44 | if (retval == 1): 45 | return True 46 | else: 47 | return False 48 | -------------------------------------------------------------------------------- /src/devedeng/ask_subtitles.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | import devedeng.add_files 22 | 23 | 24 | class ask_subtitles: 25 | 26 | def __init__(self): 27 | 28 | self.config = devedeng.configuration_data.configuration.get_config() 29 | 30 | def run(self): 31 | 32 | builder = Gtk.Builder() 33 | builder.set_translation_domain(self.config.gettext_domain) 34 | 35 | builder.add_from_file(os.path.join( 36 | self.config.glade, "wask_subtitles.ui")) 37 | builder.connect_signals(self) 38 | wask_window = builder.get_object("ask_subtitles") 39 | self.wfilename = builder.get_object("subtitle_file") 40 | self.waccept = builder.get_object("accept") 41 | wlist_encodings = builder.get_object("list_encodings") 42 | wlist_languages = builder.get_object("list_languages") 43 | wencoding = builder.get_object("encoding_l") 44 | wlanguage = builder.get_object("language_l") 45 | 46 | if (devedeng.add_files.add_files.last_path is not None): 47 | self.wfilename.set_current_folder( 48 | devedeng.add_files.add_files.last_path) 49 | 50 | lang_selection = 0 51 | enc_selection = 0 52 | 53 | self.language = None 54 | self.encoding = None 55 | self.put_upper = False 56 | self.filename = None 57 | 58 | counter = 0 59 | encodings = open(os.path.join(self.config.other_path, "codepages.lst")) 60 | for element in encodings: 61 | element = element.strip() 62 | if (element == self.config.sub_codepage): 63 | enc_selection = counter 64 | wlist_encodings.append([element]) 65 | counter += 1 66 | encodings.close() 67 | 68 | counter = 0 69 | languages = open(os.path.join(self.config.other_path, "languages.lst")) 70 | for element in languages: 71 | element = element.strip() 72 | if (element == self.config.sub_language): 73 | lang_selection = counter 74 | wlist_languages.append([element]) 75 | counter += 1 76 | languages.close() 77 | 78 | wencoding.set_active(enc_selection) 79 | wlanguage.set_active(lang_selection) 80 | 81 | file_filter_subt = Gtk.FileFilter() 82 | file_filter_subt.set_name(_("Subtitle files")) 83 | 84 | file_filter_subt.add_pattern("*.sub") 85 | file_filter_subt.add_pattern("*.srt") 86 | file_filter_subt.add_pattern("*.ssa") 87 | file_filter_subt.add_pattern("*.smi") 88 | file_filter_subt.add_pattern("*.rt") 89 | file_filter_subt.add_pattern("*.txt") 90 | file_filter_subt.add_pattern("*.aqt") 91 | 92 | file_filter_all = Gtk.FileFilter() 93 | file_filter_all.set_name(_("All files")) 94 | file_filter_all.add_pattern("*") 95 | 96 | self.wfilename.add_filter(file_filter_subt) 97 | self.wfilename.add_filter(file_filter_all) 98 | 99 | wask_window.show_all() 100 | self.on_subtitle_file_set(None) 101 | retval = wask_window.run() 102 | if (retval == 2): # accept 103 | self.put_upper = builder.get_object( 104 | "put_subtitles_upper").get_active() 105 | self.config.sub_codepage = wencoding.get_active_id() 106 | self.config.sub_language = wlanguage.get_active_id() 107 | self.encoding = wencoding.get_active_id() 108 | self.language = wlanguage.get_active_id()[:2] 109 | self.filename = self.wfilename.get_filename() 110 | 111 | wask_window.destroy() 112 | if (retval == 2): 113 | return True 114 | else: 115 | return False 116 | 117 | def on_subtitle_file_set(self, b): 118 | 119 | f = self.wfilename.get_filename() 120 | if (f is None) or (f == ""): 121 | self.waccept.set_sensitive(False) 122 | else: 123 | self.waccept.set_sensitive(True) 124 | -------------------------------------------------------------------------------- /src/devedeng/avbase.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import devedeng.executor 21 | import subprocess 22 | 23 | 24 | class avbase(devedeng.executor.executor): 25 | 26 | def check_version(self, cmd): 27 | 28 | try: 29 | handle = subprocess.Popen( 30 | cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 31 | (stdout, stderr) = handle.communicate() 32 | if 0 != handle.wait(): 33 | return False 34 | except: 35 | return False 36 | self.check_version_txt(stdout) 37 | 38 | def check_version_txt(self, vtext): 39 | 40 | self.major_version = 0 41 | self.minor_version = 0 42 | 43 | for line in vtext: 44 | if not isinstance(line, str): 45 | continue 46 | if (line.startswith("avconv version")): 47 | pos1 = line.find('.', 15) 48 | pos2 = line.find('-', 15) 49 | if (pos2 == -1): 50 | return False 51 | try: 52 | if (pos1 == -1): 53 | major = int(line[15:pos2].strip()) 54 | minor = 0 55 | else: 56 | major = int(line[15:pos1].strip()) 57 | minor = int(line[pos1 + 1:pos2].strip()) 58 | except: 59 | return False 60 | self.major_version = major 61 | self.minor_version = minor 62 | return True 63 | return False 64 | -------------------------------------------------------------------------------- /src/devedeng/avprobe.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import subprocess 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | import os 24 | import json 25 | 26 | 27 | class avprobe(devedeng.avbase.avbase): 28 | 29 | supports_analize = True 30 | supports_play = False 31 | supports_convert = False 32 | supports_menu = False 33 | supports_mkiso = False 34 | supports_burn = False 35 | display_name = "AVPROBE" 36 | 37 | @staticmethod 38 | def check_is_installed(): 39 | try: 40 | handle = subprocess.Popen( 41 | ["avprobe", "-h"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 42 | (stdout, stderr) = handle.communicate() 43 | if 0 == handle.wait(): 44 | return True 45 | else: 46 | return False 47 | except: 48 | return False 49 | 50 | def __init__(self): 51 | 52 | devedeng.executor.executor.__init__(self) 53 | self.config = devedeng.configuration_data.configuration.get_config() 54 | 55 | def process_stdout(self, data): 56 | return 57 | 58 | def process_stderr(self, data): 59 | return 60 | 61 | def get_film_data(self, file_name): 62 | """ processes a file, refered by the FILE_MOVIE movie object, and fills its 63 | main data (resolution, FPS, length...) """ 64 | 65 | self.original_file_size = os.path.getsize(file_name) 66 | 67 | command_line = ["avprobe", file_name, "-of", 68 | "json", "-show_streams", "-loglevel", "quiet"] 69 | 70 | (stdout, stderr) = self.launch_process(command_line, False) 71 | 72 | try: 73 | stdout2 = stdout.decode("utf-8") 74 | except: 75 | stdout2 = stdout.decode("latin1") 76 | self.config.append_static_log("AVProbe JSON data: " + str(stdout2)) 77 | return self.process_json(stdout2, file_name) 78 | 79 | def process_json(self, stdout2, file_name): 80 | 81 | self.audio_list = [] 82 | self.audio_streams = 0 83 | self.video_list = [] 84 | self.video_streams = 0 85 | self.original_width = 0 86 | self.original_height = 0 87 | self.original_length = -1 88 | self.original_videorate = 0 89 | self.original_audiorate = 0 90 | self.original_audiorate_uncompressed = 0 91 | self.original_fps = 0 92 | self.original_aspect_ratio = 0 93 | 94 | self.config.append_static_log( 95 | "Getting data for {:s} with avprobe".format(file_name)) 96 | try: 97 | video_data = json.loads(stdout2) 98 | except: 99 | return True # There was an error reading the JSON data 100 | 101 | if not("streams" in video_data): 102 | return True # There are no streams!!!!! 103 | 104 | for element in video_data["streams"]: 105 | 106 | if (self.original_length == -1) and ("duration" in element): 107 | try: 108 | self.original_length = int(float(element["duration"])) 109 | except: 110 | self.original_length = -1 111 | 112 | if (element["codec_type"] == "video"): 113 | self.video_streams += 1 114 | self.video_list.append(element["index"]) 115 | if (self.video_streams == 1): 116 | self.original_width = int(float(element["width"])) 117 | self.original_height = int(float(element["height"])) 118 | if ("bit_rate" in element): 119 | self.original_videorate = int( 120 | float(element["bit_rate"])) / 1000 121 | self.original_fps = self.get_division( 122 | element["avg_frame_rate"]) 123 | if ("display_aspect_ratio" in element): 124 | self.original_aspect_ratio = self.get_division( 125 | element["display_aspect_ratio"]) 126 | 127 | elif (element["codec_type"] == "audio"): 128 | self.audio_streams += 1 129 | self.audio_list.append(element["index"]) 130 | if (self.audio_streams == 1): 131 | if ("bit_rate" in element): 132 | self.original_audiorate = int( 133 | float(element["bit_rate"])) / 1000 134 | self.original_audiorate_uncompressed = int( 135 | float(element["sample_rate"])) 136 | 137 | self.original_size = str(self.original_width) + \ 138 | "x" + str(self.original_height) 139 | if (self.original_aspect_ratio is None) or (self.original_aspect_ratio <= 1.0): 140 | if (self.original_height != 0): 141 | self.original_aspect_ratio = ( 142 | float(self.original_width)) / (float(self.original_height)) 143 | 144 | if (self.original_aspect_ratio is not None): 145 | self.original_aspect_ratio = ( 146 | float(int(self.original_aspect_ratio * 1000.0))) / 1000.0 147 | 148 | if (len(self.video_list) == 0): 149 | return True # the file is not a video file; maybe an audio-only file or another thing 150 | 151 | if self.original_length == -1: # if it was unable to detect the duration, try to use the human readable format 152 | command_line = ["avprobe", file_name] 153 | (stdout, stderr) = self.launch_process(command_line, False) 154 | try: 155 | stdout2 = stdout.decode("utf-8") + \ 156 | "\n" + stderr.decode("utf-8") 157 | except: 158 | stdout2 = stdout.decode("latin1") + \ 159 | "\n" + stderr.decode("latin1") 160 | self.config.append_static_log( 161 | "Using avprobe human readable format: " + str(stdout2)) 162 | for line in stdout2.split("\n"): 163 | line = line.strip() 164 | if line.startswith("Duration: "): 165 | self.original_length = self.get_time(line[10:]) 166 | break 167 | 168 | self.config.append_static_log("Estimated length: {:d}; Resolution: {:s}".format( 169 | self.original_length, self.original_size)) 170 | return False # no error 171 | -------------------------------------------------------------------------------- /src/devedeng/brasero.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | import subprocess 19 | import devedeng.configuration_data 20 | import devedeng.executor 21 | 22 | 23 | class brasero(devedeng.executor.executor): 24 | 25 | supports_analize = False 26 | supports_play = False 27 | supports_convert = False 28 | supports_menu = False 29 | supports_mkiso = False 30 | supports_burn = True 31 | display_name = "BRASERO" 32 | 33 | @staticmethod 34 | def check_is_installed(): 35 | try: 36 | handle = subprocess.Popen( 37 | ["brasero", "-h"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 38 | (stdout, stderr) = handle.communicate() 39 | if 0 == handle.wait(): 40 | return True 41 | else: 42 | return False 43 | except: 44 | return False 45 | 46 | def __init__(self): 47 | 48 | devedeng.executor.executor.__init__(self) 49 | self.config = devedeng.configuration_data.configuration.get_config() 50 | 51 | def burn(self, file_name): 52 | 53 | self.command_var = ["brasero", file_name] 54 | 55 | def process_stdout(self, data): 56 | return 57 | 58 | def process_stderr(self, data): 59 | return 60 | -------------------------------------------------------------------------------- /src/devedeng/create_disk_window.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class create_disk_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | def run(self): 30 | 31 | builder = Gtk.Builder() 32 | builder.set_translation_domain(self.config.gettext_domain) 33 | 34 | builder.add_from_file(os.path.join(self.config.glade, "wcreate.ui")) 35 | builder.connect_signals(self) 36 | wcreate_window = builder.get_object("dialog_create") 37 | self.wpath = builder.get_object("path") 38 | self.wname = builder.get_object("name") 39 | wshutdown = builder.get_object("shutdown") 40 | self.waccept = builder.get_object("accept") 41 | 42 | self.wname.set_text("movie") 43 | self.wpath.set_current_folder(self.config.final_folder) 44 | 45 | wcreate_window.show_all() 46 | self.on_iface_changed(None) 47 | retval = wcreate_window.run() 48 | self.name = self.wname.get_text() 49 | self.path = os.path.join(self.wpath.get_filename(), self.name) 50 | self.shutdown = wshutdown.get_active() 51 | 52 | if (retval == 1): 53 | self.config.final_folder = self.wpath.get_filename() 54 | self.config.save_config() 55 | 56 | wcreate_window.destroy() 57 | if (retval == 1): 58 | return True 59 | else: 60 | return False 61 | 62 | def on_iface_changed(self, b): 63 | 64 | path = self.wpath.get_filename() 65 | name = self.wname.get_text() 66 | 67 | if ((path is None) or (path == "") or (name is None) or (name == "")): 68 | self.waccept.set_sensitive(False) 69 | else: 70 | self.waccept.set_sensitive(True) 71 | -------------------------------------------------------------------------------- /src/devedeng/end_job.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk, Gdk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class end_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | def run(self, time_used, do_burn): 30 | 31 | builder = Gtk.Builder() 32 | builder.set_translation_domain(self.config.gettext_domain) 33 | 34 | builder.add_from_file(os.path.join(self.config.glade, "wdone.ui")) 35 | builder.connect_signals(self) 36 | werror_window = builder.get_object("done") 37 | wburn = builder.get_object("button_burn") 38 | wdebug_buffer = builder.get_object("debug_buffer") 39 | wdebug_buffer.insert_at_cursor(self.config.get_log()) 40 | wtime = builder.get_object("label_time") 41 | hours = int(time_used / 3600) 42 | minutes = int((time_used / 60) % 60) 43 | seconds = int(time_used % 60) 44 | time_used_str = "" 45 | if hours < 10: 46 | time_used_str += "0" 47 | time_used_str += str(hours) + ":" 48 | if minutes < 10: 49 | time_used_str += "0" 50 | time_used_str += str(minutes) + ":" 51 | if seconds < 10: 52 | time_used_str += "0" 53 | time_used_str += str(seconds) 54 | wtime.set_text(time_used_str) 55 | 56 | werror_window.show_all() 57 | 58 | if do_burn: 59 | wburn.show() 60 | else: 61 | wburn.hide() 62 | 63 | retval = werror_window.run() 64 | werror_window.destroy() 65 | if retval == 1: 66 | return True # burn disc image 67 | else: 68 | return False 69 | 70 | def on_copy_clicked(self, b): 71 | 72 | clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) 73 | data = self.config.get_log() 74 | clipboard.set_text(data, len(data)) 75 | return 76 | -------------------------------------------------------------------------------- /src/devedeng/error.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk, Gdk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class error_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | builder = Gtk.Builder() 30 | builder.set_translation_domain(self.config.gettext_domain) 31 | 32 | builder.add_from_file(os.path.join(self.config.glade, "werror.ui")) 33 | builder.connect_signals(self) 34 | werror_window = builder.get_object("dialog_error") 35 | wdebug_buffer = builder.get_object("debug_buffer") 36 | wdebug_buffer.insert_at_cursor(self.config.get_log()) 37 | 38 | werror_window.show_all() 39 | werror_window.run() 40 | werror_window.destroy() 41 | 42 | def on_copy_clicked(self, b): 43 | 44 | clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) 45 | data = self.config.get_log() 46 | clipboard.set_text(data, len(data)) 47 | return 48 | -------------------------------------------------------------------------------- /src/devedeng/ffprobe.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import subprocess 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | import os 24 | import json 25 | 26 | 27 | class ffprobe(devedeng.executor.executor): 28 | 29 | supports_analize = True 30 | supports_play = False 31 | supports_convert = False 32 | supports_menu = False 33 | supports_mkiso = False 34 | supports_burn = False 35 | display_name = "FFPROBE" 36 | 37 | @staticmethod 38 | def check_is_installed(): 39 | try: 40 | handle = subprocess.Popen( 41 | ["ffprobe", "-h"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 42 | (stdout, stderr) = handle.communicate() 43 | if 0 == handle.wait(): 44 | return True 45 | else: 46 | return False 47 | except: 48 | return False 49 | 50 | def __init__(self): 51 | 52 | devedeng.executor.executor.__init__(self) 53 | self.config = devedeng.configuration_data.configuration.get_config() 54 | 55 | def process_stdout(self, data): 56 | return 57 | 58 | def process_stderr(self, data): 59 | return 60 | 61 | def get_film_data(self, file_name): 62 | """ processes a file, refered by the FILE_MOVIE movie object, and fills its 63 | main data (resolution, FPS, length...) """ 64 | 65 | self.original_file_size = os.path.getsize(file_name) 66 | 67 | command_line = ["ffprobe", file_name, "-of", 68 | "json", "-show_streams", "-loglevel", "quiet"] 69 | 70 | (stdout, stderr) = self.launch_process(command_line, False) 71 | try: 72 | stdout2 = stdout.decode("utf-8") 73 | except: 74 | stdout2 = stdout.decode("latin1") 75 | self.config.append_static_log("FFProbe JSON data: " + str(stdout2)) 76 | return self.process_json(file_name, stdout2) 77 | 78 | def process_json(self, file_name, stdout2): 79 | 80 | self.audio_list = [] 81 | self.audio_streams = 0 82 | self.video_list = [] 83 | self.video_streams = 0 84 | self.original_width = 0 85 | self.original_height = 0 86 | self.original_length = -1 87 | self.original_videorate = 0 88 | self.original_audiorate = 0 89 | self.original_audiorate_uncompressed = 0 90 | self.original_fps = 0 91 | self.original_aspect_ratio = 0 92 | 93 | self.config.append_static_log( 94 | "Getting data for {:s} with ffprobe".format(file_name)) 95 | try: 96 | video_data = json.loads(stdout2) 97 | except: 98 | return True # There was an error reading the JSON data 99 | 100 | if not("streams" in video_data): 101 | return True # There are no streams!!!!! 102 | 103 | for element in video_data["streams"]: 104 | 105 | if (self.original_length == -1) and ("duration" in element): 106 | try: 107 | self.original_length = int(float(element["duration"])) 108 | except: 109 | self.original_length = -1 110 | 111 | if (element["codec_type"] == "video"): 112 | self.video_streams += 1 113 | self.video_list.append(element["index"]) 114 | if (self.video_streams == 1): 115 | self.original_width = int(float(element["width"])) 116 | self.original_height = int(float(element["height"])) 117 | if ("bit_rate" in element): 118 | self.original_videorate = int( 119 | float(element["bit_rate"])) / 1000 120 | self.original_fps = self.get_division( 121 | element["avg_frame_rate"]) 122 | if ("display_aspect_ratio" in element): 123 | self.original_aspect_ratio = self.get_division( 124 | element["display_aspect_ratio"]) 125 | 126 | elif (element["codec_type"] == "audio"): 127 | self.audio_streams += 1 128 | self.audio_list.append(element["index"]) 129 | if (self.audio_streams == 1): 130 | if ("bit_rate" in element): 131 | self.original_audiorate = int( 132 | float(element["bit_rate"])) / 1000 133 | self.original_audiorate_uncompressed = int( 134 | float(element["sample_rate"])) 135 | 136 | self.original_size = str(self.original_width) + \ 137 | "x" + str(self.original_height) 138 | if (self.original_aspect_ratio is None) or (self.original_aspect_ratio <= 1.0): 139 | if (self.original_height != 0): 140 | self.original_aspect_ratio = ( 141 | float(self.original_width)) / (float(self.original_height)) 142 | 143 | if (self.original_aspect_ratio is not None): 144 | self.original_aspect_ratio = ( 145 | float(int(self.original_aspect_ratio * 1000.0))) / 1000.0 146 | 147 | if (len(self.video_list) == 0): 148 | return True # the file is not a video file; maybe an audio-only file or another thing 149 | 150 | if self.original_length == -1: # if it was unable to detect the duration, try to use the human readable format 151 | command_line = ["ffprobe", file_name] 152 | (stdout, stderr) = self.launch_process(command_line, False) 153 | try: 154 | stdout2 = stdout.decode("utf-8") + \ 155 | "\n" + stderr.decode("utf-8") 156 | except: 157 | stdout2 = stdout.decode("latin1") + \ 158 | "\n" + stderr.decode("latin1") 159 | self.config.append_static_log( 160 | "Using ffprobe human readable format: " + str(stdout2)) 161 | for line in stdout2.split("\n"): 162 | line = line.strip() 163 | if line.startswith("Duration: "): 164 | self.original_length = self.get_time(line[10:]) 165 | break 166 | 167 | self.config.append_static_log("Estimated length: {:d}; Resolution: {:s}".format( 168 | self.original_length, self.original_size)) 169 | return False # no error 170 | -------------------------------------------------------------------------------- /src/devedeng/file_copy.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | 24 | 25 | class file_copy(devedeng.executor.executor): 26 | 27 | def __init__(self, input_path, output_path): 28 | 29 | devedeng.executor.executor.__init__(self) 30 | self.config = devedeng.configuration_data.configuration.get_config() 31 | 32 | self.text = _("Copying file %(X)s") % { 33 | "X": os.path.basename(input_path)} 34 | 35 | self.command_var = [] 36 | self.command_var.append("copy_files_verbose.py") 37 | self.command_var.append(input_path) 38 | self.command_var.append(output_path) 39 | 40 | def process_stdout(self, data): 41 | 42 | if (data is None) or (len(data) == 0): 43 | return 44 | if (data[0].startswith("Copied ")): 45 | pos = data[0].find("%") 46 | if (pos == -1): 47 | return 48 | p = float(data[0][7:pos]) 49 | self.progress_bar[1].set_fraction(p / 100.0) 50 | self.progress_bar[1].set_text("%.1f%%" % (p)) 51 | return 52 | 53 | def process_stderr(self, data): 54 | 55 | return 56 | -------------------------------------------------------------------------------- /src/devedeng/genisoimage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import devedeng.configuration_data 22 | import subprocess 23 | import devedeng.executor 24 | 25 | 26 | class genisoimage(devedeng.executor.executor): 27 | 28 | supports_analize = False 29 | supports_play = False 30 | supports_convert = False 31 | supports_menu = False 32 | supports_mkiso = True 33 | supports_burn = False 34 | display_name = "GENISOIMAGE" 35 | 36 | @staticmethod 37 | def check_is_installed(): 38 | try: 39 | handle = subprocess.Popen( 40 | ["genisoimage", "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 41 | (stdout, stderr) = handle.communicate() 42 | if 0 == handle.wait(): 43 | return True 44 | else: 45 | return False 46 | except: 47 | return False 48 | 49 | def __init__(self): 50 | 51 | devedeng.executor.executor.__init__(self) 52 | self.config = devedeng.configuration_data.configuration.get_config() 53 | 54 | def create_iso(self, path, name): 55 | 56 | filesystem_path = os.path.join(path, "dvd_tree") 57 | final_path = os.path.join(path, name + ".iso") 58 | 59 | self.command_var = [] 60 | self.command_var.append("genisoimage") 61 | self.command_var.append("-dvd-video") 62 | self.command_var.append("-V") 63 | self.command_var.append("DVDVIDEO") 64 | self.command_var.append("-v") 65 | self.command_var.append("-udf") 66 | self.command_var.append("-o") 67 | self.command_var.append(final_path) 68 | self.command_var.append(filesystem_path) 69 | self.text = _("Creating ISO image") 70 | 71 | def process_stdout(self, data): 72 | return 73 | 74 | def process_stderr(self, data): 75 | 76 | if (data[0].find("% done") == -1): 77 | return 78 | 79 | l = data[0].split("%") 80 | l0a = l[0] 81 | l0b = l0a.replace(",", ".") 82 | p = float(l0b) 83 | self.progress_bar[1].set_fraction(p / 100.0) 84 | self.progress_bar[1].set_text("%.1f%%" % (p)) 85 | 86 | return 87 | -------------------------------------------------------------------------------- /src/devedeng/help.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | from gi.repository import Gtk, Gdk 4 | import devedeng.configuration_data 5 | import os 6 | 7 | 8 | class help: 9 | 10 | def __init__(self, help_page): 11 | 12 | self.config = devedeng.configuration_data.configuration.get_config() 13 | 14 | file = "file://" + \ 15 | os.path.join(self.config.help_path, "html", help_page) 16 | 17 | retval = Gtk.show_uri(None, file, Gdk.CURRENT_TIME) 18 | if retval == False: 19 | msg = devede_dialogs.show_error( 20 | gladefile, _("Can't open the help files.")) 21 | -------------------------------------------------------------------------------- /src/devedeng/k3b.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | import subprocess 19 | import devedeng.configuration_data 20 | import devedeng.executor 21 | 22 | 23 | class k3b(devedeng.executor.executor): 24 | 25 | supports_analize = False 26 | supports_play = False 27 | supports_convert = False 28 | supports_menu = False 29 | supports_mkiso = False 30 | supports_burn = True 31 | display_name = "K3B" 32 | 33 | @staticmethod 34 | def check_is_installed(): 35 | try: 36 | handle = subprocess.Popen( 37 | ["k3b", "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 38 | (stdout, stderr) = handle.communicate() 39 | if 0 == handle.wait(): 40 | return True 41 | else: 42 | return False 43 | except: 44 | return False 45 | 46 | def __init__(self): 47 | 48 | devedeng.executor.executor.__init__(self) 49 | self.config = devedeng.configuration_data.configuration.get_config() 50 | 51 | def burn(self, file_name): 52 | 53 | self.command_var = ["k3b", file_name] 54 | 55 | def process_stdout(self, data): 56 | return 57 | 58 | def process_stderr(self, data): 59 | return 60 | -------------------------------------------------------------------------------- /src/devedeng/message.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class message_window: 24 | 25 | def __init__(self, text, title, list_data=None): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | builder = Gtk.Builder() 30 | builder.set_translation_domain(self.config.gettext_domain) 31 | 32 | builder.add_from_file(os.path.join(self.config.glade, "wmessage.ui")) 33 | builder.connect_signals(self) 34 | wmessage_window = builder.get_object("dialog_message") 35 | wmessage_window.set_title(title) 36 | wmessage_text = builder.get_object("label_message") 37 | wmessage_text.set_markup(text) 38 | wmessage_list = builder.get_object("list_message") 39 | wmessage_liststore = builder.get_object("liststore_elements") 40 | wmessage_window.show_all() 41 | 42 | if (list_data is None): 43 | wmessage_list.hide() 44 | else: 45 | for element in list_data: 46 | wmessage_liststore.append([element]) 47 | 48 | wmessage_window.run() 49 | wmessage_window.destroy() 50 | -------------------------------------------------------------------------------- /src/devedeng/mkisofs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import devedeng.configuration_data 22 | import subprocess 23 | import devedeng.executor 24 | 25 | 26 | class mkisofs(devedeng.executor.executor): 27 | 28 | supports_analize = False 29 | supports_play = False 30 | supports_convert = False 31 | supports_menu = False 32 | supports_mkiso = True 33 | supports_burn = False 34 | display_name = "MKISOFS" 35 | 36 | @staticmethod 37 | def check_is_installed(): 38 | try: 39 | handle = subprocess.Popen( 40 | ["mkisofs", "--help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 41 | (stdout, stderr) = handle.communicate() 42 | if 0 == handle.wait(): 43 | return True 44 | else: 45 | return False 46 | except: 47 | return False 48 | 49 | def __init__(self): 50 | 51 | devedeng.executor.executor.__init__(self) 52 | self.config = devedeng.configuration_data.configuration.get_config() 53 | 54 | def create_iso(self, path, name): 55 | 56 | filesystem_path = os.path.join(path, "dvd_tree") 57 | final_path = os.path.join(path, name + ".iso") 58 | 59 | self.command_var = [] 60 | self.command_var.append("mkisofs") 61 | self.command_var.append("-dvd-video") 62 | self.command_var.append("-V") 63 | self.command_var.append("DVDVIDEO") 64 | self.command_var.append("-v") 65 | self.command_var.append("-udf") 66 | self.command_var.append("-o") 67 | self.command_var.append(final_path) 68 | self.command_var.append(filesystem_path) 69 | self.text = _("Creating ISO image") 70 | 71 | def process_stdout(self, data): 72 | return 73 | 74 | def process_stderr(self, data): 75 | 76 | if (data[0].find("% done") == -1): 77 | return 78 | 79 | l = data[0].split("%") 80 | l0a = l[0] 81 | l0b = l0a.replace(",", ".") 82 | p = float(l0b) 83 | self.progress_bar[1].set_fraction(p / 100.0) 84 | self.progress_bar[1].set_text("%.1f%%" % (p)) 85 | 86 | return 87 | -------------------------------------------------------------------------------- /src/devedeng/mplayer.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import subprocess 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | import os 24 | 25 | 26 | class mplayer(devedeng.executor.executor): 27 | 28 | supports_analize = False 29 | supports_play = True 30 | supports_convert = False 31 | supports_menu = False 32 | supports_mkiso = False 33 | supports_burn = False 34 | display_name = "MPLAYER" 35 | 36 | @staticmethod 37 | def check_is_installed(): 38 | try: 39 | handle = subprocess.Popen( 40 | ["mplayer", "-v"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 41 | (stdout, stderr) = handle.communicate() 42 | if 0 == handle.wait(): 43 | return True 44 | else: 45 | return False 46 | except: 47 | return False 48 | 49 | def __init__(self): 50 | 51 | devedeng.executor.executor.__init__(self) 52 | self.config = devedeng.configuration_data.configuration.get_config() 53 | 54 | def play_film(self, file_name): 55 | 56 | command_line = ["mplayer", file_name] 57 | self.launch_process(command_line) 58 | 59 | def process_stdout(self, data): 60 | return 61 | 62 | def process_stderr(self, data): 63 | return 64 | -------------------------------------------------------------------------------- /src/devedeng/mpv.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import subprocess 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | 24 | 25 | class mpv(devedeng.executor.executor): 26 | 27 | supports_analize = False 28 | supports_play = True 29 | supports_convert = False 30 | supports_menu = False 31 | supports_mkiso = False 32 | supports_burn = False 33 | display_name = "MPV" 34 | 35 | @staticmethod 36 | def check_is_installed(): 37 | try: 38 | handle = subprocess.Popen( 39 | ["mpv", "-v"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 40 | (stdout, stderr) = handle.communicate() 41 | if 0 == handle.wait(): 42 | return True 43 | else: 44 | return False 45 | except: 46 | return False 47 | 48 | def __init__(self): 49 | 50 | devedeng.executor.executor.__init__(self) 51 | self.config = devedeng.configuration_data.configuration.get_config() 52 | 53 | def play_film(self, file_name): 54 | 55 | command_line = ["mpv", file_name] 56 | self.launch_process(command_line) 57 | 58 | def process_stdout(self, data): 59 | return 60 | 61 | def process_stderr(self, data): 62 | return 63 | -------------------------------------------------------------------------------- /src/devedeng/mux_dvd_menu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | 24 | 25 | class mux_dvd_menu(devedeng.executor.executor): 26 | 27 | def __init__(self): 28 | 29 | devedeng.executor.executor.__init__(self) 30 | self.config = devedeng.configuration_data.configuration.get_config() 31 | 32 | def create_mpg(self, n_page, output_path, movie_path): 33 | 34 | self.n_page = n_page 35 | self.text = _("Mixing menu %(X)d") % {"X": self.n_page} 36 | 37 | final_path = os.path.join(output_path, "menu_" + str(n_page) + "B.mpg") 38 | 39 | self.command_var = [] 40 | self.command_var.append("spumux") 41 | self.command_var.append(os.path.join(output_path, "menu_" + str(n_page) + ".xml")) 42 | self.stdin_file = movie_path 43 | self.stdout_file = final_path 44 | 45 | return final_path 46 | 47 | def process_stderr(self, data): 48 | 49 | return 50 | -------------------------------------------------------------------------------- /src/devedeng/opensave.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class opensave_window: 24 | 25 | def __init__(self, save): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | self.save = save 29 | 30 | def run(self, current_file=None): 31 | 32 | builder = Gtk.Builder() 33 | builder.set_translation_domain(self.config.gettext_domain) 34 | 35 | if self.save: 36 | builder.add_from_file(os.path.join( 37 | self.config.glade, "wsave_project.ui")) 38 | else: 39 | builder.add_from_file(os.path.join( 40 | self.config.glade, "wopen_project.ui")) 41 | builder.connect_signals(self) 42 | w_window = builder.get_object("data_project") 43 | if current_file is not None: 44 | w_window.set_filename(current_file) 45 | 46 | file_filter_projects = Gtk.FileFilter() 47 | file_filter_projects.set_name(_("DevedeNG projects")) 48 | file_filter_projects.add_pattern("*.devedeng") 49 | 50 | file_filter_all = Gtk.FileFilter() 51 | file_filter_all.set_name(_("All files")) 52 | file_filter_all.add_pattern("*") 53 | 54 | w_window.add_filter(file_filter_projects) 55 | w_window.add_filter(file_filter_all) 56 | 57 | w_window.show_all() 58 | retval = w_window.run() 59 | self.final_filename = w_window.get_filename() 60 | w_window.destroy() 61 | if (retval == 1): 62 | return self.final_filename 63 | else: 64 | return None 65 | -------------------------------------------------------------------------------- /src/devedeng/preview.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | 22 | 23 | class preview_window: 24 | 25 | def __init__(self): 26 | 27 | self.config = devedeng.configuration_data.configuration.get_config() 28 | 29 | def run(self): 30 | 31 | builder = Gtk.Builder() 32 | builder.set_translation_domain(self.config.gettext_domain) 33 | 34 | builder.add_from_file(os.path.join(self.config.glade, "wpreview.ui")) 35 | builder.connect_signals(self) 36 | wpreview_window = builder.get_object("dialog_preview") 37 | wlength = builder.get_object("length") 38 | 39 | wpreview_window.show_all() 40 | wlength.set_value(60.0) 41 | retval = wpreview_window.run() 42 | self.lvalue = int(wlength.get_value()) 43 | wpreview_window.destroy() 44 | if (retval == 1): 45 | return True 46 | else: 47 | return False 48 | -------------------------------------------------------------------------------- /src/devedeng/runner.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk, GObject 19 | import os 20 | import devedeng.configuration_data 21 | import devedeng.error 22 | import devedeng.ask 23 | 24 | 25 | class runner(GObject.GObject): 26 | 27 | __gsignals__ = {'done': (GObject.SIGNAL_RUN_FIRST, None, (int,))} 28 | 29 | def __init__(self, show_window=True): 30 | 31 | GObject.GObject.__init__(self) 32 | 33 | self.config = devedeng.configuration_data.configuration.get_config() 34 | 35 | if (self.config.multicore > 0): 36 | if self.config.cores < self.config.multicore: 37 | self.cores = self.config.cores 38 | else: 39 | self.cores = self.config.multicore 40 | else: 41 | self.cores = self.config.cores - self.config.multicore 42 | if (self.cores <= 0): 43 | self.cores = 1 44 | 45 | self.proc_list = [] 46 | self.running = 0 47 | 48 | self.builder = Gtk.Builder() 49 | self.builder.set_translation_domain(self.config.gettext_domain) 50 | 51 | self.builder.add_from_file(os.path.join( 52 | self.config.glade, "wprogress.ui")) 53 | self.builder.connect_signals(self) 54 | self.wprogress = self.builder.get_object("progress") 55 | if show_window: 56 | self.wprogress.show_all() 57 | self.wtotal = self.builder.get_object("progress_total") 58 | 59 | progress_frame = self.builder.get_object("progress_frame") 60 | box = Gtk.Box(Gtk.Orientation.VERTICAL, 0) 61 | progress_frame.add(box) 62 | box.show() 63 | self.progress_bars = [] 64 | self.used_progress_bars = [] 65 | for c in range(0, self.cores): 66 | f = Gtk.Frame() 67 | p = Gtk.ProgressBar() 68 | p.set_orientation(Gtk.Orientation.HORIZONTAL) 69 | p.set_show_text(True) 70 | f.add(p) 71 | # A frame, a progress bar, and the process running in that bar 72 | self.progress_bars.append([f, p, None]) 73 | box.pack_start(f, True, True, 0) 74 | box.set_orientation(Gtk.Orientation.VERTICAL) 75 | self.total_processes = 0 76 | self.error = False 77 | 78 | def add_process(self, process): 79 | 80 | if (self.proc_list.count(process) == 0): 81 | self.proc_list.append(process) 82 | 83 | for p in process.childs: 84 | self.add_process(p) 85 | 86 | self.total_processes = len(self.proc_list) 87 | 88 | def on_cancel_clicked(self, b): 89 | 90 | ask_w = devedeng.ask.ask_window() 91 | retval = ask_w.run(_("Cancel the current job?"), 92 | _("Cancel the current job?")) 93 | if retval: 94 | self.error = True 95 | for element in self.proc_list: 96 | element.cancel() 97 | self.wprogress.destroy() 98 | self.emit("done", 1) # there was an error 99 | return 100 | 101 | def run(self, clear_log=True): 102 | 103 | if clear_log: 104 | self.config.clear_log() 105 | 106 | for element in self.proc_list: 107 | # each element has three items: 108 | # * the process object 109 | # * the list of dependencies, or None if there are no more dependencies 110 | # * the progress bar being used by this process 111 | if (element.dependencies is None) and (element.progress_bar is None): 112 | element.connect("ended", self.process_ended) 113 | element.run(self.progress_bars[0]) 114 | element.progress_bar = self.progress_bars[0] 115 | self.used_progress_bars.append(self.progress_bars[0]) 116 | if (len(self.progress_bars) > 1): 117 | self.progress_bars = self.progress_bars[1:] 118 | else: 119 | self.progress_bars = [] 120 | break 121 | self.wtotal.set_text( 122 | str(self.total_processes - len(self.proc_list)) + "/" + str(self.total_processes)) 123 | self.wtotal.set_fraction( 124 | (float(self.total_processes - len(self.proc_list))) / (float(self.total_processes))) 125 | 126 | def process_ended(self, process, retval): 127 | 128 | if self.error: 129 | return 130 | 131 | if retval != 0: 132 | self.error = True 133 | for element in self.proc_list: 134 | element.cancel() 135 | self.wprogress.destroy() 136 | devedeng.error.error_window() 137 | self.emit("done", 1) # there was an error 138 | return 139 | 140 | # move the progress bar used by this process to the list of available 141 | # progress bars 142 | tmp = [] 143 | for e in self.used_progress_bars: 144 | if (process.progress_bar == e): 145 | self.progress_bars.append(e) 146 | e[0].hide() 147 | else: 148 | tmp.append(e) 149 | self.used_progress_bars = tmp 150 | 151 | # remove this process from the list of processes, and remove it from 152 | # the dependencies in other processes 153 | tmp = [] 154 | for e in self.proc_list: 155 | if (e != process): 156 | tmp.append(e) 157 | e.remove_dependency(process) 158 | self.proc_list = tmp 159 | 160 | # launch a new process 161 | if (len(self.proc_list) != 0): 162 | self.run(False) 163 | else: 164 | self.wprogress.destroy() 165 | self.emit("done", 0) # no error 166 | -------------------------------------------------------------------------------- /src/devedeng/settings.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk 19 | import os 20 | import devedeng.configuration_data 21 | import devedeng.interface_manager 22 | import gettext 23 | import devedeng.converter 24 | 25 | 26 | class settings_window(devedeng.interface_manager.interface_manager): 27 | 28 | def __init__(self, parent): 29 | 30 | devedeng.interface_manager.interface_manager.__init__(self) 31 | self.config = devedeng.configuration_data.configuration.get_config() 32 | 33 | if (self.config.multicore > 0): 34 | if self.config.cores < self.config.multicore: 35 | cores = self.config.cores 36 | else: 37 | cores = self.config.multicore 38 | else: 39 | if self.config.cores <= -self.config.multicore: 40 | cores = -self.config.cores + 1 41 | else: 42 | cores = self.config.multicore 43 | 44 | self.core_elements = {} 45 | list_core_elements = [] 46 | default_value = _("Use all cores") 47 | counter = 1 48 | for c in range(self.config.cores - 1, -self.config.cores, -1): 49 | if c > 0: 50 | translated_string = gettext.ngettext( 51 | "Use %(X)d core", "Use %(X)d cores", c) % {"X": c} 52 | value = c 53 | if c == cores: 54 | default_value = translated_string 55 | counter += 1 56 | elif c < 0: 57 | translated_string = gettext.ngettext( 58 | "Use all except %(X)d core", "Use all except %(X)d cores", -c) % {"X": -c} 59 | value = c 60 | if c == cores: 61 | default_value = translated_string 62 | counter += 1 63 | else: 64 | translated_string = _("Use all cores") 65 | value = c 66 | 67 | self.core_elements[translated_string] = value 68 | list_core_elements.append(translated_string) 69 | 70 | self.add_combobox("multicore", list_core_elements, default_value) 71 | self.add_filebutton("tempo_path", self.config.tmp_folder) 72 | 73 | c = devedeng.converter.converter.get_converter() 74 | (analizers, players, menuers, converters, 75 | burners, mkiso) = c.get_available_programs() 76 | 77 | self.add_combobox("analizer", analizers, self.config.film_analizer) 78 | self.add_combobox("player", players, self.config.film_player) 79 | self.add_combobox("converter", converters, 80 | self.config.film_converter, self.set_data_converter) 81 | self.add_combobox("menuer", menuers, self.config.menu_converter) 82 | self.add_combobox("mkiso", mkiso, self.config.mkiso) 83 | self.add_combobox("burner", burners, self.config.burner) 84 | 85 | self.builder = Gtk.Builder() 86 | self.builder.set_translation_domain(self.config.gettext_domain) 87 | 88 | self.builder.add_from_file(os.path.join( 89 | self.config.glade, "wsettings.ui")) 90 | self.builder.connect_signals(self) 91 | wsettings_window = self.builder.get_object("settings") 92 | self.wconverter = self.builder.get_object("converter") 93 | self.wtypes = self.builder.get_object("disc_types_supported") 94 | 95 | wsettings_window.set_transient_for(parent) 96 | 97 | wsettings_window.show_all() 98 | self.update_ui(self.builder) 99 | self.set_data_converter(None) 100 | 101 | retval = wsettings_window.run() 102 | self.store_ui(self.builder) 103 | wsettings_window.destroy() 104 | 105 | if retval == 1: 106 | self.config.multicore = self.core_elements[self.multicore] 107 | self.config.tmp_folder = self.tempo_path 108 | self.config.film_analizer = self.analizer 109 | self.config.film_player = self.player 110 | self.config.film_converter = self.converter 111 | self.config.menu_converter = self.menuer 112 | self.config.burner = self.burner 113 | self.config.mkiso = self.mkiso 114 | self.config.save_config() 115 | 116 | def set_data_converter(self, b): 117 | 118 | self.store_ui(self.builder) 119 | cv = devedeng.converter.converter.get_converter() 120 | cv2 = cv.get_disc_converter_by_name(self.converter) 121 | data = "" 122 | for t in cv2.disc_types: 123 | if data != "": 124 | data += ", " 125 | data += t 126 | if data != "": 127 | self.wtypes.set_text(data) 128 | else: 129 | self.wtypes.set_text(_("No discs supported")) 130 | -------------------------------------------------------------------------------- /src/devedeng/shutdown.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gio, GLib 19 | 20 | 21 | class shutdown: 22 | 23 | def __init__(self): 24 | 25 | # First, try with logind 26 | try: 27 | bus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None) 28 | bus.call_sync("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", 29 | "PowerOff", GLib.Variant_boolean('(bb)', (False, False)), None, Gio.DBusCallFlags.NONE, -1, None) 30 | except: 31 | failure = True 32 | 33 | if (failure): 34 | failure = False 35 | 36 | # If it fails, try with ConsoleKit 37 | try: 38 | bus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None) 39 | bus.call_sync("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", 40 | "Stop", None, None, Gio.DBusCallFlags.NONE, -1, None) 41 | except: 42 | failure = True 43 | 44 | if (failure): 45 | failure = False 46 | 47 | # If it fails, try with HAL 48 | try: 49 | bus = Gio.bus_get_sync(Gio.BusType.SYSTEM, None) 50 | bus.call_sync("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", "org.freedesktop.Hal.Device.SystemPowerManagement", 51 | "Shutdown", None, None, Gio.DBusCallFlags.NONE, -1, None) 52 | except: 53 | failure = True 54 | -------------------------------------------------------------------------------- /src/devedeng/subtitles_mux.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import subprocess 22 | 23 | import devedeng.configuration_data 24 | import devedeng.executor 25 | 26 | 27 | class subtitles_mux(devedeng.executor.executor): 28 | 29 | def __init__(self): 30 | 31 | devedeng.executor.executor.__init__(self) 32 | self.config = devedeng.configuration_data.configuration.get_config() 33 | 34 | def multiplex_subtitles(self, file_path, subtitles_path, subt_codepage, subt_lang, 35 | subt_upper, font_size, pal, force_subtitles, aspect, duration, stream_id, fill_color, outline_color, outline_thick): 36 | 37 | if len(fill_color) == 4: 38 | fill_color = fill_color[:3] 39 | if len(outline_color) == 4: 40 | outline_color = outline_color[:3] 41 | 42 | self.subt_path = file_path 43 | self.duration = duration 44 | self.text = _("Adding %(L)s subtitles to %(X)s") % { 45 | "X": os.path.basename(file_path), "L": subt_lang} 46 | 47 | out_xml = open(file_path + "_s" + str(stream_id) + ".xml", "w") 48 | out_xml.write('\n') 54 | out_xml.write('\t\n') 55 | out_xml.write('\t\t\n') 78 | out_xml.write('\t\n') 79 | out_xml.write('') 80 | out_xml.close() 81 | 82 | self.command_var = [] 83 | self.command_var.append("spumux") 84 | mode = self.config.disc_type 85 | if mode == "vcd": 86 | mode = "svcd" 87 | self.command_var.append("-m") 88 | self.command_var.append(mode) 89 | self.command_var.append("-s") 90 | self.command_var.append(str(stream_id)) 91 | self.command_var.append(file_path + "_s" + str(stream_id) + ".xml") 92 | self.stdin_file = file_path + ".tmp" 93 | self.stdout_file = file_path 94 | 95 | def pre_function(self): 96 | 97 | final_path = self.subt_path + ".tmp" 98 | if os.path.exists(final_path): 99 | os.remove(final_path) 100 | os.rename(self.subt_path, final_path) 101 | 102 | def process_stderr(self, data): 103 | 104 | if (data is None) or (len(data) == 0): 105 | return 106 | 107 | if self.duration == 0: 108 | return 109 | 110 | if data[0].startswith("STAT: "): 111 | time_pos = data[0][6:].split(":") 112 | current_time = 0 113 | for t in time_pos: 114 | current_time *= 60 115 | current_time += float(t) 116 | t = current_time / self.duration 117 | self.progress_bar[1].set_fraction(t) 118 | self.progress_bar[1].set_text("%.1f%%" % (100.0 * t)) 119 | 120 | return 121 | -------------------------------------------------------------------------------- /src/devedeng/title.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | from gi.repository import Gtk, GObject 19 | import os 20 | 21 | 22 | class title(GObject.GObject): 23 | 24 | counter = 0 25 | 26 | def __init__(self, config, file_treeview, original_liststore, title_name=None): 27 | 28 | GObject.GObject.__init__(self) 29 | self.config = config 30 | self.file_treeview = file_treeview 31 | if (title_name is None): 32 | title.counter += 1 33 | self.title_name = _("Title %(X)d") % {"X": title.counter} 34 | else: 35 | self.title_name = title_name 36 | self.post_action = "stop" 37 | columns = [] 38 | for iterator in range(0, original_liststore.get_n_columns()): 39 | columns.append(original_liststore.get_column_type(iterator)) 40 | self.files = Gtk.ListStore() 41 | self.files.set_column_types(columns) 42 | 43 | def set_type(self, disc_type): 44 | 45 | self.disc_type = disc_type 46 | 47 | def properties(self): 48 | 49 | builder = Gtk.Builder() 50 | builder.set_translation_domain(self.config.gettext_domain) 51 | 52 | builder.add_from_file(os.path.join( 53 | self.config.glade, "wtitle_properties.ui")) 54 | builder.connect_signals(self) 55 | 56 | # Interface widgets 57 | wtitle_properties = builder.get_object("title_properties") 58 | wtitle = builder.get_object("entry_title") 59 | wplay_first = builder.get_object("play_first") 60 | wplay_prev = builder.get_object("play_previous") 61 | wplay_again = builder.get_object("play_again") 62 | wplay_next = builder.get_object("play_next") 63 | wplay_last = builder.get_object("play_last") 64 | 65 | wtitle.set_text(self.title_name) 66 | builder.get_object(self.post_action).set_active(True) 67 | 68 | wtitle_properties.show_all() 69 | retval = wtitle_properties.run() 70 | if (retval == 2): 71 | self.title_name = wtitle.get_text() 72 | if (wplay_first.get_active()): 73 | self.post_action = "play_first" 74 | elif (wplay_prev.get_active()): 75 | self.post_action = "play_previous" 76 | elif (wplay_again.get_active()): 77 | self.post_action = "play_again" 78 | elif (wplay_next.get_active()): 79 | self.post_action = "play_next" 80 | elif (wplay_last.get_active()): 81 | self.post_action = "play_last" 82 | else: 83 | self.post_action = "stop" 84 | 85 | wtitle_properties.destroy() 86 | 87 | def delete_title(self): 88 | 89 | print("Deleted title " + self.title_name) 90 | 91 | def refresh(self): 92 | 93 | self.file_treeview.set_model(self.files) 94 | 95 | def add_file(self, new_file): 96 | 97 | self.files.append([new_file.file_name, new_file]) 98 | -------------------------------------------------------------------------------- /src/devedeng/vcdimager_converter.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 4 | # 5 | # This file is part of DeVeDe-NG 6 | # 7 | # DeVeDe-NG is free software; you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation; either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # DeVeDe-NG is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see 19 | 20 | import os 21 | import devedeng.configuration_data 22 | import devedeng.executor 23 | 24 | 25 | class vcdimager_converter(devedeng.executor.executor): 26 | 27 | def __init__(self): 28 | 29 | devedeng.executor.executor.__init__(self) 30 | self.config = devedeng.configuration_data.configuration.get_config() 31 | 32 | def create_cd_project(self, path, name, file_movies): 33 | 34 | self.command_var = [] 35 | self.command_var.append("vcdimager") 36 | self.command_var.append("-c") 37 | self.command_var.append(os.path.join(path, name + ".cue")) 38 | self.command_var.append("-b") 39 | self.command_var.append(os.path.join(path, name + ".bin")) 40 | self.command_var.append("-t") 41 | if self.config.disc_type == "vcd": 42 | self.command_var.append("vcd2") 43 | else: 44 | self.command_var.append("svcd") 45 | for element in file_movies: 46 | self.command_var.append(element.converted_filename) 47 | self.text = _("Creating CD image") 48 | 49 | def process_stdout(self, data): 50 | print("Stdout: " + str(data)) 51 | return 52 | 53 | def process_stderr(self, data): 54 | print("Stderr: " + str(data)) 55 | return 56 | -------------------------------------------------------------------------------- /src/devedeng/vlc.py: -------------------------------------------------------------------------------- 1 | # Copyright 2014 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | import subprocess 19 | import devedeng.configuration_data 20 | import devedeng.executor 21 | 22 | 23 | class vlc(devedeng.executor.executor): 24 | 25 | supports_analize = False 26 | supports_play = True 27 | supports_convert = False 28 | supports_menu = False 29 | supports_mkiso = False 30 | supports_burn = False 31 | display_name = "VLC" 32 | 33 | @staticmethod 34 | def check_is_installed(): 35 | try: 36 | handle = subprocess.Popen( 37 | ["vlc", "-h"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 38 | (stdout, stderr) = handle.communicate() 39 | if 0 == handle.wait(): 40 | return True 41 | else: 42 | return False 43 | except: 44 | return False 45 | 46 | def __init__(self): 47 | 48 | devedeng.executor.executor.__init__(self) 49 | self.config = devedeng.configuration_data.configuration.get_config() 50 | 51 | def play_film(self, file_name): 52 | 53 | command_line = ["vlc", "--play-and-exit", file_name] 54 | self.launch_process(command_line) 55 | 56 | def process_stdout(self, data): 57 | return 58 | 59 | def process_stderr(self, data): 60 | return 61 | -------------------------------------------------------------------------------- /src/devedeng/xfburn.py: -------------------------------------------------------------------------------- 1 | # Copyright 2018 (C) Raster Software Vigo (Sergio Costas) 2 | # 3 | # This file is part of DeVeDe-NG 4 | # 5 | # DeVeDe-NG is free software; you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation; either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # DeVeDe-NG is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see 17 | 18 | import subprocess 19 | import devedeng.configuration_data 20 | import devedeng.executor 21 | 22 | 23 | class xfburn(devedeng.executor.executor): 24 | 25 | supports_analize = False 26 | supports_play = False 27 | supports_convert = False 28 | supports_menu = False 29 | supports_mkiso = False 30 | supports_burn = True 31 | display_name = "XFBURN" 32 | 33 | @staticmethod 34 | def check_is_installed(): 35 | try: 36 | handle = subprocess.Popen(["xfburn", "-h"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 37 | (stdout, stderr) = handle.communicate() 38 | if 0 == handle.wait(): 39 | return True 40 | else: 41 | return False 42 | except: 43 | return False 44 | 45 | def __init__(self): 46 | 47 | devedeng.executor.executor.__init__(self) 48 | self.config = devedeng.configuration_data.configuration.get_config() 49 | 50 | def burn(self, file_name): 51 | 52 | self.command_var = ["xfburn", "-i", file_name] 53 | 54 | def process_stdout(self, data): 55 | return 56 | 57 | def process_stderr(self, data): 58 | return 59 | -------------------------------------------------------------------------------- /src/unitests/test_avconv.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import devedeng.avbase 3 | import devedeng.avprobe 4 | 5 | 6 | class TestAVConv(unittest.TestCase): 7 | 8 | def test_ubuntu_14_04(self): 9 | c = devedeng.avbase.avbase() 10 | text = """avconv version 9.18-6:9.18-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers 11 | built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) 12 | avconv 9.18-6:9.18-0ubuntu0.14.04.1 13 | libavutil 52. 3. 0 / 52. 3. 0 14 | libavcodec 54. 35. 0 / 54. 35. 0 15 | libavformat 54. 20. 4 / 54. 20. 4 16 | libavdevice 53. 2. 0 / 53. 2. 0 17 | libavfilter 3. 3. 0 / 3. 3. 0 18 | libavresample 1. 0. 1 / 1. 0. 1 19 | libswscale 2. 1. 1 / 2. 1. 1""".split("\n") 20 | text.append(9) 21 | c.check_version_txt(text) 22 | 23 | self.assertEqual( 24 | c.major_version, 9, "Detecting major version for Ubuntu 14.04's AVConv version") 25 | self.assertEqual( 26 | c.minor_version, 18, "Detecting minor version for Ubuntu 14.04's AVConv version") 27 | 28 | def test_ubuntu_14_10(self): 29 | c = devedeng.avbase.avbase() 30 | text = """avconv version 11-6:11-1, Copyright (c) 2000-2014 the Libav developers 31 | built on Sep 26 2014 14:36:31 with gcc 4.9.1 (Ubuntu 4.9.1-15ubuntu1) 32 | avconv 11-6:11-1 33 | libavutil 54. 3. 0 / 54. 3. 0 34 | libavcodec 56. 1. 0 / 56. 1. 0 35 | libavformat 56. 1. 0 / 56. 1. 0 36 | libavdevice 55. 0. 0 / 55. 0. 0 37 | libavfilter 5. 0. 0 / 5. 0. 0 38 | libavresample 2. 1. 0 / 2. 1. 0 39 | libswscale 3. 0. 0 / 3. 0. 0""".split("\n") 40 | text.append(9) 41 | c.check_version_txt(text) 42 | 43 | self.assertEqual( 44 | c.major_version, 11, "Detecting major version for Ubuntu 14.10's AVConv version") 45 | self.assertEqual( 46 | c.minor_version, 0, "Detecting minor version for Ubuntu 14.10's AVConv version") 47 | 48 | def test_ubuntu_15_04(self): 49 | c = devedeng.avbase.avbase() 50 | text = """avconv version 11.2-6:11.2-1, Copyright (c) 2000-2014 the Libav developers 51 | built on Jan 18 2015 05:12:33 with gcc 4.9.2 (Ubuntu 4.9.2-10ubuntu2) 52 | avconv 11.2-6:11.2-1 53 | libavutil 54. 3. 0 / 54. 3. 0 54 | libavcodec 56. 1. 0 / 56. 1. 0 55 | libavformat 56. 1. 0 / 56. 1. 0 56 | libavdevice 55. 0. 0 / 55. 0. 0 57 | libavfilter 5. 0. 0 / 5. 0. 0 58 | libavresample 2. 1. 0 / 2. 1. 0 59 | libswscale 3. 0. 0 / 3. 0. 0""".split("\n") 60 | text.append(9) 61 | c.check_version_txt(text) 62 | 63 | self.assertEqual( 64 | c.major_version, 11, "Detecting major version for Ubuntu 15.04's AVConv version") 65 | self.assertEqual( 66 | c.minor_version, 2, "Detecting minor version for Ubuntu 15.04's AVConv version") 67 | 68 | def test_mkv1(self): 69 | 70 | c = devedeng.avprobe.avprobe() 71 | json_test = """{ 72 | "streams": [ 73 | { 74 | "index": 0, 75 | "codec_name": "aac", 76 | "codec_long_name": "AAC (Advanced Audio Coding)", 77 | "profile": "LC", 78 | "codec_type": "audio", 79 | "codec_time_base": "1/44100", 80 | "codec_tag_string": "mp4a", 81 | "codec_tag": "0x6134706d", 82 | "sample_fmt": "fltp", 83 | "sample_rate": "44100", 84 | "channels": 2, 85 | "channel_layout": "stereo", 86 | "bits_per_sample": 0, 87 | "r_frame_rate": "0/0", 88 | "avg_frame_rate": "0/0", 89 | "time_base": "1/44100", 90 | "start_pts": 0, 91 | "start_time": "0.000000", 92 | "duration_ts": 3771392, 93 | "duration": "85.519093", 94 | "bit_rate": "115596", 95 | "nb_frames": "3683", 96 | "disposition": { 97 | "default": 1, 98 | "dub": 0, 99 | "original": 0, 100 | "comment": 0, 101 | "lyrics": 0, 102 | "karaoke": 0, 103 | "forced": 0, 104 | "hearing_impaired": 0, 105 | "visual_impaired": 0, 106 | "clean_effects": 0, 107 | "attached_pic": 0 108 | }, 109 | "tags": { 110 | "creation_time": "2005-12-20 20:20:15", 111 | "language": "eng", 112 | "handler_name": "Apple Sound Media Handler" 113 | } 114 | }, 115 | { 116 | "index": 1, 117 | "codec_name": "h264", 118 | "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", 119 | "profile": "Constrained Baseline", 120 | "codec_type": "video", 121 | "codec_time_base": "1/2000", 122 | "codec_tag_string": "avc1", 123 | "codec_tag": "0x31637661", 124 | "width": 320, 125 | "height": 240, 126 | "has_b_frames": 0, 127 | "sample_aspect_ratio": "0:1", 128 | "display_aspect_ratio": "0:1", 129 | "pix_fmt": "yuv420p", 130 | "level": 13, 131 | "color_range": "tv", 132 | "color_space": "smpte170m", 133 | "color_transfer": "bt709", 134 | "color_primaries": "smpte170m", 135 | "chroma_location": "topleft", 136 | "is_avc": "1", 137 | "nal_length_size": "4", 138 | "r_frame_rate": "10/1", 139 | "avg_frame_rate": "10/1", 140 | "time_base": "1/1000", 141 | "start_pts": 0, 142 | "start_time": "0.000000", 143 | "duration_ts": 85500, 144 | "duration": "85.500000", 145 | "bit_rate": "90795", 146 | "bits_per_raw_sample": "8", 147 | "nb_frames": "855", 148 | "disposition": { 149 | "default": 1, 150 | "dub": 0, 151 | "original": 0, 152 | "comment": 0, 153 | "lyrics": 0, 154 | "karaoke": 0, 155 | "forced": 0, 156 | "hearing_impaired": 0, 157 | "visual_impaired": 0, 158 | "clean_effects": 0, 159 | "attached_pic": 0 160 | }, 161 | "tags": { 162 | "creation_time": "2005-12-20 20:20:15", 163 | "language": "eng", 164 | "handler_name": "Apple Video Media Handler" 165 | } 166 | } 167 | ] 168 | }""" 169 | retval = c.process_json(json_test, "filename.mkv") 170 | self.assertFalse(retval) 171 | self.assertEqual(c.audio_streams, 1, 172 | "Checking number of audio streams") 173 | self.assertEqual(c.audio_list[0], 0, "Checking audio stream 1") 174 | self.assertEqual(c.video_streams, 1, 175 | "Checking number of video streams") 176 | self.assertEqual(c.video_list[0], 1, "Checking video stream 1") 177 | 178 | if __name__ == '__main__': 179 | unittest.main() 180 | -------------------------------------------------------------------------------- /stdeb.cfg: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | Depends3 = python3, python3-urllib3, python3-gi, python3-cairo, python3-gi-cairo, libgtk-3-0, ffmpeg (>= 7:1.2.6) | libav-tools(>= 6:9.16), mplayer, mpv | vlc, dvdauthor, genisoimage, vcdimager, libvorbis0a, libvorbisfile3, python3-pkg-resources 3 | -------------------------------------------------------------------------------- /stpacman.cfg: -------------------------------------------------------------------------------- 1 | [DEFAULT] 2 | depends: python-setuptools, python-urllib3, python-gobject2, python-cairo, gobject-introspection, gobject-introspection-runtime, gtk3, ffmpeg, mplayer, vlc, dvdauthor, mkisolinux, vcdimager, libvorbis 3 | --------------------------------------------------------------------------------