SVTPlay från terminalen

Tänkte bara kort meddela att jag kluddat ihop ett skript som fixar biffen med SVTPlay och deras fasoner. Det ska vara Bourne-kompatibelt, vilket innebär att alla BSD-, Linux- och Solaris-användare gläds. Hur det är på Mac vet jag däremot inte.

6 mars: Skriptet underhålls numera på den här sidan.

Ladda hem från SVTPlay (v. 2)

OBS!

SVT lanserade en ny sajt i juni 2012. Guiden går inte längre att använda.

Min tidigare guide används fortfarande, meddelar besökarstatistiken. Men den är litet utdaterad. Här är en ny upplaga, som utökats med bland annat instruktioner för live-strömmar, samt tack vare Martin Adlerborn även Windows.

Det här behöver du

  1. RTMPDump eller FLVstreamer. FLVstreamer kan inte hantera alla filmströmmar, utan rekommenderas endast till GNU-puritaner.
  2. MPlayer, VLC eller någon annan kapabel mediaspelare. VLC rekommenderas till Windows-användare. Du kan skippa mediaspelare om du bara vill ladda hem. (Jag vet inte i vilka versioner av Windows Media Player som filerna man får hem faktiskt fungerar. Vissa lär fungera utmärkt, andra mera tveksamt.)
  3. Vissa Windows-versioner: I en del versioner behövs OpenSSL-bibliotek (tror jag) för att köra RTMPDump. Du kan installera dem härifrån. Det finns flera installationer på den sidan. Du ska ha Win32 OpenSSL v1.0.0d Light (alltså den som beskrivs som "recommended for brave users by the creators of OpenSSL"). Se noga till att du under installationen installerar till system-katalogerna, och inte till "/bin". Du kan även behöva installera Visual C++ 2008 Redistributables. (Tack till Alex för insikten att de här biblioteken kan behövas.)

Om du använder Windows, så rekommenderar jag att du skapar en mapp på skrivbordet som du döper till SVTPlay. I den lägger du filerna som följde med RTMPDump.

Observera att du ska flytta filerna ur rtmpdump-mappen, så att de allesammans ligger direkt i mappen SVTPlay. (Mera exakt så behöver du bara filen rtmpdump.exe.)

Du ska alltså inte flytta själva rtmpdump-mappen. Den kan du ta bort istället.

Så här gör du

  1. Surfa först in på SVTPlay.se, och därefter fram till filmen du vill ladda hem.
  2. När du surfat till rätt film, kopiera rtmp-adressen ur sidans källkod. Alternativet Visa källkod brukar finnas på Visa-menyn eller när man högerklickar på sidan. [bild]
  3. Om länken börjar med http:// så klistrar du in den i webbläsarens adressfält och trycker på retur. Sedan är du färdig.
  4. Annars: Öppna ett terminalfönster.
    I Windows kör man cmd.exe från startmenyn. [ett, två]
  5. Endast Windows: Ta dig till din nya SVTPlay-mapp. [bild]
    • Svenskt Windows: cd Skrivbord\STVPlay
    • Engelskt Windows: cd Desktop\SVTPlay
    Ni andra: Jag tror ni vet hur man gör.
  6. Nu är det dags att tanka. Adressen du kopierade förut, den ska du klistra in där det står ADRESS nedan. Så här tankar du i Windows:

    rtmpdump.exe -o "Filnamn".flv -r "ADRESS"

    Så här tankar vi andra:

    rtmpdump -o "Filnamn.flv" -r "ADRESS"

    Om det handlar om en live-ström så lägger man till -v på slutet. Annars låter man bli.
  7. När man försöker ladda hem ett fåtal program, kan det hända att man drabbas av följande felmeddelande:

    ERROR: HandleCtrl: Ignoring SWFVerification request, use --swfVfy!

    Sedan avbryts nedladdningen efter bara några enstaka procent. Om detta drabbar dig, så löser du det, åtminstone just nu, genom att lägga till parametern -W http://svtplay.se/flash/svtplayer-2011.13.swf på slutet av kommandot. Observera att år och version i den adressen förändras över tid. Vilken adress som faktiskt ska användas kan du lista ut så här.

