Showing posts with label video. Show all posts
Showing posts with label video. Show all posts
Linux and its Collaboration Explained (Video)
I can recommend this video giving a quick intro to what Linux is and does today as well as how it's built, though there's probably not much new in there for regular readers.
Transcoding with VAAPI decoding accelaration using VLC 2.0
I saw that vlc gets the decoded image back from the graphics cards when using hardware acceleration, e.g. VAAPI. So I thought this should also work as encoding accelerator, so the CPU only has to encode, not decode the video and cause at least some speedup, especially for large video files encoded into small files. I'm using the GMA500 poulsbo chipset for this test with 1,6 Ghz Atom(TM) CPU Z530.
Benchmarking VLC Encoding/Transcoding Speed
If you need to benchmark how fast vlc transcodes a certain file with certain settings, it's a bit tough. It doesn't seem to have any way to display the frames per second (fps) during encoding and no benchmark option as mplayer. A good way to work around this is to check how long it takes vlc to encode a certain file for a few seconds, e.g.
time vlc --stop-time 25 (...) vlc://quit.
e.g. time vlc --stop-time 25 /D/MVI_6615.MOV --sout "#transcode{width=384,height=288,vcodec=h264,acodec=vorbis}:standard{access=file,mux=mkv,dst=test.mkv}}" --sout-x264-crf=24 --sout-transcode-threads=2 vlc://quit
This encodes for 25 seconds and then quits and displays the time it took. Make sure to have vlc://quit at the very end of the command line and after your input file. The "user" value is what matters, this shows how long it kept the cpu occupied. Of course this only works on Unix systems. Also be aware that the second time the input file comes from cache, so only use the values from the second or later encodings for comparison.
time vlc --stop-time 25 (...) vlc://quit.
e.g. time vlc --stop-time 25 /D/MVI_6615.MOV --sout "#transcode{width=384,height=288,vcodec=h264,acodec=vorbis}:standard{access=file,mux=mkv,dst=test.mkv}}" --sout-x264-crf=24 --sout-transcode-threads=2 vlc://quit
This encodes for 25 seconds and then quits and displays the time it took. Make sure to have vlc://quit at the very end of the command line and after your input file. The "user" value is what matters, this shows how long it kept the cpu occupied. Of course this only works on Unix systems. Also be aware that the second time the input file comes from cache, so only use the values from the second or later encodings for comparison.
Create Side by Side or Top-Bottom 3D Video With ffmpeg and Imagemagick or Mencoder by Converting Alternate-Frame Sequencing 3D Video
These are some commands for top-bottom or side-by-side 3D video transcoding with mencoder or ffmpeg and imagemagick.
Youtube complains of a lack of local storage? Try this...
It seems youtube would really like you to (aka forces you to) enable enable flash storage for third parties and enable at least 10 kg storage for everybody by default. This is most certainly not a technical necessity, but to make advertizing work better. Otherwise you can't save your youtube 3d settings. But once you've saved your 3d settings, you can switch third party storage back off. ;)
Fixing USB Playback Issues for Video Files on LG, Samsung and other TVs - e.g. "Invalid File" [updated 2017]
If your file won't play and the TV reports "Invalid file", the thumbnail is not created instead a one with a warning arrow, then your TV won't eat the file. Since this post gets a lot of hits and is easily found, I've updated the information a bit.
The problem is likely one of these issues:
1. unsupported video format (check the supported list, e.g. LG)
- especially note the restriction of 30 fps for FullHD
- video codecs are usually divx and h264 (up to profile 4.1), no GMC
- audio codecs are usually mp3, ac3, aac.
2. Badly muxed file or unsupported file type
3. Mkv with header compression
The problem is likely one of these issues:
1. unsupported video format (check the supported list, e.g. LG)
- especially note the restriction of 30 fps for FullHD
- video codecs are usually divx and h264 (up to profile 4.1), no GMC
- audio codecs are usually mp3, ac3, aac.
2. Badly muxed file or unsupported file type
3. Mkv with header compression
Converting Vobsub (.sub/.idx) to .srt in Linux
Mencoder rips the subtitles for you as I just posted. But what if you want a .srt file? The problem is that vobsub subtitles used in DVDs are made as images. This means you first need to convert the images back to text. That is usually done with the help of OCR. And not differently for subtitles. But there's already a special open source Linux program available for that purpose here.
XBMC with VAAPI on Poulsbo (Intel GMA500) or other VAAPI Systems
It's not possible directly right now due to limitations of the existing GMA 500 drivers (IEGD, PSB, ...) and probably other vaapi drivers. But if you have mplayer-vaapi running, it's really easy - because you can set up xbmc to use external players with XBMC 10.
Encoding Videos for Android
Yeah, I know I'm being lazy again, but hey, if someone else already did all the work. Check it out at Ubuntu here.
Which Software-Scaler Looks Best - Mencoder and FFmpeg settings
-There is an old but good test showing you all of mplayers software scalers and how they look in the same image, here. The numbers mean this, see the mplayer man page:
If you want to translate that into ffmpeg language, it looks like this:
Happy transcoding!
0 fast bilinear
1 bilinear
2 bicubic (gute Qualität) (Standard)
3 experimentell
4 nearest neighbour (schlechte Qualität)
5 area
6 luma bicubic / chroma bilinear
7 gauss
8 sincR
9 lanczos
10 natural bicubic spline
If you want to translate that into ffmpeg language, it looks like this:
fast_bilinearJust add on of the above to -sws_flags in ffmpeg.
bilinear
bicubic
experimental
neighbor
area
bicubic_bilinear
gauss
sinc
lanczos
Happy transcoding!
Uploading Videos to Picasaweb from Linux with GoogleCL
All you need to know really is that it works via googlecl. Once you've installed that, it's as easy as google picasa post --title "Albumname" path/to/video.avi. And Google webspace is cheap with 20 G for 5 $ a year - with full control over your privacy. (Better than facebook anyway.)
Ok, you may need to upgrade to a current python-gdata and remove your old config files: rm -r ~/.googlecl/ for it to work. But it does work!
Ok, you may need to upgrade to a current python-gdata and remove your old config files: rm -r ~/.googlecl/ for it to work. But it does work!
Backlight Finally Works - Generic Poulsbo GMA 500 Fix via ACPI Video Interface
The trick is to go into drivers/acpi/video.c and remove the part that disables the acpi handling if there is an intel opregion present. The patch looks like this:
You can compile the module by getting the sources of your running kernel, cding into the acpi directory (drivers/acpi), applying the acpi patch and then executing
Then just sudo insmod ./video.ko.
Alright, here's the more elaborate version by Joey Lee hopefully entering the kernel soon:
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 60ea984..ad8fc2d 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -2394,9 +2394,6 @@ static int __init acpi_video_init(void)
{
dmi_check_system(video_dmi_table);
- if (intel_opregion_present())
- return 0;
-
return acpi_video_register();
}
You can compile the module by getting the sources of your running kernel, cding into the acpi directory (drivers/acpi), applying the acpi patch and then executing
make -C /lib/modules/$(uname -r)/build M=$PWD video.ko
Then just sudo insmod ./video.ko.
Alright, here's the more elaborate version by Joey Lee hopefully entering the kernel soon:
---
drivers/acpi/video.c | 17 ++++++++++++++++-
include/linux/pci_ids.h | 1 +
2 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 9865d46..25a70e0 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -88,6 +88,11 @@ static int acpi_video_bus_add(struct acpi_device *device);
static int acpi_video_bus_remove(struct acpi_device *device, int type);
static void acpi_video_bus_notify(struct acpi_device *device, u32 event);
+static const struct pci_device_id intel_drm_blacklist[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SCH_VGA) },
+ { } /* Terminating entry */
+};
+
static const struct acpi_device_id video_device_ids[] = {
{ACPI_VIDEO_HID, 0},
{"", 0},
@@ -2531,8 +2536,11 @@ static int __init intel_opregion_present(void)
#if defined(CONFIG_DRM_I915) || defined(CONFIG_DRM_I915_MODULE)
struct pci_dev *dev = NULL;
u32 address;
+ int i;
+ bool in_blacklist;
for_each_pci_dev(dev) {
+ in_blacklist = 0;
if ((dev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
continue;
if (dev->vendor != PCI_VENDOR_ID_INTEL)
@@ -2540,7 +2548,14 @@ static int __init intel_opregion_present(void)
pci_read_config_dword(dev, 0xfc, &address);
if (!address)
continue;
- return 1;
+ for (i = 0; intel_drm_blacklist[i].device != 0; i++) {
+ if (dev->device == intel_drm_blacklist[i].device) {
+ in_blacklist = 1;
+ break;
+ }
+ }
+ if (!in_blacklist)
+ return 1;
}
#endif
return 0;
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 3bedcc1..78858b1 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2669,6 +2669,7 @@
#define PCI_DEVICE_ID_INTEL_82443GX_0 0x71a0
#define PCI_DEVICE_ID_INTEL_82443GX_2 0x71a2
#define PCI_DEVICE_ID_INTEL_82372FB_1 0x7601
+#define PCI_DEVICE_ID_INTEL_SCH_VGA 0x8108
#define PCI_DEVICE_ID_INTEL_SCH_LPC 0x8119
#define PCI_DEVICE_ID_INTEL_SCH_IDE 0x811a
#define PCI_DEVICE_ID_INTEL_82454GX 0x84c4
--
1.6.0.2
Backlight Control on MSI U110 Netbook
I've managed to get the backlight working roughly as well! All I needed to do was to load msi-laptop with the parameter force=1. The problem is that there is so far very little scaling, I can only set brightness to 0 (very dark) or 1-8 (all "very bright"). Check for updates to get it working well with KDE.
I've contacted the driver developers and I hope we can make some progress on the drivers soon.
I've contacted the driver developers and I hope we can make some progress on the drivers soon.
Setting Up VAAPI Hardware Accelerated Video Decoding for Ubuntu 10.04 (example Intel Poulsbo GMA 500)
(For the more detailed guide for Ubuntu 9.10, which works much better for me, including suspend to ram, see here.)
This is just a really, really short basic howto for setting up the poulsbo X driver and VAAPI video acceleration on Ubuntu 10.04. I will post more details later.
1. Install the poulsbo driver:
sudo add-apt-repository ppa:gma500/ppa
sudo add-apt-repository ppa:gma500/fix
sudo apt-get update
sudo apt-get install poulsbo-driver-3d
2. Set up the Xorg.conf:
3. Reboot, check it's all working.
VAAPI
4. Download the right mplayer version:
wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20100114.i686.tar.bz2
unp mplayer-vaapi*
5. Install the necessary libraries: (you can remove mplayer then, but it's the easiest method)
sudo apt-get install mplayer libgtop2-7
6. and play
mplayer -vo vaapi -va vaapi testfile.avi
If mplayer doesn't run because of missing libraries, this command will show which libraries are missing:
ldd mplayer-vaapi*/mplayer
Be quick, before the instructions change due to new repositories, libraries, etc... But don't everything to work flawlessly! My system doesn't even go into suspend, but crashes. Hence it can't come out of suspend, either. Backlight control still doesn't work for me. And I still have to do more testing on mplayer to see how smooth VAAPI actually is.
Theoretically, installing VLC 1.1.0 with VAAPI should be as easy as this:
sudo add-apt-repository ppa:c-korn/vlc && sudo apt-get update && sudo apt-get install vlc
But it didn't work out of the box for me and I didn't care about why. If you have hints, questions or - yes- comments, please post in the comments.
This is just a really, really short basic howto for setting up the poulsbo X driver and VAAPI video acceleration on Ubuntu 10.04. I will post more details later.
1. Install the poulsbo driver:
sudo add-apt-repository ppa:gma500/ppa
sudo add-apt-repository ppa:gma500/fix
sudo apt-get update
sudo apt-get install poulsbo-driver-3d
2. Set up the Xorg.conf:
Section "DRI"
Mode 0666
EndSection
Section "Device"
Identifier "GMA500"
Option "AccelMethod" "EXA"
Option "DRI" "on"
Option "MigrationHeuristic" "greedy"
Option "IgnoreACPI" "yes"
Driver "psb"
EndSection
3. Reboot, check it's all working.
VAAPI
4. Download the right mplayer version:
wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20100114.i686.tar.bz2
unp mplayer-vaapi*
5. Install the necessary libraries: (you can remove mplayer then, but it's the easiest method)
sudo apt-get install mplayer libgtop2-7
6. and play
mplayer -vo vaapi -va vaapi testfile.avi
If mplayer doesn't run because of missing libraries, this command will show which libraries are missing:
ldd mplayer-vaapi*/mplayer
Be quick, before the instructions change due to new repositories, libraries, etc... But don't everything to work flawlessly! My system doesn't even go into suspend, but crashes. Hence it can't come out of suspend, either. Backlight control still doesn't work for me. And I still have to do more testing on mplayer to see how smooth VAAPI actually is.
Theoretically, installing VLC 1.1.0 with VAAPI should be as easy as this:
sudo add-apt-repository ppa:c-korn/vlc && sudo apt-get update && sudo apt-get install vlc
But it didn't work out of the box for me and I didn't care about why. If you have hints, questions or - yes- comments, please post in the comments.
Fixing Mplayer's Terminal Abuse, esp. for KDE and Windows
Mplayer updates the information about the amounts of frames it displayed, the played time, the remaining time, etc. every single time it displays a *frame*. This is not only completely unnecessary, it can unnecessarily hog several percent of your CPU in many terminal implementations, especially in current KDE 4 and Windows. The higher the frame rate, the more wasted CPU power.
On my netbook, the difference is 10% CPUand more with a 25 frames per second video - that's as much and more than mplayer uses for a simple Xvid video. And it could easily make the difference between a well playing file and one that's glitchy. (The CPU time is occupied by konsole 4.3.2 though, not by mplayer itself.)
The only way out would be -quiet. But then you wouldn't know what's going on anymore at all. That's why I had written and submitted roughly the following patch to fix this behavior. Unfortunately even after I made all the requested corrections, it was never applied without any reasons provided, or were there?. So I decided to publish it here so people at least know about it. But it also means unless I can convince someone here, you will have to compile mplayer and apply the patch yourself.
There are many guides how to compile mplayer. Before you start the compilation process, just copy this following block into a file quiet.patch and then apply it inside the svn directory with "patch -p0 < quiet.patch", then compile mplayer normally. You can now use the parameter -quiet-time. A value of 1 means a status message no more often than every 100 milliseconds (0,1 seconds). I think a good value is 5. You will notice that e.g. konsole uses less CPU during playback now. Enjoy the power of open source and let me know how it works for you!
On my netbook, the difference is 10% CPUand more with a 25 frames per second video - that's as much and more than mplayer uses for a simple Xvid video. And it could easily make the difference between a well playing file and one that's glitchy. (The CPU time is occupied by konsole 4.3.2 though, not by mplayer itself.)
The only way out would be -quiet. But then you wouldn't know what's going on anymore at all. That's why I had written and submitted roughly the following patch to fix this behavior. Unfortunately even after I made all the requested corrections, it was never applied without any reasons provided, or were there?. So I decided to publish it here so people at least know about it. But it also means unless I can convince someone here, you will have to compile mplayer and apply the patch yourself.
There are many guides how to compile mplayer. Before you start the compilation process, just copy this following block into a file quiet.patch and then apply it inside the svn directory with "patch -p0 < quiet.patch", then compile mplayer normally. You can now use the parameter -quiet-time. A value of 1 means a status message no more often than every 100 milliseconds (0,1 seconds). I think a good value is 5. You will notice that e.g. konsole uses less CPU during playback now. Enjoy the power of open source and let me know how it works for you!
Index: DOCS/man/en/mplayer.1
===================================================================
--- DOCS/man/en/mplayer.1 (Revision 29324)
+++ DOCS/man/en/mplayer.1 (Arbeitskopie)
@@ -732,6 +732,12 @@
handle carriage return (i.e.\& \\r).
.
.TP
+.B "\-quiet-time\ "
+Reduce console output updates to n per tenth of a second.
+Values of 5 or more work around slow terminals.
+See \-quiet for more.
+.
+.TP
.B \-priority(Windows and OS/2 only)
Set process priority for MPlayer according to the predefined
priorities available under Windows and OS/2.
Index: mplayer.c
===================================================================
--- mplayer.c (Revision 29324)
+++ mplayer.c (Arbeitskopie)
@@ -81,6 +81,7 @@
int slave_mode=0;
int player_idle_mode=0;
int quiet=0;
+int quiet_time=0;
int enable_mouse_movements=0;
float start_volume = -1;
@@ -1936,6 +1937,11 @@
static void adjust_sync_and_print_status(int between_frames, float timing_error)
{
+ static unsigned last_status_update=0;
+ unsigned now=GetTimerMS();
+ if (quiet_time && now >= (last_status_update + quiet_time * 100))
+ last_status_update=now;
+
current_module="av_sync";
if(mpctx->sh_audio){
@@ -1987,6 +1993,7 @@
c_total+=x;
}
if(!quiet)
+ if (!quiet_time || (last_status_update == now))
print_status(a_pts - audio_delay, AV_delay, c_total);
}
@@ -1994,6 +2001,7 @@
// No audio:
if (!quiet)
+ if (!quiet_time || (last_status_update == now))
print_status(0, 0, 0);
}
}
Index: cfg-common-opts.h
===================================================================
--- cfg-common-opts.h (Revision 29324)
+++ cfg-common-opts.h (Arbeitskopie)
@@ -8,6 +8,7 @@
// ------------------------- common options --------------------
{"quiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"noquiet", &quiet, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
+ {"quiet-time", &quiet_time, CONF_TYPE_INT, CONF_RANGE, 0, 65536, NULL},
{"really-quiet", &verbose, CONF_TYPE_FLAG, CONF_GLOBAL|CONF_PRE_PARSE, 0, -10, NULL},
{"v", cfg_inc_verbose, CONF_TYPE_FUNC, CONF_GLOBAL|CONF_NOSAVE, 0, 0, NULL},
{"msglevel", msgl_config, CONF_TYPE_SUBCONFIG, CONF_GLOBAL, 0, 0, NULL},
Index: mencoder.c
===================================================================
--- mencoder.c (Revision 29324)
+++ mencoder.c (Arbeitskopie)
@@ -131,6 +131,7 @@
//void resync_audio_stream(sh_audio_t *sh_audio){}
int quiet=0;
+int quiet_time=0;
double video_time_usage=0;
double vout_time_usage=0;
double max_video_time_usage=0;
@@ -1420,8 +1421,14 @@
(int)demuxer->filepos,
(int)demuxer->movi_end);
#else
+ static unsigned last_status_update=0;
+ unsigned now=GetTimerMS();
+ if (quiet_time && now >= (last_status_update + quiet_time * 100))
+ last_status_update=now;
+
if(!quiet) {
if( mp_msg_test(MSGT_STATUSLINE,MSGL_V) ) {
+ if (!quiet_time || (last_status_update == now))
mp_msg(MSGT_STATUSLINE,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %3dfps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d] A/Vms %d/%d D/B/S %d/%d/%d \r",
mux_v->timer, decoded_frameno, (int)(p*100),
(t>1) ? (int)(decoded_frameno/t+0.5) : 0,
@@ -1434,6 +1441,7 @@
duplicatedframes, badframes, skippedframes
);
} else
+ if (!quiet_time || (last_status_update == now))
mp_msg(MSGT_STATUSLINE,MSGL_STATUS,"Pos:%6.1fs %6df (%2d%%) %5.2ffps Trem:%4dmin %3dmb A-V:%5.3f [%d:%d]\r",
mux_v->timer, decoded_frameno, (int)(p*100),
(t>1) ? (float)(decoded_frameno/t) : 0,
The Devil's in the Bitrate - A Crazy Detail about Recording FullHD Video with the Canon EOS 500D
Okay. So the Canon EOS 500D does create FullHD video. Well, alright, it's just with 20 fps. But that's actually not as bad as I had feared. Yes, there are no options whatsoever. That's kind of weird. And then there's this tiny details related to the options...
First I thought my computer was suddenly too slow for playing even 720p movies. Then I tried streaming them to my netbook with hardware accelerated video playback. And guess what: the excellent 18 Mbit/s I got on my wifi are not enough.
The photo camera uses a bitrate of over 20 Mbit/s (720p) and over 30 Mbit/s (1080p) for video recordings in AVCHD. That's significantly (at least +100%) more than e.g. the Panasonic HDC-SX1 uses for recording 50 interlaced fps with FullHD in the high quality setting. Either the encoding chip is not too good with compressing. Or they just locked the birate on freaking high to make it bothersome to record with the photo camera and keep out competition from their own video cameras.
Sometimes x264 gives spikes with e.g. 24 Mbit/s, so I think it's not just the bitrate being locked in. Maybe they could just not be bother to write a VBR video codec. And the sounds is uncompressed pcm. But of course with 30 Mbit/s, 0.7 Mbit/s sound doesn't matter much.
I recoded a 720p video (also over 20Mbit/s) with x264 and a CRF (quality) value of 23 (rather high):
It's kind of like the videos are recorded in a raw-like mode. The only thing is that you can't change it to normal compression. And yes, now I know why the camera records only 20 fps and not 25 or 30 in FullHD. Because otherwise it would probably use over 40 Mbit/s...
It actually sounds worse than it is. It just means you should probably have a nice script to recode your videos to a less crazy quality after getting them from the camera chip. The good thing is actually that the original quality is so high that the losses of transcoding should not be too high. And you should make sure your SD card can handle at least a steady 5 MByte/s writing per second if you want to record videos with your Canon SLR photo camera.
I'd love to hear about your experiences! Maybe it's only my camera that uses as much? But it definitely does.
First I thought my computer was suddenly too slow for playing even 720p movies. Then I tried streaming them to my netbook with hardware accelerated video playback. And guess what: the excellent 18 Mbit/s I got on my wifi are not enough.
The photo camera uses a bitrate of over 20 Mbit/s (720p) and over 30 Mbit/s (1080p) for video recordings in AVCHD. That's significantly (at least +100%) more than e.g. the Panasonic HDC-SX1 uses for recording 50 interlaced fps with FullHD in the high quality setting. Either the encoding chip is not too good with compressing. Or they just locked the birate on freaking high to make it bothersome to record with the photo camera and keep out competition from their own video cameras.
Sometimes x264 gives spikes with e.g. 24 Mbit/s, so I think it's not just the bitrate being locked in. Maybe they could just not be bother to write a VBR video codec. And the sounds is uncompressed pcm. But of course with 30 Mbit/s, 0.7 Mbit/s sound doesn't matter much.
I recoded a 720p video (also over 20Mbit/s) with x264 and a CRF (quality) value of 23 (rather high):
ffmpeg -i "$IN" -acodec libmp3lame -vcodec libx264 -vpre normal -crf 23 "$IN small.mov"The result: roughly 4 Mbit/s. 1/6th of the original data rate for as far as I can see the same quality. The file size usually goes down to 10-30% (!) of the original file.
It's kind of like the videos are recorded in a raw-like mode. The only thing is that you can't change it to normal compression. And yes, now I know why the camera records only 20 fps and not 25 or 30 in FullHD. Because otherwise it would probably use over 40 Mbit/s...
It actually sounds worse than it is. It just means you should probably have a nice script to recode your videos to a less crazy quality after getting them from the camera chip. The good thing is actually that the original quality is so high that the losses of transcoding should not be too high. And you should make sure your SD card can handle at least a steady 5 MByte/s writing per second if you want to record videos with your Canon SLR photo camera.
I'd love to hear about your experiences! Maybe it's only my camera that uses as much? But it definitely does.
Transcoding 50 fps Interlaced AVCHD to 50 fps Progressive x264 with MEncoder - Getting Every Last Drop of Quality out of your Interlaced AVCHD Recordings
Have you ever wondered how much quality your HD camera can deliver? This script helps you to find it out if you have a camera that encodes interlaced video. It uses special filters to calculate 50 whole frames out of the half frames, which makes motions seem extremely fluent. You could play the file at half speed slow motion and still have a full 25 frames per second.
You need a more or less recent version of mplayer. It should be a version of mplayer after the release of ffmpeg 0.5. Current repositories of current distributions should be able to deliver this. But be aware that not all of them provide an mencoder compiled to work properly with x264. If that's the case you may have to compile it yourself.
After that it's as "easy" as this command, once you've put it all together. I'll explain further below and post a sample script for the entire conversion. The result is extremely smoothly playing video files that look great.
This is the main part:
The demuxer parameter works around mplayer's transport stream implementation, which does not work well with AVCHD files. It tells mplayer to trust ffmpeg's libavformat instead. This makes a huge difference for me. With this command I can play AVCHD files and transcode them in sync without problems and serious glitches.
The fps and yadif part was tricky. It creates 50 full progressive frames out of the 25 interlaced frames it gets from the camera. I had sync problems at first, but I found the solution somewhere in the mplayer mailing list I think. I'm not sure why you have to take twice the framerate of the AVCHD file, but only this way it works. Of course, if you camera is not PAL, you may have to change this to double your framerate. Otherwise I had the sound playing half as fast as the video with the consequence of constant frame skips and no sync at all.
Now let's put it all together into a little please-do-it-all-for-me script:
Let me know how it worked for you! Or if you have an idea how to improve the script. Try skipping frame for frame with the "." button in mplayer. Be aware that the file size of the resulting video may easily be bigger than the input. That's because you're creating full frames out of half ones, and storing them takes more space.
Check out a Squirrel in HD slow motion produced with this script and then "mencoder -speed 0.5 -af scaletempo -oac lavc -lavcopts acodec=ac3 -ovc copy" and uploaded in FullHD (but available only in 720p currently):
You need a more or less recent version of mplayer. It should be a version of mplayer after the release of ffmpeg 0.5. Current repositories of current distributions should be able to deliver this. But be aware that not all of them provide an mencoder compiled to work properly with x264. If that's the case you may have to compile it yourself.
After that it's as "easy" as this command, once you've put it all together. I'll explain further below and post a sample script for the entire conversion. The result is extremely smoothly playing video files that look great.
This is the main part:
mencoder -demuxer lavf -sws 9 -fps 100 -vf yadif=1,mcdeint,softskip -ofps 50
The demuxer parameter works around mplayer's transport stream implementation, which does not work well with AVCHD files. It tells mplayer to trust ffmpeg's libavformat instead. This makes a huge difference for me. With this command I can play AVCHD files and transcode them in sync without problems and serious glitches.
The fps and yadif part was tricky. It creates 50 full progressive frames out of the 25 interlaced frames it gets from the camera. I had sync problems at first, but I found the solution somewhere in the mplayer mailing list I think. I'm not sure why you have to take twice the framerate of the AVCHD file, but only this way it works. Of course, if you camera is not PAL, you may have to change this to double your framerate. Otherwise I had the sound playing half as fast as the video with the consequence of constant frame skips and no sync at all.
Now let's put it all together into a little please-do-it-all-for-me script:
#!/bin/sh
# High Quality Mencoder AVCHD Transcoding Script, (c) 2010 linux-tipps.blogspot.com, published under the GNU GPL v. 3.0
# Settings
CRF=26 # 18-26, the higher the smaller the resulting file, HD files can stand a higher than SD
FPS=50 # input fps of your file, "mplayer -demuxer lavf -identify" helps you with finding this
X264OPTS="" # add subq=6 frameref=6 for higher quality per bit but lower encoding rate.
# Preparation
INPUT="$1"; shift
OUT=$(basename "$INPUT"|sed 's/.m2ts//')"-x264.avi"
echo Mencoder Interlaced AVCHD to Progressive x264 Script, published under the GPL v. 3.0 \(http://www.gnu.org/licenses/gpl-3.0.txt\), check for the newest version of this script at http://linux-tipps.blogspot.com/2010/01/transcoding-50-fps-interlaced-avchd-to.html.
echo $0 Encoding $INPUT to $OUT using the following command line:
[ -f "$OUT" ] && echo File exists - aborting && exit 1;
# Encoding
mencoder="time nice mencoder -cache 8096 -demuxer lavf -sws 9 -fps $((FPS*2)) -vf yadif=1,mcdeint,softskip -ofps $FPS"
enc="$mencoder -ovc x264 -oac copy -x264encopts crf=$CRF:trellis=1:threads=0:ratetol=inf:frameref=2:bframes=2:8x8dct:ssim:psnr:$X264OPTS"
echo $enc -o "$OUT" "$INPUT" $*
$enc -o "$OUT" "$INPUT" $*
Just run the script and give a .m2ts file as parameter. E.g.
sh avchd-mencode 000001.m2ts # or for all m2ts file in the current directory:
for i in ./*.m2ts; do sh avchd-mencode "$i"; done;
Let me know how it worked for you! Or if you have an idea how to improve the script. Try skipping frame for frame with the "." button in mplayer. Be aware that the file size of the resulting video may easily be bigger than the input. That's because you're creating full frames out of half ones, and storing them takes more space.
Check out a Squirrel in HD slow motion produced with this script and then "mencoder -speed 0.5 -af scaletempo -oac lavc -lavcopts acodec=ac3 -ovc copy" and uploaded in FullHD (but available only in 720p currently):
Using SMPlayer with hardware video acceleration such as VAAPI - Fixing various crashes etc. with VAAPI
If you've also tried to use VAAPI with SMplayer, you may also have experienced the crash every single time you try to watch anything. These things might also apply to VDPAU and xvmc.
Here's the solution
1. Disable screenshots:
General -> General -> Enable Screenshots [ ] (uncheck)
2. Set to single thread decoding:
Performance -> Performance -> Threads ... [1]
3. Disable subtitles and postprocessing.
2. Set to single thread decoding:
Performance -> Performance -> Threads ... [1]
3. Disable subtitles and postprocessing.
Here's what doesn't help:
Upgrading to the current version 0.6.8.
If you want to know how to get VAAPI working SMPlayer in the first place: Select
General -> Video -> Output Driver -> Custom -> "vaapi,xv," and
Advanced -> Options for Mplayer -> Options -> "-va vaapi".
Let me know if it worked for you. Someone should probably inform the author of smplayer and/or mplayer. Excellent programs!
How to set up X and VAAPI Accelerated HD Video on the MSI Wind U110 (GMA500 - Poulsbo) and Ubuntu Karmic 9.10
The following guide is now slightly outdated as Ubuntu 10.04 is out and new drivers are necessary, also some of the repositories I originally used have disappeared. If you use Ubuntu 10.04, try following my much easier directions here instead. (The largest detriment to the Ubuntu 9.10 driver is a complete lack of suspend to ram for me. I will leave my guide for 9.10 online as reference, though. It seems to have been the first good description and I'm happy about the major online media coverage. :)
I've finally managed to get it running. Here is what I did. First you need to get Ubuntu 9.10 running with poulsbo. The first steps 1.-4. describe how to set up the driver for X. The second part (5.-10.) describes how to set up VAAPI and mplayer to get video acceleration. (There is already an early stage GMA500 driver for Ubuntu 10.04.)
The image shows the phoronix test suite benchmarking when I play Grey.ts in a loop (-loop 0) with mplayer and vaapi but without sound (-nosound) on my netbook. During the entire time, the CPU frequency is also downscaled to 800 Mhz. Compare to phoronix vdpau benchmark on a core 2 duo system (which obviously shows even less cpu usage, because the CPU is much more powerful) or the Atom and Nvidia ION benchmark on Phoronix.
The only real problem is with suspend to ram. You can't use suspend to ram or VAAPI at the same time: If you used VAAPI and try to suspend, the system doesn't suspend and/or crashes. If you suspend, then use VAAPI or even xv I think, the system crashes really hard. So suspend doesn't really work as expected yet. I think the sound also doesn't work properly after suspend. Suspend works fine for me even after resume if I do a double console switch (Ctrl-Alt-F1 wait until you see the console, then Ctrl-Alt-F7).
VAAPI Video Acceleration setup
I've finally managed to get it running. Here is what I did. First you need to get Ubuntu 9.10 running with poulsbo. The first steps 1.-4. describe how to set up the driver for X. The second part (5.-10.) describes how to set up VAAPI and mplayer to get video acceleration. (There is already an early stage GMA500 driver for Ubuntu 10.04.)
The image shows the phoronix test suite benchmarking when I play Grey.ts in a loop (-loop 0) with mplayer and vaapi but without sound (-nosound) on my netbook. During the entire time, the CPU frequency is also downscaled to 800 Mhz. Compare to phoronix vdpau benchmark on a core 2 duo system (which obviously shows even less cpu usage, because the CPU is much more powerful) or the Atom and Nvidia ION benchmark on Phoronix.
CPU usage when playing a 10 minute fireworks recording in 1080p @ 50 fps without sound and then two FullHD movie trailers. The CPU is clocked at 800Mhz the entire time. The spike is caused by a bug in my test sequence: I didn't start a new mplayer process for new files but passed them all at once on the command line.
I can watch FullHD (1080p @ 50 fps + AC3) videos with about 30% or less CPU utilization (Atom@800 Mhz) on my netbook now. Looks really nice, too. Some videos produce artefacts, especially self-recorded AVCHD m2ts files. If you use the right demuxer, AVCHD videos play fine, but deinterlacing does not work. Sometimes the video seems not to run very smooth, etc. It's not perfect yet, don't expect too much! But most videos work perfectly, no matter what resolution.
Here's what you need to do
1. Basically you add the GMA500 Repositories for Ubuntu 9.10 (karmic) and 10.04 (Lucid) to /etc/apt/sources.list.d/mobile.list. (If the entry below doesn't work, check this page.)
sudo add-apt-repository ppa:gma500/ppa && sudo apt-get update
2. Then you install the poulsbo-driver-3d including the firmware and everything.
2.a. Check if you can load the psb module: sudo modprobe psb. If you see this in dmesg instead of a switch to the correct resolution,
2.a. Check if you can load the psb module: sudo modprobe psb. If you see this in dmesg instead of a switch to the correct resolution,
"kernel BUG: unable to handle kernel NULL pointer dereference at (null)" (2.6.31)
you need a manual hack to get the driver working, as I just reported.
3. Once that's done, for a more stable and speedy operation, you need to add an /etc/X11/xorg.conf:
Section "Device"Identifier "GMA500"Option "AccelMethod" "EXA"# someone suggested UXA? but that's for the i965 driversOption "DRI" "on"Option "MigrationHeuristic" "greedy"Option "IgnoreACPI" "yes"Driver "psb"EndSection
Section "DRI"Mode 0666EndSection
4. Reboot and make sure that it works! If X doesn't work properly yet, VAAPI won't, either. After a short black screen, you should be greeted in the correct resolution. Full screen xv video should already work fine. Suspend to RAM also worked perfectly at this point for me.
If the system goes to DPMS standby and from there switches to other modes (DPMS suspend, etc.), then my screen actually turns on again (showing all black with backlight active). So make sure you chose only one setting for DPMS. A constantly running screen is not good at all.
If the system goes to DPMS standby and from there switches to other modes (DPMS suspend, etc.), then my screen actually turns on again (showing all black with backlight active). So make sure you chose only one setting for DPMS. A constantly running screen is not good at all.
VAAPI Video Acceleration setup
Now comes the part where we install the hardware decoding acceleration. If you just want X you can stop now. ;) This is written for Ubuntu 9.10 with old repositories, so 5+6 might not be necessary anymore or work for Ubuntu 10.04!
5. Install the Libva library from http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1_0.31.0-1+sds8_i386.deb. This replaces your current libva1 with a newer version. also works for me. Don't forget to install the -dev version (http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva-dev_0.31.0-1+sds8_i386.deb) as well if you want to compile mplayer later.
wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1_0.31.0-1+sds8_i386.deb
http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva-dev_0.31.0-1+sds8_i386.deb&& sudo dpkg -i libva1_0.31.0*i386.deb
6. Create a link of your video driver to the vaapi driver directory:
sudo ln -s /usr/X11R6/lib/modules/dri/psb_drv_video.so /usr/lib/va/drivers/
A. Precompiled setup. (You can alternatively skip to part B: compiling the source code setup)
7. Download and unpack the precompiled mplayer:
8. Install a normal mplayer and libmad with apt-get.
sudo apt-get install mplayer libmad0
9. Unpack mplayer and create necessary links to the libraries it expects.
"ldd mplayer" tells you what library (names) mplayer expects.
Just to go /usr/lib and create links to them:
e.g
ln -s libx264.so.67 libx264.so.65
This should work as long as your libraries are newer than the expected ones. It may actually work out of the box in Ubuntu Jaunty.
10. Start mplayer from the package you downloaded:
e.g. ~/mplayer-vaapi-20090914.i686/mplayer -fs -vo vaapi -va vaapi HDtest.avi
B. Compiling the Source Code
I've also manged to get the source code to work. This is less bothersome, because you need not link the libaries. Hence less man hours, but more disk space and computer hours for compiling. Didn't take as long as I feared, though. And it's using a slightly newer version of mplayer-vaapi, which includes some rudimentary OSD in vaapi mode now.
7. Install the build environment:
sudo apt-get build-dep mplayersudo apt-get install libdrm-devwget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva-dev_0.31.0-1+sds8_i386.deb && sudo dpkg -i libva-dev_0.31.0-1+sds8_i386.debmaybe: sudo apt-get -f install
8. Download the source at http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20091106-FULL.tar.bz2. Unpack it and execute the checkout-patch-build.sh.
9. Check if it works, e.g.
mplayer -fs -vo vaapi -va vaapi ~/HDtest.avi
10.
sudo make install.
X. Done! Enjoy e.g. a nice HD trailer for a start! Post your results! I can recommend using it in smplayer for more comfort(e.g. automatically continue where you left of last). If it crashed, check out by blog entry about smplayer crashing in vaapi mode.
Update: It turns out deinterlacing not working is not due to VAAPI, but a limit in the psb driver. It works with the current iegd driver and other drivers from AMD and NVIDIA (press the D putton in mplayer I think). If I could just get one of those iegd drivers... Thanks Gwenole from splitted-desktop.com for answering my email and of course for writing the mplayer-vaapi patches in the first place! He seems to be the absolute VAAPI expert.
Also some experiments show that I can attach an external screen and watch videos with VAAPI on it. That means I should be able to actually use the netbook for decoding HD video and displaying it on an external screen. (But it does not work for me with except in mirror or single display mode.) Only thing missing now is a digital display port to connect a FullHD display... ;)
You might also be interested in Surround Sound and Battery Life
And I did get a USB surround sound card working wonderfully now. Also here's some advice I wrote on decreasing your power consumption.
Update: It turns out deinterlacing not working is not due to VAAPI, but a limit in the psb driver. It works with the current iegd driver and other drivers from AMD and NVIDIA (press the D putton in mplayer I think). If I could just get one of those iegd drivers... Thanks Gwenole from splitted-desktop.com for answering my email and of course for writing the mplayer-vaapi patches in the first place! He seems to be the absolute VAAPI expert.
Also some experiments show that I can attach an external screen and watch videos with VAAPI on it. That means I should be able to actually use the netbook for decoding HD video and displaying it on an external screen. (But it does not work for me with except in mirror or single display mode.) Only thing missing now is a digital display port to connect a FullHD display... ;)
You might also be interested in Surround Sound and Battery Life
And I did get a USB surround sound card working wonderfully now. Also here's some advice I wrote on decreasing your power consumption.
X Video finally works - Poulsbo and Linux on the MSI Wind U110 - Fix for BUG: kernel NULL pointer dereference at 00000000
If you tried to get poulsbo to run on your system and you get a message like this, you should try the fix posted below.
"kernel BUG: unable to handle kernel NULL pointer dereference at 00000000" (2.6.28)
"kernel BUG: unable to handle kernel NULL pointer dereference at (null)" (2.6.31)
if (edid)
....
e.g.
/* if (edid)
drm_add_edid_modes(output, edid); */
Then reconfigure the package and it should be recompiled. The next time you start it, it should work instead of creating kernel BUG
Update:
Xvideo actually works better than in Directx video in Windows XP, where I often see blocky video scaling. The CPU usage is not too high, either. Currently it's only working under Ubuntu 9.04 for me. Though I had managed to compile the module with kernel 2.6.30 before, I don't remember how I did that... And I haven't gotten actual video acceleration to work yet.
Of course I'll keep you updated and I'll post a little howto once it's all working. But feel free to ask, anyway. And thanks so much to the person from the Ubuntu bugzilla who helped me to finally get it all working!!!
Update2: Keep checking the page. I will post a link to an archive with a script that will manage the compilation in Ubuntu 9.10. If someone could help me figure out how to, I'd love to create, upload and post a .deb for dkms so it all works automatically... Or ultimately, we could modify the driver to check for the MSI's signature and then skip the edid check.
I've created a package for Karmic that you can use to manually install the driver with the fix already applied: http://www.megaupload.com/?d=BB23R7K2. Extract it and execute the script make_psb.sh, then reboot and try to modprobe psb. Let me know when the 10 downloads run out and it it works for you.
Update3: Here is a step by step howto. It explains setting up X and then VAAPI (hardware video decoding) in Kubuntu 9.10.
My script for making the psb module out of the package:
My script for making the psb module out of the package:
KERNEL=/lib/modules/`uname -r`/
make KERNELRELEASE="$(uname -r)" LINUXDIR="/lib/modules/$(uname -r)/build" DRM_MODULES=psb || exit 1;
sudo cp drm.ko $KERNEL/kernel/drivers/gpu/drm/drm.ko
sudo mkdir -p $KERNEL/updates/dkms
sudo cp psb.ko $KERNEL/updates/dkms/psb.ko
ls -l $KERNEL/kernel/drivers/gpu/drm/drm.ko $KERNEL/updates/dkms/psb.ko
sudo depmod -a
Subscribe to:
Posts (Atom)

