Home and Links
 Your PC and Security
 Server NAS
 DVD making
 Raspberry Pi
 PIC projects
 Other projects
 Next >>

Using PhotoFilmStrip to get HD+ from MS PhotoStory 3

PhotoFilmStrip for PS3 HD


PhotoFilmStrip v2.0.0 was released on 29-10-2014 (previous was RC1, 20/11/2013), for WinXP/Vista/Win7. Both GUI and CLI versions are included. It uses the MEncoder 1.0rc2-4.2.1 XVID codec (part of the included mplayer, which doesn't need to be 'installed'), so it can exist as a 'portable' version. Output is defined by a 'profile' and is AVI (i.e. XVid, up to full-HD (1920x1080) MPEG4 or MJPEG) or FLV. An Audio track can be added at the 'video' output stage.

A new project defaults to 16:9 aspect ratio, however you can select 4:3 or 3:2 instead.

You can define the project file name (eg 'MyProject' = so MyProject.pfs) which will be created in a new folder in \Documents and Settings\{your login}\My PhotoFilmStrips\{MyProject}. When you 'render' the project (eg in HD), an 'output.avi' file is created in a sub-folder of the project folder (eg. {MyProject}\FULL-HD\output.avi). A second 'render' (at the same resolution and file type) overwrites the first (eg output.avi) without warning. At output time you can select 'PAL' (25fps) or 'NTSC' (29.97fps) - 'real' AVCHD / BD HD fps (23.976) is not offered, however it should be a simple source code modification to add 23.976 (or replace 29.97). 'Full-HD is one of 6 embedded video 'profiles', which, if the project has an Aspect ratio of 16:9 will deliver 1920x1080 pixels.

The final option is the video output 'container' and 'format', which, in combination with the Profile, sets the bps rate.

Containers are :- .MPG = (MPEG1 @ 1150kbps if 'VCD', else MPEG2 @ 2500 kbps 'SVCD' or @ 8000kbps if 'DVD'), .AVI = (MPEG4+MP3 or MPEG4+AC3 @ 8mbps if 'medium', @10mbps if 'HD', 12mbps if 'Full HD', or MJPEG 4:3 22.5Mbps) .FLV = (Flash video))

The table below (taken from RC1, not checked against the released vsn) sumerises the output resolutions :-

Project Aspect Ratio 16:9 4:3 3:2
Output Profile PAL (25fps) NTSC (29.97fps) PAL (25fps) NTSC (29.97fps) PAL (25fps) NTSC (29.97fps)
"VCD" 352x288 352x240 352x288 352x240 n/a
"SVCD" 576x480 480x480 576x480 480x480 n/a
"DVD" 720x576 720x480 720x576 720x480 n/a
"Medium" 640x360 640x480 720x480
"HD" 1280x720 960x720 1080x720
"Full-HD" 1920x1080 1440x1080 1620x1080

Note that all the above values are defined in the photofilmstrip\core\OutputProfile.py source file (so, in theory at least, would be easy to change)

Plain text (not Unicode) Subtitles are supported and will be rendered in .SRT format (which is compatible with most media players, such as VLC and "The KMPlayer").

This means, unlike MSPS3, subtitles are not “burned into” the photos and will remain 'static' as a photo is pan & zoomed behind the text. So if your MS PS3 relied on 'zooming in' to some text, you will have to manually 'burn in' that text to the photo (using Photoshop Elements, PaintShop Pro or similar) before you 'render' the output.

Migrating a PhotoStory 3 project to PhotoFilmStrip

The .pfs project file is a 'Database dump' in "SQLite format 3"> format (with images 'thumbnails' embedded as 'BLOB' data), which means it can't just be 'opened' as a text file

The database 'tables' in the .fps file can be modified 'by hand' using the Firefox 'add-on' SQLite Manager (it actually opens in a 'stand-alone' new window, so appears to have nothing to do with FireFox, except, I guess, it's using the FireFox add-on scripting engine)

An alternative is sqlitebrowser (Open Source)

NB. Since PhotoFilmStrip already contains code to 'create' and 'save' the database tables, an alternative approach would be to code a new PhotoFilmStrip python 'module' that could 'import' (process and load) an unpacked PhotoStory 3 project.xml file. This task is left for others to pursue :-)