Själva nedladdningen

Nu laddas filmen hem. Om den stannar tidigare än 99% så måste du bråka, förutsatt att du behöver den sista stumpen. Kör i så fall exakt samma kommando en gång till, men lägg till -e på slutet. Nedladdningen kommer att fortsätta där den stannade.

Observera att RTMPDump oftast börjar räkna från 0% när man återupptar en nedladdning på det viset. Lägg samman procentsatsen från det avbrutna nedladdningsförsöket med procentsatsen i det nya, så ser du hur mycket du hämtat hittills.

Så snart filmen är färdigtankad kan du spela upp den i alla mp4-kapabla spelare. Om du använt Windows för att ladda hem så ligger filmen i SVTPlay-mappen du skapade tidigare.

Teknikaliteter i MPlayer

Filmer som laddats ned i flera omgångar kan bli struliga att spola i. Spelar du upp med MPlayer så kan parametern -forceidx hjälpa.

Vill du spela upp en film med MPlayer samtidigt som du tankar, använd -nocache.

Du kan även ta bort »inbyggda« svarta ramar, vilket är bekvämt om man vill köra riktig fullskärm. Spela sålunda:

$ mplayer -vf cropdetect filnamn.flv
(Massor av text när MPlayer startar och analyserar filen.)
.
.
.
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%

Spola helst fram till något ljust parti av filmen, och avbryt uppspelningen där. Nu har MPlayer automatiskt känt av vilket kommando som tar bort de svarta ramarna.

Spela upp filmen igen, den här gången med parametern som MPlayer berättat att du ska använda:

$ mplayer -vf crop=-624:-352:634:358 filnamn.flv

Nu ska ramarna vara borta. Om för mycket av bilden skalats bort, så beror det på att MPlayer inte fick tillräckligt bra data att arbeta med under det förra steget. Det är ditt eget fel: Du skulle ju spola fram till ett ljust parti, sa jag. :-)

Annat nämnvärt

En diskussion kring hur man kan ladda hem från bland annat TV6Play står att läsa här. Ofta när man försöker ladda hem filmer från olika Flash-sajter så kan skriptet get_flash_videos vara en intressant hjälpreda, eller ibland till och med en komplett lösning.

Vill du koda om din nedladdade film så att den passar bra att spela upp på en Android eller iPhone, så har jag skrivit här om det.

Det var det hela. Fråga eller säg ifrån om något är oklart eller fel. Jag uppdaterar gärna inlägget när det behövs.

Ladda hem från Youtube

Tidigare har jag berättat hur man kan ladda hem från SVTPlay, och nu är det dags för Youtube. Jag tänker även berätta hur du kan göra för att konvertera en video till en ljudfil, genom att helt sonika lyfta över det i en egen fil.

Precis som tidigare, så är anledningen till att jag själv gör så här att jag kör ett 64-bitars OpenBSD, och då går det inte att använda Flash. Youtube kommer framöver att gå över till HTML5, och då slipper jag det här krånglet. Du kan pröva deras testversion detta här.

Det absolut enklaste sättet att tanka hem Youtube-videor är att använda sajten KeepVid.com. Det gör du så här:

  1. Gå till videon på Youtube.
  2. Kopiera adressen ur adressfältet.
  3. Klistra in adressen på KeepVid.com och klicka på Download-knappen.
  4. Högerklicka på länken som visas och välj Spara som…

Men detta fungerar inte felfritt! Dessutom är det skönt att kunna genomföra samma grej från ett terminalfönster eller i ett script, åtminstone för mig. Nu kommer jag först att berätta hur du laddar hem en video på det viset, och sedan hur man kan göra för att automatisera litet grand.

Ladda hem videon

Du behöver programmet youtube-dl, som i själva verket är ett Python-script. Se alltså till att ha Python installerat.

