PS3
How To Use FFMPEG To Transcode Video For The PS3
So, it seems my last post actually wasn’t the best solution. Although using Mediatomb and VLC worked some of the time, often I found that the audio and video was out of sync, making it impossible to watch the movie.
So, I looked for another alternative. I already use HandBrakeCLI to transcode my videos, but that is essentially a front end to ffmpeg and x264. They are moving away from providing decent support for transcoding videos on the Playstation 3, so I decided to use ffmpeg directly. I used this guide to install the latest svn versions of ffmpeg and x264 on my Ubuntu 8.04 server. I then spent about two weeks trying to find an up-to-date command to actually use ffmpeg to create a PS3 compatible file. It seems most of the instructions on the web are way out of date and use commands that ffmpeg no longer accepts. Finally, after lots of trying I finally asked on the IRC channel #ffmpeg. This very nice dude called relaxed suggested the following:
ffmpeg -t 120 -i $input -vcodec libx264 -level 41 -vpre hq -crf 24 -threads 0 -acodec libfaac -ab 128k -ac 2 output.mp4
Sadly I had problems with this code, since the .mpg files I was using (I am now using MythTV instead of MediaPortal, but that’s another post) were not accepted by the libfaac codec.
However, with a little modification, I got the perfect command. So, without further ado, the best command I have found to convert ANY video accepted by ffmpeg into a PS3 compatible file using x264 that is good quality and low file size is:
ffmpeg -y -i "$1" -vcodec libx264 -level 41 -vpre normal -crf 24 -threads 0 -acodec libfaac -ab 128k -ac 2 -ar 48000 "$1".mp4
Obviously change $1 into your input file and “$1″.mp4 into your output file. If you want to send the command line output to a log file so you can see what is going in, use:
ffmpeg -y -i "$1" -vcodec libx264 -level 41 -vpre normal -crf 24 -threads 0 -acodec libfaac -ab 128k -ac 2 -ar 48000 "$1".mp4 > /where/you/store/your/logs/ffmpegprog.log 2>&1
Now, when I first saw this I thought, hey, its got hardly any switches (all the -XYZ stuff), therefore it must be cack. However, the key is the “-vpre normal” switch. This tells ffmpeg to use some of its built-in presets, or in this case built-in x264 presets that are created when you build x264 from SVN. I was initially told, as you can see from above, to use the “hq” preset, but I found this resulted in files that were quite big. Using the “normal” preset seemed to produce files that were of great quality compared to my original source (SD DVB-T transport streams in MPG format) but much smaller files size, for example, a .mpg transport stream movie that is originally 2.5GBs in size gets reduced to around 650 MBs, awesome.
So, this is the command I now use to convert all my videos. I also use comskip run via Wine to check for commercials and mp4box to mux in the chapter markers from comskip. Weirdly, I do find that when playing these resultant files via VLC they appear to have their audio and video out of sync, but on the PS3 they are fine. Whether this is due to me using an old VLC or my PC being too slow to play em, I don’t know, but hey, if it works.
So, if you are looking for the best ffmpeg command to transcode video files for the PS3 using ffmpeg and x264, I am pretty sure this is it.
As an aside, I also built HandBrakeCLI from SVN and it now also has a basic preset, called Normal, that also produces PS3 compatible files. I will play with them to see how they do, though I find that occasionally HandBrake can crash, and get stuck, so I try to avoid it. Sadly though, the HandBrake dev’s wont help you with this, since you are using the HandBrakeCLI and it is not the CLI that is crashing so they wont look into it for you. In fact (<rant>) I am really shocked at the rudeness and arrogance that the HandBrake devs demonstrate on their forum. I have read so many well worded and polite posts from confused people on their forums, where the devs (mainly a guy called jbrake) just answers back incredibly sarcastically and very rudely, providing little to no help. Maybe they get loads of annoying whiny posts from people who haven’t RTFM, but still, there is no need to be rude about it. In fact, that is the main reason I don’t want to use HandBrake, since I don’t like the attitude those guys have (</rant>).
Anyway, hope this awesome command for a recent SVN ffmpeg and x264 version to convert video files for PS3 works for you!
UPnP, PS3, Transcoding and MediaTomb
For quite a while I had been using PS3MediaServer to provide access to my Video files from my PS3. The problem was, I was getting huge problems getting it to support anything other than the files that the PS3 natively supports. I had previously messed around with MediaTomb but I couldn’t get it’s transcoding features to work. But then I came across this post and it sorted all my problems out. I simply followed the tutorial there and made some minor adjustments, which I will describe below.
The quickest way to follow the tutorial is to cheat and just copy and paste the config.xml that is kindly provided. However, I have found that copy and pasting the whole config.xml doesn’t work. I am pretty sure it is to do with the <udn>uuid= part of the config, since I guess this aligns and individual config to an individual MediaTomb installation. Thus, simply copy and paste all the stuff after and including this line:
“<protocolInfo extend=”yes”/><!– For PS3 support change to “yes” –>
and you’ll be good to go. Next, since most of my files are in the MKV container, I needed to add some extra stuff to support MKV files and the transcoding of them. So, I added the following two lines to their respective places (you can tell where they should go by looking at their format and looking for other lines that look similar). I added these two lines:
<map from=”mkv” to=”video/x-matroska”/>
<transcode mimetype=”video/x-matroska” using=”vlcmpeg”/>
And awesomely, it worked straight out of the box. Nice one Mr Pyke! There are a few more things to add, like adding thumbnail support, which I understand you can do by using a script and app called thumbnailermpeg, but that’s about it. I have found that using MediaTomb and VLC to transcode files puts much less strain on my server than using PS3MediaServer ever did. HTOP shows MediaTomb and VLC when streaming an MKV file pushing the server to around 15% CPU usage on my dual core Pentium4. Doing the same thing for one of the few supported movies by PS3MediaServer shows CPU usage maxed out at 100% on both cores full time. Ouchy! So I have saved some energy and prolonged the lifespan of my server by doing this too. I know that at the moment MediaTomb doesn’t do all the fancy things that PS3MediaServer does (like AC3 pass-through and stuff) but I can live without that. I am sure there was a lot I was missing in PS3MediaServer that it can do and it is updated much more frequently than MediaTomb, but I just couldn’t agree with the huge resource usage it entails.
I now have full streaming of all my recorded-off-the-tele MKV movies and I am a happy bunny, so thanks RobertPyke and thanks MediaTomb!