The PFS database is defined in \photofilmstrip\core\ProjectFile.py, loading and saving is initiated in the \photofilmstrip\gui\WxProjectFile.py file.

The PhotoFilmStrip 'picture' Table

I decided to adopt the 'simpler' approach of using a QBasic script to generate a PhotoFilmStrip 'picture' Table compatible .csv file from the MS PS3 project.xml and then 'import' that into a PhotoFilmStrip .pfs database

The table definition (schema) can be found in the ProjectFile.py source. The column names as as follows :-

"picture_id" - primary key, starts from 1 (links to thumbnail table) "filename" - fully qualified path and file name to the high res image (PFS does not store the actual images, only a thumbnail) "width" - actual photo width, in pixels "height" - actual photo height, in pixels "start_left" - start crop box, pixel count from photo left edge (starting 0) "start_top" - start crop box, pixel count from photo top (starting 0) "start_width" - start crop box, width (pixel count) "start_height" - start crop box, height (pixel count) "target_left" - end crop box, pixel count from left (starting 0) "target_top" - end crop box, pixel count from top (starting 0) "target_width" - end crop box, width (pixel count) "target_height" - end crop box, height (pixel count) "rotation" - source photo rotation +/- 90 degrees, -1 = counter-clockwise, 0 = none, 1 = clockwise "duration" - photo main display, in seconds (the transition time adds to this = see Note 1) "movement" - pan and zoom sequence, 0 = linear, 1 = accelerated, 2 = delayed (pause at start and end) "comment" - text entered in the Subtitle box (if any found, the text is used to create an 'output.srt' format file) "effect" - defaults 0 (none), others are 'black and white' and 'sepia' "transition" - default 0, 1 means 'fade', 2 means 'roll' "transition_duration" - number of seconds to be added for the transition (from this photo to the next) - see Note 1 "data" - unknown, set 'null' (type = 'blob', so perhaps this is legacy of some previous vsn. before thumbnail became a separate table ??)Note 1. Like PhotoStory3, the pan and zoom 'overlaps' with the transition, i.e. if pan & zoom is defined, the photo is always 'moving'. This means that, during the transition from one pan and zoomed photo to a second, you will see the merge of both 'moving' photos - so if all photos are 10s and all transitions are 2s, all pan and zooms will be 14s (except the first and last, or unless 'delayed'). The 'accelerated' pan & zoom option allows a more gradual 'ramp up' / 'ramp down' during the transition from one to the next.

Converting a MS PS3 project.xml into a CSV for the above turns out to be a very easy task. The only potential problem is that there will be no entries in the PFS 'thumbnail' table for the PS3 photos - it's easy enough to generate the index codes and sizes, however the actual RGB is another matter (we will cross that bridge when we come to it)

The thumbnail table

The property table

This should contain 2 entries only, property_id= '1', name= 'rev', value= '4' and property_id= '2, name= 'aspect', value= '16:9. If you make the mistake** of adding an audio track, the property_id changes and (by default) the total length of the photo-story is set to the length of the audio track.

**PFS is rather 'picky' when it comes to audio, often dropping the track (i.e. rendering the output file with video only) or, worse, taking a perfectly good 5.1 .ac3 / .m4a and rendering it as 2ch stereo (which then plays back as silence :-) ).Since it's also quite capable of over-riding all your carefully calculated photo display and transition timings (in order to match the video to the audio track length), you should never, ever, add audio to FPS

What about the photo's ?

We can extract the original photos from the MS PS3 project cabinet. However, if the MS PS3 PhotoStory was built for 16:9 output, the photos will have been 133% height pre-distorted. Whilst it would be possible to 'un-distort' the MS PS3 photos (by compressing the height by 3/4), maximum quality is only achieved by 'reverting to the originals' (if these can be found)

This requires all the photo and 'crop box' sizes and co-ordinates be adjusted by 3/4 to 'match' (note - some careful coding is needed to ensure that multi-photo pan/zoom sequences continue to 'match up' i.e. the end crop of one photo matches the 'start crop' of the next)