Windowsbrukare kan också använda det, och lätt övermäktiga instruktioner för hur scriptet kan installeras finns här.

På *nix-system måste youtube-dl.py dessutom vara körbar. Eftersom det är bra att hålla ordning på sin hemkatalog, så lägger vi scriptet i mappen ~/bin.

$ chmod +x youtube-dl.py
$ mkdir ~/bin
$ mv youtube-dl.py ~/bin/

Nu kollar vi att den går att köra:

$ youtube-dl.py
ksh: youtube-dl.py: not found

Hoppsan! Händer detta mumlar du följande trollformel, så är problemet omedelbart löst på obestämd tid.

$ echo 'export PATH=$PATH:$HOME/bin' >> .profile; export PATH=$PATH:$HOME/bin

Du kan även få permission denied när du kör filen. Lösningen är att köra scriptet så här istället:

$ python ~/bin/youtube-dl.py

Resten är lätt. Surfa till Youtube-sidan med videon, kopiera adressen, och kör scriptet med den enligt följande:

$ youtube-dl.py -bt "http://www.youtube.com/watch?v=yek2D4Kjwgc"

Glöm inte citat-tecknen! Eller snarare: Om du inte vet när de egentligen behövs, så använd dem alltid. (Just här behövs de egentligen inte.)

Youtube på volley

Har man inte Flash kan man inte se videon i webbläsaren. Om man bara vill slå en flukt på videon men inte tanka hem den, är det omständigt att behöva ladda hem den först.

Då kan man använda sig av samma lösning för nedladdning som ovan, men fånga videon »i luften« och spela upp den direkt istället! Så här skapar du ett script som fixar biffen:

Ersätt "mplayer" med kommandot för den mediaspelare du föredrar.

Nu kan du spela upp videor direkt, busenkelt:

$ youtube.sh http://www.youtube.com/watch?v=yek2D4Kjwgc

Scriptet kan spela upp flera videor på rad om du klistrar in adresserna efter varandra.

Hur du plockar loss ljudet

Först och främst ska du se till att du har FFmpeg installerat.

Sedan måste du bestämma om du vill ha en mp3-fil eller en m4a-fil. Vill du ha ljudet i mp3-format, börja med att tanka hem videon så här:

$ youtube-dl.py -o dummy.flv http://www.youtube.com/watch?v=yek2D4Kjwgc

När nedladdningen är färdig så plockar du loss ljudspåret enligt det följande:

$ ffmpeg -vn -acodec copy -i dummy.flv ljudfil.mp3

Strax har du en fil som heter ljudfil.mp3.

Vill du istället ha ljudet i m4a-format, får du ändra parametrarna något.

$ youtube-dl.py -bo dummy.mp4 http://www.youtube.com/watch?v=yek2D4Kjwgc
$ ffmpeg -vn -acodec copy -i dummy.mp4 ljudfil.m4a

Och det var faktiskt det hela.

Ladda hem från SVTPlay

OBS!

SVT lanserade en ny sajt i juni 2012. Guiden går inte längre att använda.

Visste du att du med SVTPlay kan ladda hem program och spara dem på hårddisken? Jodå! Samma teknik går att använda för att se på programmen utan att ha installerat Flash, vilket jag själv inte har. Flash går nämligen inte att köra på ett 64-bitars OpenBSD.

För att kunna följa guiden här behöver du ett program som heter rtmpdump. Det finns inte bara till BSD- och Linux-system, utan även till Windows (och då ska du tanka hem zip-filen med en »Windows build«). Tyvärr kan jag inte bistå med några Windows-specifika instruktioner, men om någon kan bidra med detta vore jag glad.

Du behöver givetvis också en mediaspelare, och den jag använder i guiden är MPlayer.

Då sätter vi igång! Se till att du har programmen installerade och öppna ett terminalfönster.

Först och främst behöver du en länk till rtmp- eller rtmpe-strömmen för programmet. Detta gör du genom att högerklicka på länken för extern Flash-spelare och kopiera adressen:

