Projects
Multimedia
screengen
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 4
View file
screengen.changes
Changed
@@ -1,4 +1,17 @@ ------------------------------------------------------------------- +Sat Sep 13 22:37:51 UTC 2014 - lazy.kent@opensuse.org + +- Update to 1.8. + * Change console output. + * Change default aspect ratio to DAR (Display Aspect Ratio). + * Added parameter "maxRows" if use parameter "timeStep". + * Added parameter "version". + * Added parameter "stampStart". + * Added example scripts. +- Add Requires: liberation-fonts. The program use it by default. +- Install example scripts and desktop files to docs. + +------------------------------------------------------------------- Sun Sep 1 19:25:01 UTC 2013 - lazy.kent@opensuse.org - Update to 1.7.
View file
screengen.spec
Changed
@@ -1,7 +1,7 @@ # # spec file for package screengen # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,22 +16,24 @@ # -%define dversion 20130901 +%define bversion 20140909 Name: screengen -Version: 1.7 +Version: 1.8 Release: 0 License: GPL-3.0 Summary: Screenlist Generator Url: http://qt-apps.org/content/show.php/ScreenGen+-+Screenlist+generator?content=153485 Group: Productivity/Multimedia/Video/Players -Source0: http://www.kochkin.org/lib/exe/fetch.php/%{name}/%{name}-%{version}-%{dversion}.tar.bz2 +Source0: http://www.kochkin.org/lib/exe/fetch.php/%{name}/%{name}-%{version}-%{bversion}.tar.bz2 BuildRequires: pkgconfig(QtCore) >= 4.8 BuildRequires: pkgconfig(QtGui) >= 4.8 BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavformat) BuildRequires: pkgconfig(libavutil) BuildRequires: pkgconfig(libswscale) +# The program use it by default. +Requires: liberation-fonts BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -42,6 +44,8 @@ %prep %setup -qn %{name} +# Avoid /usr/bin/perl dependency. +chmod -x example-scripts/screengen-* %build qmake \ @@ -55,7 +59,7 @@ %files %defattr(-,root,root,-) -%doc CHANGELOG COPYRIGHT +%doc CHANGELOG COPYING example-scripts/ %{_bindir}/%{name} %{_datadir}/%{name}/
View file
screengen-1.7-20130901.tar.bz2/COPYRIGHT
Deleted
@@ -1,2 +0,0 @@ -Copyright (C) 2012 Oleg Kochkin <oleg.kochkin@gmail.com>, www.kochkin.org. -License GPL.
View file
screengen-1.7-20130901.tar.bz2/CHANGELOG -> screengen-1.8-20140909.tar.bz2/CHANGELOG
Changed
@@ -40,3 +40,11 @@ * Fix segmentation fault if open error videofile, if not exists video stream or video codec. * Video Codec names fixed. * Added parameter "timeStep". + +2014-09-09 (1.8) +* Change console output. +* Change default aspect ratio to DAR (Display Aspect Ratio). +* Added parameter "maxRows" if use parameter "timeStep". +* Added parameter "version". +* Added parameter "stampStart". +* Added example scripts.
View file
screengen-1.8-20140909.tar.bz2/COPYING
Added
@@ -0,0 +1,692 @@ +Copyright (C) 2012-2014 Oleg Kochkin <oleg.kochkin@gmail.com>, www.kochkin.tk. +License GPL. + +------------------------------------------------------------------------------ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +------------------------------------------------------------------------------ + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological
View file
screengen-1.7-20130901.tar.bz2/INSTALL -> screengen-1.8-20140909.tar.bz2/INSTALL
Changed
@@ -7,4 +7,4 @@ For uninstall run 'make uninstall' from root -See http://www.kochkin.org/doku.php/screengen/010-index +See http://www.kochkin.tk/doku.php/screengen/010-index
View file
screengen-1.8-20140909.tar.bz2/example-scripts/screengen-file
Added
@@ -0,0 +1,29 @@ +#!/usr/bin/perl + +# Create list for one video file +# Parameters: "VideoFile" "OutputFolderForList" +# Example: screengen "/mnt/stor/video/test.avi" "/mnt/stor/video" + +$file="@ARGV[0]"; +$out_folder="@ARGV[1]"; + +$presets1=`screengen --presetsList`; +@presets=split ("\n",$presets1); + +$all_presets=""; + +for ($i=3;$i<@presets;$i++){ + $all_presets=$all_presets." \"".@presets[$i]."\" \"".@presets[$i]."\""; + } +print $all_presets."\n"; + +$selected=`kdialog --title "Select preset for screengen." --menu "Presets" $all_presets`; +if ($selected eq "") {exit;} + +chomp $selected; + +$cmd="nice -n 19 screengen \"$file\" --preset \"$selected\" --outFolder \"$out_folder\""; +print $cmd."\n"; +`$cmd`; + +`kdialog --title "Done create list for video." --msgbox "File:\t $file\nFolder:\t $out_folder\nPreset:\t $selected"`;
View file
screengen-1.8-20140909.tar.bz2/example-scripts/screengen-folder
Added
@@ -0,0 +1,39 @@ +#!/usr/bin/perl + +# Create lists for all video files in folder +# Parameter: "FolderWithVideoFiles" +# Example: screengen "/mnt/stor/video" +# Lists saved in "/mnt/stor/video/scr" folder + +$folder="@ARGV[0]"."/"; +$outfolder="$folder"."scr"; + +$presets1=`screengen --presetsList`; +@presets=split ("\n",$presets1); + +$all_presets=""; + +for ($i=3;$i<@presets;$i++){ + $all_presets=$all_presets." \"".@presets[$i]."\" \"".@presets[$i]."\""; + } +$selected=`kdialog --title "Select preset for screengen." --menu "Preset" $all_presets`; +if ($selected eq "") {exit;} + +chomp $selected; + +@files=`ls "$folder" -1`; + +foreach $file (@files){ + chomp $file; + $filename="$folder"."$file"; + $vid=`xdg-mime query filetype "$filename"`; + if ((split ("/", $vid))[0] eq "video") { + if (-e "$outfolder"){} + else {mkdir ("$outfolder");} + + $cmd="nice -n 19 screengen \"$filename\" --preset \"$selected\" --outFolder \"$outfolder\""; + `$cmd`; + } + } + +`kdialog --title "Done create lists in folder." --msgbox "$folder\nwith preset $selected"`;
View file
screengen-1.8-20140909.tar.bz2/example-scripts/screengen-folder.desktop
Added
@@ -0,0 +1,13 @@ +# Dolphin context popup menu item +# Put this file in "~/.kde/share/kde4/services/ServiceMenus/" folder + +[Desktop Entry] +Type=Service +Actions=screengen_folder +ServiceTypes=KonqPopupMenu/Plugin,inode/directory +X-KDE-Priority=TopLevel + +[Desktop Action screengen_folder] +Exec=screengen-folder "%f" +Icon=preferences-desktop-display-color +Name=Create lists for folder
View file
screengen-1.8-20140909.tar.bz2/example-scripts/screengen.desktop
Added
@@ -0,0 +1,14 @@ +# Dolphin context popup menu item +# Put this file in "~/.kde/share/kde4/services/ServiceMenus/" folder + +[Desktop Entry] +Type=Service +Actions=sg_select +ServiceTypes=KonqPopupMenu/Plugin,video/.* +X-KDE-Priority=TopLevel +Icon=preferences-desktop-display-color + +[Desktop Action sg_select] +Exec=screengen-file %u %d +Icon=preferences-desktop-display-color +Name=Create list for video
View file
screengen-1.7-20130901.tar.bz2/screengen_ru_RU.ts -> screengen-1.8-20140909.tar.bz2/screengen_ru_RU.ts
Changed
@@ -4,63 +4,63 @@ <context> <name>QObject</name> <message> - <location filename="src/main.cpp" line="338"/> + <location filename="src/main.cpp" line="394"/> <source>Mb</source> <translation>Мб</translation> </message> <message> - <location filename="src/main.cpp" line="358"/> + <location filename="src/main.cpp" line="414"/> <source>File name:</source> <translation>Имя файла:</translation> </message> <message> - <location filename="src/main.cpp" line="360"/> + <location filename="src/main.cpp" line="416"/> <source>Size:</source> <translation>Размер:</translation> </message> <message> - <location filename="src/main.cpp" line="362"/> + <location filename="src/main.cpp" line="418"/> <source>General info:</source> <translation>Информация:</translation> </message> <message> - <location filename="src/main.cpp" line="364"/> + <location filename="src/main.cpp" line="420"/> <source>Video:</source> <translation>Видео:</translation> </message> <message> - <location filename="src/main.cpp" line="366"/> + <location filename="src/main.cpp" line="422"/> <source>Audio:</source> <translation>Аудио:</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="15"/> - <location filename="src/qffmpeg.cpp" line="100"/> + <location filename="src/qffmpeg.cpp" line="29"/> + <location filename="src/qffmpeg.cpp" line="152"/> <source>kb/s</source> <translation>кбит/с</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="15"/> + <location filename="src/qffmpeg.cpp" line="29"/> <source>Streams:</source> <translation>Потоков:</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="15"/> + <location filename="src/qffmpeg.cpp" line="29"/> <source>Full bitrate:</source> <translation>Общий битрейт:</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="92"/> + <location filename="src/qffmpeg.cpp" line="144"/> <source>fps</source> <translation>кадров/с</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="101"/> + <location filename="src/qffmpeg.cpp" line="153"/> <source>kHz</source> <translation>кГц</translation> </message> <message> - <location filename="src/qffmpeg.cpp" line="103"/> + <location filename="src/qffmpeg.cpp" line="155"/> <source>Not present</source> <translation>Отсутствует</translation> </message>
View file
screengen-1.8-20140909.tar.bz2/src/build_number.h
Added
@@ -0,0 +1,2 @@ +#define VERSION_NUMBER "1.8" +#define BUILD_NUMBER "2014.09.09"
View file
screengen-1.7-20130901.tar.bz2/src/main.cpp -> screengen-1.8-20140909.tar.bz2/src/main.cpp
Changed
@@ -1,5 +1,8 @@ +#include "build_number.h" +#define VERSION VERSION_NUMBER"-"BUILD_NUMBER +#define COPYRIGHT "ScreenGen. Version "VERSION_NUMBER" (build "BUILD_NUMBER"). Copyright (C) 2012-2014 Oleg Kochkin (www.kochkin.tk). License - GPL." + #include <QApplication> -#include <QDebug> #include <QPainter> #include <QTime> #include <QTextCodec> @@ -8,6 +11,7 @@ #include <QSettings> #include "qffmpeg.h" #include "qshadow.h" +#include <QTextStream> QColor getColorFromString (QString tc); int fontWeightFromString (QString w, int def); @@ -20,7 +24,7 @@ translator.load ("screengen_"+QLocale::system().name()+".qm","/usr/share/screengen/translations/"); app.installTranslator (&translator); - qDebug()<<"Screenlist generator from video file. Version 1.7. Copyright (C) 2012,2013 Oleg Kochkin. License - GPL."; + QTextStream(stdout)<<COPYRIGHT<<"\n"<<endl; // Видеофайл QString videoFile = ""; // Секция предустановок @@ -87,6 +91,10 @@ QString stampDescrPos=cfg.value ("stampDescrPos","lt").toString(); QString stampDescr=cfg.value ("stampDescr","").toString();// Комментарий QString timeStep=cfg.value ("timeStep","00:00:00").toString();// Время между кадрами + int maxRows=cfg.value ("maxRows",50).toInt();// Максимальное количество строк при использовании --timeStep + bool version=cfg.value ("version",false).toBool();// Строка авторских прав в нижней части листа + QString stampStart=cfg.value ("stampStart","00:00:00").toString();// Начальное время дла штампа времени + bool stampStartFlag = false; cfg.setValue ("frames",frames); cfg.setValue ("width",widthList); @@ -120,6 +128,7 @@ cfg.setValue ("foreground",foreground); cfg.setValue ("aspect",aspect); cfg.setValue ("stampPos",stampPos); + cfg.setValue ("stampStart",stampStart); cfg.setValue ("infoShadowOffset",infoShadowOffset); cfg.setValue ("infoShadowInt",infoShadowInt); cfg.setValue ("infoShadowColor",infoShadowColor); @@ -138,6 +147,8 @@ cfg.setValue ("stampDescrPos",stampDescrPos); cfg.setValue ("stampDescr",stampDescr); cfg.setValue ("timeStep",timeStep); + cfg.setValue ("maxRows",maxRows); + cfg.setValue ("version",version); cfg.endGroup(); videoFile = argv[1]; @@ -190,11 +201,21 @@ if (QString(argv[i]) == "--presetsList") presetsList=true; if (QString(argv[i]) == "--presetInfo") presetInfo=QString(argv[i+1]); if (QString(argv[i]) == "--timeStep") timeStep=QString(argv[i+1]); + if (QString(argv[i]) == "--maxRows") maxRows=QString(argv[i+1]).toInt(); + + if (QString(argv[i]) == "--stampStart") { + stampStart=QString(argv[i+1]); + stampStartFlag = true; + } if (QString(argv[i]) == "--header") { if (QString(argv[i+1]) == "true") header=true; else header=false; } + if (QString(argv[i]) == "--version") { + if (QString(argv[i+1]) == "true") version=true; + else version=false; + } if (QString(argv[i]) == "--timeFrame") { if (QString(argv[i+1]) == "true") timeFrame=true; else timeFrame=false; @@ -210,80 +231,83 @@ } if (presetsList){ - qDebug()<<"Presets in "<<cfg.fileName()<<":"; + QTextStream(stdout)<<"Presets in "<<cfg.fileName()<<":\n"; QStringList presets = cfg.childGroups(); - foreach (QString preset, presets) qDebug()<<preset; + foreach (QString preset, presets) QTextStream(stdout)<<preset<<"\n"; return 0; } if (! presetInfo.isEmpty()){ - qDebug()<<"Values in preset"<<presetInfo<<"in file"<<cfg.fileName()<<":"; + QTextStream(stdout)<<"Values in preset "<<presetInfo<<" in file "<<cfg.fileName()<<":\n"; cfg.beginGroup(presetInfo); QStringList preset = cfg.childKeys(); foreach (QString key, preset){ QString str = key+" = "+ cfg.value(key,"").toString(); - qDebug()<<str; + QTextStream(stdout)<<str<<"\n"; } cfg.endGroup(); return 0; } if (argc < 2){ - qDebug()<<"screengen videoFile [parameters]"; - qDebug()<<"Parameters:"; - qDebug()<<" --preset Use section in config file (default - \"Default\")"; - qDebug()<<" --presetsList Show all presets in config file (all other parameters ignored)"; - qDebug()<<" --presetInfo Show all values in preset (all other parameters ignored, example: --presetInfo MyPreset)"; - qDebug()<<" --frames Frames count in screenlist (default - 16)"; - qDebug()<<" --width Width screenlist (default - 1200)"; - qDebug()<<" --horCount Frames in horisontal (default - 4)"; - qDebug()<<" --offsetBegin Time offset from begin (default - \"00:01:00\")"; - qDebug()<<" --offsetEnd Time offset from end (default - \"00:01:00\")"; - qDebug()<<" --listBorder Depth border screenlist (default - 10)"; - qDebug()<<" --frameBorder Depth border frame (default - 5)"; - qDebug()<<" --shadowOffset Offset shadow of frame (default - 5)"; - qDebug()<<" --shadowInt Intensity shadow of frame (default - 10, range 0-100)"; - qDebug()<<" --shadowColor R,G,B color shadow of frame (default - \"0,0,0\" - black, \"255,255,255\" - white)"; - qDebug()<<" --background Picture file for background (if empty, fill white)"; - qDebug()<<" --backgroundColor R,G,B[,A] background color (default - \"255,255,255\")"; - qDebug()<<" --picType Type of picture file (default - \"jpg\")"; - qDebug()<<" --header Header with information (default - true)"; - qDebug()<<" --timeFrame Time stamp on frame (default - true)"; - qDebug()<<" --fontFrameName Name font on frame (default - \"Liberation Sans\")"; - qDebug()<<" --fontFrameSize Size font on frame (default - 10)"; - qDebug()<<" --fontFrameWeight Weight font on frame (default - Normal, (Light,DemiBold,Bold,Black))"; - qDebug()<<" --fontFrameItalic Italic font on frame (default - false)"; - qDebug()<<" --fontFrameColor R,G,B[,A] color font on frame (default - \"255,255,255\")"; - qDebug()<<" --fontFrameShadowOffset Offset shadow of time stamp (default - 0)"; - qDebug()<<" --fontFrameShadowInt Intensity shadow of time stamp (default - 2, range 0-100)"; - qDebug()<<" --fontFrameShadowColor R,G,B color shadow of time stamp (default - \"0,0,0\")"; - qDebug()<<" --stampPos Position time stamp (default - \"rb\" (RightBottom), (rb, rt, lb, lr))"; - qDebug()<<" --stampOffset Offset from the edge of the frame to the timestamp (default - 3)"; - qDebug()<<" --fontHeaderName Name font on header (default - \"Liberation Sans\")"; - qDebug()<<" --fontHeaderSize Size font on header (default - 13)"; - qDebug()<<" --fontHeaderWeight Weight font on header (default - Bold, (Normal,Light,DemiBold,Black))"; - qDebug()<<" --fontHeaderItalic Italic font on header (default - false)"; - qDebug()<<" --fontHeaderColor R,G,B[,A] color font on header (default - \"0,0,0\")"; - qDebug()<<" --headerBackground Picture file for header background (if empty, default color for header)"; - qDebug()<<" --headerColor R,G,B[,A] color header background (default - \"255,255,255\")"; - qDebug()<<" --headerBorderColor R,G,B[,A] color header border (default - \"0,0,0\")"; - qDebug()<<" --headerBorder Depth border header (default - 2)"; - qDebug()<<" --infoShadowOffset Offset shadow of information text (default - 5)"; - qDebug()<<" --infoShadowInt Intensity shadow of information text (default - 10, range 0-100)"; - qDebug()<<" --infoShadowColor R,G,B color shadow of information text (default - \"100,100,100\")"; - qDebug()<<" --logoFile Picture file for logotype (it is recommended PNG image with alpha channel)"; - qDebug()<<" --logoShadowOffset Offset shadow of logotype (default - 5)"; - qDebug()<<" --logoShadowInt Intensity shadow of logotype (default - 10, range 0-100)"; - qDebug()<<" --logoShadowColor R,G,B color shadow of logotype (default - \"100,100,100\")"; - qDebug()<<" --foreground Picture file for foreground (it is recommended PNG image with alpha channel)"; - qDebug()<<" --aspect Aspect ratio (if 0.0 - source aspect, default - 0.0)"; - qDebug()<<" --descr Custom text, located at the top of the header"; - qDebug()<<" --outFolder Folder for result files"; - qDebug()<<" --frameBoxColor R,G,B[,A] color frame border (default - \"120,120,120\")"; - qDebug()<<" --frameBox Depth border frame (default - 0)"; - qDebug()<<" --stampDescr Custom text, located on frame"; - qDebug()<<" --stampDescrPos Position custom text (default - \"lt\" (LeftTop), (rb, rt, lb, lr))"; - qDebug()<<" --timeStep The time between frames. If not equal to \"00:00:00\", the parameter \"frames\" are ignored. (default - \"00:00:00\")"; + QTextStream(stdout)<<"screengen videoFile [parameters]\n"; + QTextStream(stdout)<<"Parameters:\n"; + QTextStream(stdout)<<" --preset Use section in config file (default - \"Default\")\n"; + QTextStream(stdout)<<" --presetsList Show all presets in config file (all other parameters ignored)\n"; + QTextStream(stdout)<<" --presetInfo Show all values in preset (all other parameters ignored, example: --presetInfo MyPreset)\n"; + QTextStream(stdout)<<" --frames Frames count in screenlist (default - 16)\n"; + QTextStream(stdout)<<" --width Width screenlist (default - 1200)\n"; + QTextStream(stdout)<<" --horCount Frames in horisontal (default - 4)\n"; + QTextStream(stdout)<<" --offsetBegin Time offset from begin (default - \"00:01:00\")\n"; + QTextStream(stdout)<<" --offsetEnd Time offset from end (default - \"00:01:00\")\n"; + QTextStream(stdout)<<" --listBorder Depth border screenlist (default - 10)\n"; + QTextStream(stdout)<<" --frameBorder Depth border frame (default - 5)\n"; + QTextStream(stdout)<<" --shadowOffset Offset shadow of frame (default - 5)\n"; + QTextStream(stdout)<<" --shadowInt Intensity shadow of frame (default - 10, range 0-100)\n"; + QTextStream(stdout)<<" --shadowColor R,G,B color shadow of frame (default - \"0,0,0\" - black, \"255,255,255\" - white)\n"; + QTextStream(stdout)<<" --background Picture file for background (if empty, fill white)\n"; + QTextStream(stdout)<<" --backgroundColor R,G,B[,A] background color (default - \"255,255,255\")\n"; + QTextStream(stdout)<<" --picType Type of picture file (default - \"jpg\")\n"; + QTextStream(stdout)<<" --header Header with information (default - true)\n"; + QTextStream(stdout)<<" --timeFrame Time stamp on frame (default - true)\n"; + QTextStream(stdout)<<" --fontFrameName Name font on frame (default - \"Liberation Sans\")\n"; + QTextStream(stdout)<<" --fontFrameSize Size font on frame (default - 10)\n"; + QTextStream(stdout)<<" --fontFrameWeight Weight font on frame (default - Normal, (Light,DemiBold,Bold,Black))\n"; + QTextStream(stdout)<<" --fontFrameItalic Italic font on frame (default - false)\n"; + QTextStream(stdout)<<" --fontFrameColor R,G,B[,A] color font on frame (default - \"255,255,255\")\n"; + QTextStream(stdout)<<" --fontFrameShadowOffset Offset shadow of time stamp (default - 0)\n"; + QTextStream(stdout)<<" --fontFrameShadowInt Intensity shadow of time stamp (default - 2, range 0-100)\n"; + QTextStream(stdout)<<" --fontFrameShadowColor R,G,B color shadow of time stamp (default - \"0,0,0\")\n"; + QTextStream(stdout)<<" --stampPos Position time stamp (default - \"rb\" (RightBottom), (rb, rt, lb, lr))\n"; + QTextStream(stdout)<<" --stampOffset Offset from the edge of the frame to the timestamp (default - 3)\n"; + QTextStream(stdout)<<" --stampStart Time offset for timestamp (default - \"00:00:00\")\n"; + QTextStream(stdout)<<" --fontHeaderName Name font on header (default - \"Liberation Sans\")\n"; + QTextStream(stdout)<<" --fontHeaderSize Size font on header (default - 13)\n"; + QTextStream(stdout)<<" --fontHeaderWeight Weight font on header (default - Bold, (Normal,Light,DemiBold,Black))\n"; + QTextStream(stdout)<<" --fontHeaderItalic Italic font on header (default - false)\n"; + QTextStream(stdout)<<" --fontHeaderColor R,G,B[,A] color font on header (default - \"0,0,0\")\n"; + QTextStream(stdout)<<" --headerBackground Picture file for header background (if empty, default color for header)\n"; + QTextStream(stdout)<<" --headerColor R,G,B[,A] color header background (default - \"255,255,255\")\n"; + QTextStream(stdout)<<" --headerBorderColor R,G,B[,A] color header border (default - \"0,0,0\")\n"; + QTextStream(stdout)<<" --headerBorder Depth border header (default - 2)\n"; + QTextStream(stdout)<<" --infoShadowOffset Offset shadow of information text (default - 5)\n";
View file
screengen-1.7-20130901.tar.bz2/src/qffmpeg.cpp -> screengen-1.8-20140909.tar.bz2/src/qffmpeg.cpp
Changed
@@ -9,20 +9,26 @@ pAVFormatContext = avformat_alloc_context(); if (avformat_open_input (&pAVFormatContext, videoFile.toLocal8Bit(), NULL, NULL)!=0){ - qDebug()<<"Error open file:"<<videoFile; + QTextStream(stdout)<<"Error open file:"<<videoFile<<"\n"; error=1; return; } else if (avformat_find_stream_info (pAVFormatContext, NULL) < 0){ - qDebug()<<"Not found streams in"<<videoFile; + QTextStream(stdout)<<"Not found streams in"<<videoFile<<"\n"; error=1; return; } + +// Продолжительность duration = QTime(0,0,0,0).addMSecs (pAVFormatContext->duration / 1000).toString("hh:mm:ss"); +// Общий битрейт всех потоков fullBitrate = QString::number (pAVFormatContext->bit_rate / 1000); +// Количество потоков streamsCount = pAVFormatContext->nb_streams; +// Строка основных параметров generalInfo = duration+", "+QObject::tr("Streams:")+" "+QString::number (streamsCount)+", "+QObject::tr("Full bitrate:")+" "+fullBitrate+" "+QObject::tr("kb/s"); +// Проверка наличия видеопотока и получение его номера vStreamNumber=-1; for (uint i=0; i < pAVFormatContext->nb_streams;i++) if (pAVFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){ @@ -30,37 +36,59 @@ break; } if (vStreamNumber == -1){ - qDebug()<<"Not video stream in"<<videoFile; + QTextStream(stdout)<<"Not video stream in"<<videoFile<<"\n"; error=1; return; } - vCodecContext = pAVFormatContext->streams[vStreamNumber]->codec; +// Проверка наличия в ffmpeg кодека для видеопотока + AVStream *vStream = pAVFormatContext->streams[vStreamNumber]; + vCodecContext = vStream->codec; vCodec = avcodec_find_decoder (vCodecContext->codec_id); if (avcodec_open2 (vCodecContext, vCodec, NULL)){ - qDebug()<<"Not open video codec in"<<videoFile; + QTextStream(stdout)<<"Not open video codec in"<<videoFile<<"\n"; error=1; return; } - vResolution = QString::number (vCodecContext->width) + "x" + QString::number (vCodecContext->height); - vFps = QString::number ((double) pAVFormatContext->streams[vStreamNumber]->r_frame_rate.num / pAVFormatContext->streams[vStreamNumber]->r_frame_rate.den); +// Частота кадров + vFps = QString::number ((double) vStream->r_frame_rate.num / vStream->r_frame_rate.den); +// Кодек vCodecName = QString(vCodec->name).toUpper(); +// Размер исходного кадра vWidth = vCodecContext->width; vHeight = vCodecContext->height; +// Размер исходного кадра в текстовом виде + vResolution = QString::number (vWidth) + "x" + QString::number (vHeight); +// Продолжительность iDuration = pAVFormatContext->duration; +// Вычисление Display Aspect Ratio (DAR). Соотношение сторон выводимого на экран кадра + dar = double (vWidth) / double (vHeight); + if (vStream->sample_aspect_ratio.num && av_cmp_q(vStream->sample_aspect_ratio, vStream->codec->sample_aspect_ratio)){ + AVRational display_aspect_ratio; + av_reduce (&display_aspect_ratio.num, &display_aspect_ratio.den, vWidth * vStream->sample_aspect_ratio.num, vHeight * vStream->sample_aspect_ratio.den, 1024*1024); + dar = double (display_aspect_ratio.num) / double (display_aspect_ratio.den); + } else { + if (vCodecContext->sample_aspect_ratio.num) { + AVRational display_aspect_ratio; + av_reduce (&display_aspect_ratio.num, &display_aspect_ratio.den, vWidth * vCodecContext->sample_aspect_ratio.num, vHeight * vCodecContext->sample_aspect_ratio.den, 1024 * 1024); + dar = double (display_aspect_ratio.num) / double (display_aspect_ratio.den); + } + } + +// Проверка наличия аудиопотока и получение его номера aStreamNumber=-1; for (uint i=0; i < pAVFormatContext->nb_streams;i++) if (pAVFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO){ aStreamNumber=i; break; } - if (aStreamNumber == -1) qDebug()<<"Not audio stream in"<<videoFile; + if (aStreamNumber == -1) QTextStream(stdout)<<"Not audio stream in\n"<<videoFile<<endl; else{ aCodecContext = pAVFormatContext->streams[aStreamNumber]->codec; aCodec = avcodec_find_decoder (aCodecContext->codec_id); - if (avcodec_open2 (aCodecContext, aCodec, NULL)) qDebug()<<"Not open audio codec in"<<videoFile; + if (avcodec_open2 (aCodecContext, aCodec, NULL)) QTextStream(stdout)<<"Not open audio codec in"<<videoFile<<"\n"<<endl; } if (vCodecContext->codec_tag > 0){ @@ -71,16 +99,20 @@ char aChC[32]; if (aStreamNumber != -1){ av_get_channel_layout_string (aChC, sizeof(aChC), aCodecContext->channels, aCodecContext->channel_layout); +// Количество каналов aChannels = QString (aChC); +// Частота дискретизации aSamples = QString::number ((double)aCodecContext->sample_rate / 1000); +// Битрейт aBitrate = QString::number (get_bit_rate (aCodecContext)/1000); +// Кодек aCodecName = QString(aCodec->name).toUpper(); } } // Вычисляет битрейт потока (пока только для звука, и то, не всегда) int TFfmpeg::get_bit_rate(AVCodecContext *ctx){ - int bit_rate; + int bit_rate = 0; int bits_per_sample; switch(ctx->codec_type) { @@ -89,14 +121,14 @@ case AVMEDIA_TYPE_SUBTITLE: case AVMEDIA_TYPE_ATTACHMENT: bit_rate = ctx->bit_rate; - break; + break; case AVMEDIA_TYPE_AUDIO: bits_per_sample = av_get_bits_per_sample(ctx->codec_id); - bit_rate = bits_per_sample ? ctx->sample_rate * ctx->channels * bits_per_sample : ctx->bit_rate; - break; + if (bits_per_sample) bit_rate = ctx->sample_rate * ctx->channels * bits_per_sample; + else bit_rate = ctx->bit_rate; + break; default: - bit_rate = 0; - break; + break; } return bit_rate; } @@ -154,13 +186,13 @@ avcodec_decode_video2 (vCodecContext, pFrame, &frameFinished, &packet); if (frameFinished){ struct SwsContext *context; - context = sws_getContext (vCodecContext->width, vCodecContext->height, vCodecContext->pix_fmt, vCodecContext->width,vCodecContext->height, PIX_FMT_RGB24, SWS_BICUBIC, 0, 0, 0); + context = sws_getCachedContext (0, vCodecContext->width, vCodecContext->height, vCodecContext->pix_fmt, vCodecContext->width,vCodecContext->height, PIX_FMT_RGB24, SWS_BICUBIC, 0, 0, 0); sws_scale (context, (uint8_t**) pFrame->data, pFrame->linesize, 0, vCodecContext->height, pFrameRGB->data, pFrameRGB->linesize); for (int j=0; j<vCodecContext->height; j++) memcpy (img.scanLine (j), pFrameRGB->data[0] + j * pFrameRGB->linesize[0], vCodecContext->width * 3); break; } } - av_free_packet (&packet); +// av_free_packet (&packet); } return img; }
View file
screengen-1.7-20130901.tar.bz2/src/qffmpeg.h -> screengen-1.8-20140909.tar.bz2/src/qffmpeg.h
Changed
@@ -2,8 +2,8 @@ #include <QString> #include <QImage> -#include <QDebug> #include <QTime> +#include <QTextStream> extern "C" { #include <libavcodec/avcodec.h> @@ -24,6 +24,7 @@ int vStreamNumber, aStreamNumber, streamsCount, vWidth, vHeight, error; int64_t iDuration; QString vCodecTag, aChannels, aSamples, vResolution, vFps, aBitrate, fullBitrate, vCodecName, aCodecName, duration, generalInfo; + double dar; private: AVCodecContext getVCodecContext(); AVFormatContext *pAVFormatContext;
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.