It's possible that expanding the photo width to 4/3 (instead of compressing the height to 3/4) will give higher quality, however the default has to be height compress (since that allows the originals to be 'dropped in' (if they can be found) without needing to further adjust the pixel counts in the PFS data table)

Since MS PS 3 crop box co-ordinates are always 4:3, they will also have to be 'undistorted' - this means multiplying the start and end width values by 4/3 (133%)

Pseudo-code sequence

1) Launch FPS and create a 'dummy' PFS project at the path/folder where you want to place the converted MS PS3. Note, the database (and folder) can't be created ('Save project' is greyed out) until you add (at least one) photo, after which you can click 'Save project'. It doesn't matter what you 'add' to the PFS, we just need the project database (the 'pictures' table will be 'over-written' by the MS PS3 project, so anything you add at the start will be lost)

2) Manually unpack the MS PS3 project cabinet using 7-zip, to the QBASIC/PSTORY3 folder. Adjust the project.xml by adding 'line ends' using Notepad++ (do a global 'search & replace' of '>' with '>\r\n') to set the line ends to Windows <cr><lf>) = if you don't add line ends, the QBasic script will crash as soon as it tries to 'read' the first line of the.xml file with an 'out of string space' error.

3) Either manually move the MS PS3 (unpacked) cabinet to your QBASIC/PSTORY3 folder (or launch a batch command file eg PS2PFS.CMD to do it all for you). Don't forget to create the QBASIC/PSTORY3/PFS folder (which is where the pfs conversion will be put, by default) - and don't forget that QBasic is restricted to 8.3 file names (so you must change 'THUMBS.CSV' to 'thumbnail.csv' after processing)

4) Open a CMD window, CD to C:\QBASIC and launch qbasic.exe. ESC the splash screen, goto File / Open and find the conversion utility (PS3_2PFS.BAS) which you should have put in your QBASIC folder. NOTE it uses Image Magick 'convert' utility which it expects to find in the C:\IM66210 folder

The PS3_2PFS.BAS does the following :-

For each entry in the PS3 project.xml, generate one line in the 'picture.csv' and 'THUMBS.CSV' migration tables :- Get the existing widths and heights Calculate a new width as 4/3rds of the old (i.e. the code ASSUMES that all PS3 images have been 133% height distorted for 16:9) Use C:\IM66210\CONVERT to width adjust the image and place the new in \FPS folder Insert the fully qualified path/file name for the image into 'picture.csv' Adjust all the crop box sizes by 4/3 * width Set "transition" = 1 for 'fade' (or 0 if 'none'), this photo to the next Set "transition_duration" = number of seconds for the transition (this photo to the next) If MSPS3 image has comment text, create a commentN.txt file with the whole string, then strip the colour/format and add the raw text to the PFS "comment" field

Note that the 'blob' data (at end of both tables) is left NULL. Don't forget to rename 'THUMBS.CSV' as 'thumbnail.csv' before moving onto SQLite

5) Use SQLite Manager (for Firefox) or similar to 'connect' to the dummy .fps database. Highlight the existing 'picture' table and use Table/Empty Table to remove the existing contents (do not delete the table - doing so 'unlinks' it from the .fps database). Select Database/Import and browse ('select file' is on the far right of the file box) for the picture.csv file (don't forget to set the 'first row contains column names' tick box) then complete the import.
Do the same for the thumbnail table. Then save it with Database/Export database (agree the default name .. you get a sql extension, so you keep the original 'dummy' for reuse). Copy the .sql before .fps 'double clicking' to launch FPS

If you moved the whole /FPS folder, FPS will ask you to browse for the new photo folder when it opens the database ...

Getting my .cmd and QBasic 'migration' scripts

Here is the PS3_2PFS.BAS QBasic script (note = it uses Image Magick 'covert' command line utility for photo adjustment)

WARNING - as with all simple scripts, FILES CAN BE OVERWRITTEN WITHOUT WARNING. Command scripts are especially dangerous, so you need to RIGHT CLICK AND 'SAVE AS' the 'wrapper' PS2PFS.CMD script (it just makes the conversion process a bit easier by asking you for arbitrary 'source' folder and file names and copying them into the 8.3 paths & files that Qbasic can deal with .. and then renaming QBasics 8.3 output back to 'proper' file names :-) )