Flash (rtmp)

Sedan kör du rtmpdump på denna, och klistrar in adressen istället för ADRESS nedan.

$ rtmpdump -o filnamn.flv -r "ADRESS"

Citattecknena bör vara med. För tillfället behövs de inte på SVTPlay-adresser, men det kan komma att förändras.

Nu är nedladdningen igång! Ibland når den inte ända fram till 100% utan stannar på 99,9%. Det gör inget.

Om den däremot stannar tidigare så kan du återuppta nedladdningen som följer:

$ rtmpdump -o filnamn.flv -r "ADRESS" --resume

När du laddat hem programmet kan det hända att det har »inbyggda« svarta ramar. Om du kör programmet i fullskärm blir resultatet irriterande litet. För att verkligen få fullskärm kan du ta bort ramarna genom följande procedur:

$ mplayer -vf cropdetect filnamn.flv
(Massor av text när MPlayer startar och analyserar filen.)
.
.
.
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%
[CROP] Crop area: X: 639..0  Y: 359..0  (-vf crop=-624:-352:634:358).%

Nu har MPlayer automatiskt känt av vilket kommando som tar bort de svarta ramarna. Avbryt uppspelningen, och spela upp filmen ånyo med den parameter som MPlayer gav dig:

$ mplayer -vf crop=-624:-352:634:358 filnamn.flv

För att få fullskärm trycker du givetvis på f på tangentbordet.

Uppdatering 17 oktober: Martin Adlerborn har satt ihop en enkel och illustrerad instruktion, som visar hur man går till väga för att ladda hem i Windows. Så om du kör Windows, klicka här för att ladda hem PDF-dokumentet och sätt fart. Och tack till Martin. :-)

Spela DVD i MPlayer

Mediaspelaren mplayer kan vara ganska lurig att använda, utöver att bara spela upp video- eller ljudfiler. Att titta på DVD-skivor, direkt från skivan eller från en kopia eller .iso-fil på hårddisken, är inte alltid så lätt som man kunde önskat. Därför vill jag ge några snabba tips, genom att steg för steg bygga upp ett kommando i terminalen.

Om mplayer inte automatiskt känner av din dvd-läsare, så måste du berätta var den finns:

$ mplayer --dvd-device /dev/cd0c

Den skivläsare jag använder har uppenbarligen device-adressen /dev/cd0c. På andra system än OpenBSD numreras enheterna annorlunda.

Vill du istället spela upp en .iso-fil eller en kopierad DVD-katalog, anger du adressen till denna:

$ mplayer --dvd-device ~/skivor/dvd-1/

Nästa steg är att ange vilket kapitel du vill spela upp. Mplayer kan nämligen inte visa DVD-menyer, utan du är tvungen att välja spår direkt. Första filmen på skivan har talet 1, den andra har 2, och så vidare. Jag vill spela upp den andra filmen:

$ mplayer --dvd-device ~/skivor/dvd-1/ dvd://2

Kör du detta så spelas filmen upp. Men ytterligare något kan läggas till!

DVD-filmer är nämligen irriterande randiga. Tittar du bara noga så ser du det, särskilt när starkt färgade fält rör sig hastigt över skärmen. För att göra dig av med detta lägger du till ytterligare en parameter:

$ mplayer -vf-pre filmdint --dvd-device ~/skivor/dvd-1/ dvd://2

Ett sista tips: Om du vill hastigt och smärtfritt »ta loss« filmen från DVD:n och lägga den i en .avi-fil, fungerar det följande kommandot. Det använder sig av mplayers syskon mencoder, som anropas på liknande sätt, men skapar filmer istället för att spela upp dem.

$ mencoder -o ny-fil.avi -oac copy -ovc copy --dvd-device ~/skivor/dvd-1/ dvd://2

Filen ny-fil.avi som detta skapade är en direkt kopia av spåret på skivan. Därför spelas den med fördel upp utan ränder:

$ mplayer -vf-pre filmdint ny-fil.avi

Det var allt. Adjö!