Youtube movie as dynamic GNOME wallpaper
GNOME has support for dynamic wallpapers based, but if you want it to be really dynamic you will need a lot of images. To make it easier, I decided to turn to Best of the Web HD (there is also a version two and three).
First run youtube-dl on the video you want to download:
youtube-dl --format 45 'http://www.youtube.com/watch?v=TXdsqWqR4ro'
I selected the best format I could think of from the format list you can get when you run youtube-dl --list-formats
.
Now, let's split up the video into separate frames:
gst-launch filesrc location=TXdsqWqR4ro.webm ! decodebin ! \
videorate ! video/x-raw-yuv,framerate=1/4 ! \
jpegenc ! multifilesink location=img%d.jpg
The important part of this pipeline is the videorate plugin with a framerate of one fourth, which makes sure you don't dump every frame but one in four.
Now that we have a directory full of files, we can start doing some Haskell:
#!/usr/bin/runghc
import System.Directory
import Data.List
import System.FilePath
imageFileSuffixes = [".jpg", ".png"]
isImageFileName :: String -> Bool
isImageFileName name = any (flip isSuffixOf name) imageFileSuffixes
imageFiles candidates = filter isImageFileName candidates
backgroundEntry path = "<static><duration>300</duration><file>"
++ path
++ "</file></static>"
backgroundXml files = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<background>"
++ (concat (map backgroundEntry files))
++ "</background>"
main = do
cwd <- getCurrentDirectory
relativePaths <- getDirectoryContents cwd
let paths = map (combine cwd) relativePaths
putStrLn (backgroundXml (imageFiles paths))
If you save this file as gen.hs and make it executable (chmod u+x gen.hs
) you can generate
the background xml using ./gen.hs > best_of_web_hd.xml
. If you get an error like
bash: ./gen.hs: /usr/bin/runghc: bad interpreter: No such file or directory
you should install ghc
.
This gives us an XML file with the absolute path of each image. Now the last part of the puzzle to get it to work on Ubuntu GNOME remix 12.10:
gsettings set org.gnome.desktop.background picture-uri 'file://path/to/best_of_web_hd.xml'
I think you should also be able to use the normal background selector, but I could not get the GNOME Shell wallpaper selector to see anything other than images.
See also
Some other posts, doing the same kind of thing:
Another cool video to use is beautiful nature scenery HD.