Possible alternatives to PhotoStory 3 / PhotoFilmStrip

The other solution is to move on from PhotoStory 3 to something 'more capable'. There are any number of possibilities, however (unless you want to be parted from ever increasing amounts of money) you should stick to Open Source

DVD Slideshow GUI (Freeware)

As seen on the DVD slideshow GUI features page this is a 'front end' user interface for a collection of Open Source components, including AviSynth, DVDAuthor, HCenc, Media Player Classic, FFmpeg, Flvtool2, Mplex, Demux, mkisofs and others.

Note that you will need a live internet connection to install DVD Slideshow GUI (the installer has to download all the actual components = they are not included) The latest version is Version (approx 25Mb). You can find DVD Slideshow GUI on multiple 'shareware' sites, however what you will get from most is a trojan 'downloader / 'installer' (typically less than 1Mb in size) and NOT the actual software itself (which is about 25Mb in size). If you make the mistake of actually running the 'downloader', it will attempt to install various unwanted adware and spam-ware packages on your PC, in addition downloading the actual application. Some will also install a new Browser (typically Google Chrome) that 'takes over' as your internet connection. You may also get 'trial' versions of bloated, over-hyped, overpriced commercial software (such as McAfee AV) that will also attempt to take over your PC. WARNING - before installing DVD Slideshow GUI you MUST make a 'Restore Point' ! DVD Slideshow GUI downloads and installs an extra 30Mb or so of multi-media support components. These can upset everything from 5.1 playback via S/PDIF to the way DRM intercepts Windows access to your DVD drive (which may well revert to blocking all direct access to movie (.vob) files) - you could even find your existing Codecs have been de-registered or overwritten and PhotoStory 3 is no longer able to Preview or generate slide-shows. To create a System Restore Point, in Start, Programs, Accessories, choose System Tools, then System Restore. In the window, choose 'Ceate a restore point'.

The GUI is rather more complex than PS3 (but still doesn't show the audio track) but one big plus is that it's 'pan and zoom' (known as 'animation') supports photo rotation as well. It is rather harder (and slower) to use 'one photo at a time', however it's possible to use 'shift select' to move and edit groups of photos together (so you can change display and transition times 'en block')

Annotations are supported via movie-like 'sub-titles', which appear (as a single line ?) in the bottom 1/4 or so of the frame. Whilst the usual Windows fonts, styles, colours and sizes are all supported, it appears that the text 'sticks to the frame' rather than the photo (not a big issue since you can always 'burn in' PS3 style annotations to your photos before importing them)

The current version ( not only allows you to import Powerpoint .ppt presentations (via Open Office), but also allows you to import video clips and 'animate' (pan, zoom and rotate) them !

I've not actually tried to import .ppt, however my last attempt to 'convert' .ppt using Open Office lost all the slide 'overlays' (and timings), resulting in a non-animated set of purely static slides Note that any imported video needs to be .avi (i.e. frames = so it's treated just like a series of photos), and whilst it's relatively slow (at any decent resolution) it does actually work !

Note. I used Version on my 4Gb XP PC for about 15 miniutes before it crashed with an 'unknown error' (whilst I was setting up a 'pan and zoom' effect) and lost everything ... needless to say, despite all it's promised functionality, I'll not be wasting anymore time with it

Source code

Coded in wxBasic - the Open Source alternative to QBasic - it should be REALLY easy to modify

The wxbasic interpreter is 'bundled' with the application, however to edit the app. you will need to full GUI version.

As of Nov 2014, my attempt to download the latest 32bit version (SetupWxBasic-x86- was aborted by Avast! (which detected a virus). Seeking the app. elsewhere I discovered the 32bit download at Software Informer had the same Avast! virus detection, however 5 other AV packages (including Kaspersky and McAfee) claimed it was virus free. Since the www.wxbasic.net site was reported by Google as 'hacked' (the site, dated June 2014, has not been 'fixed'), I decided to err on the side of caution. The previous version (SetupWxBasic- is, according to Avast!, virus free.

Next page :- Building transitions - (manually)