All nedladdning är inte fel

Dags att ännu en gång försöka röja det där missförståndet ur vägen. Erik Hedin, som presenterar sig som "trebarnspappa som startade och numera konceptutvecklar SVT Play (föräldraledig till maj 2013)", lyckades tidigare i dag skriva så här på Twitter:

Som ni ser länkar han till ett inlägg på diskussionsforumet, där jag förklarar varför SVT Plays nya strömmar inte ännu fungerar med Huggpunkt VHS.

När man lägger fritid på att utveckla lagliga alternativ till illegal fildelning är det en smula nedslående att kallas för TV-pirat, särskilt som jag aktivt tagit avstånd från piratkopiering, så jag känner ett visst behov av att svara. Visserligen har jag fortfarande ett Twitter-konto eller två och skulle kunna svara där, men saker som ryms i en tweet är sällan värda att säga alls, och om man ändå försöker ser man bara dum ut. (Att varenda kotte som sysslar med marknadsföring, media eller politik har Twitter är säkert helt icke-relaterat.)

Jag svarar här i stället. Någon som läser bloggen kan ju pinga honom, om det känns värt besväret.

Av framför allt tre skäl är Erik Hedins kviddevitt sannolikt sprunget ur häcken.

  1. Det här har ingenting med piratkopiering att göra.
  2. Problemet är inte nya SVT Play, utan de nya strömformaten.
  3. "TV-piraterna" har inga problem, utan det är vi andra.

Nedan förklarar jag mera ingående vad som ligger bakom de här tre punkterna.

1. Det har ingenting med piratkopiering att göra

De två program som foruminlägget Erik Hedin länkat till handlar om är Huggpunkt VHS och SVTPlay.sh.

(Jag nämner visserligen även PiratePlay i inlägget, som fyller ungefär samma funktioner, men vare sig jag eller inlägget har egentligen något med PiratePlay att göra. Detta utgår jag från att Erik Hedin förstått, eftersom han, precis som alla andra twittrare, aldrig skulle uttala sig utan att först ha satt sig in i ämnet.)

Grejen är att vare sig H.VHS eller SVTPlay.sh lär vara särskilt intressanta för personer som sysslar med illegal fildelning. De är helt enkelt vare sig nödvändiga eller särskilt smidiga i den typen av situationer. Detta förklaras kanske bäst genom att säga något om vilka programmens respektive syften och målgrupper faktiskt är.

SVTPlay.sh är ett skalskript som tillkommit för att SVT Play bara fungerar om man har Flash, vilket inte är någon självklarhet. Den första versionen av skriptet skrev jag för flera år sedan för att slippa allt krångel med HTML-kod varje gång jag ville se något program på datorn. Flash finns nämligen inte för OpenBSD, och jag har ingen lust att byta operativsystem bara för att komma åt public service-sändningar.1

Målgruppen är framför allt unix-användare. Skriptet har en närmast överdriven mängd parametrar för att kunna användas i så många olika situationer som möjligt, exempelvis plugin för webbläsare eller "smarta" TV-apparater.

Huggpunkt VHS har en helt annan målgrupp. Även om programmet ger åtkomst till videor på SVT Play och en handfull andra sajter även på plattformar utan Flash, så är huvudsyftet att göra nedladdning för privat bruk enkelt. Jag inser att det där med "privat bruk" låter litet suspekt, eftersom det är en fras som mellan varven missbrukas. Därför är det bäst att åtminstone ge några exempel på hur programmet faktiskt används:

  • Hämta program på datorn och föra över dem till exempelvis en iPad inför en längre bil- eller tågresa. Mobilnätet har inte perfekt täckning, särskilt inte på tåg.
  • Se program i bättre kvalitet än vad som går att strömma. Jag bor själv i en liten by och har inte bandbredd nog för de tjockaste strömmarna på SVT eller TV4 Play.
  • Spara program man vill se men inte har tid att se förrän de försvunnit från sajten.
  • Ladda ned program som bara visas i Sverige, för att någon närstående som bor i utlandet ska kunna se dem.

Samtliga användningsområden jag beskrivit ovan är lagliga. Det är inte frågan om att de är lagliga enbart för att ingen förbjudit dem, utan lagen är särskilt utformad för att sådana här användningsområden ska vara tillåtna. Syftet med den privatkopieringsersättning vi betalar ovanpå priset för olika datamedia är just att ersätta upphovsrättsinnehavare för sådan här nedladdning och kopiering för privat bruk.

De allra flesta som använder den här typen av program är bara intresserade av att se videorna utan att behöva strömma dem samtidigt, och lagen är utformad för att det ska vara tillåtet att använda sajterna på det sättet.

Därför har det här inte med piratkopiering att göra. Lättanvända och lagliga alternativ gör snarare att efterfrågan på piratkopior minskar. (Vilket väl är bra?)

2. Problemet är inte nya SVT Play utan strömformaten

Det inlägg i diskussionsforumet som Erik Hedin länkade till förklarar egentligen det mesta bakom den här punkten, men en sak är värd att tillägga: SVT Plays nya webbsajt, som lanserades i början av juni, är faktiskt mycket enklare att interagera programmatiskt med än den tidigare versionen.

Det är inte nya SVT Play som är problemet, utan Adobes och Apples nya strömformat. Problemet är dessutom inte formaten i sig, utan att öppen källkod-världen inte hunnit ifatt ännu.

Ska man tvunget ha något att klaga på SVT över, så är det i så fall att de använder Flash. Flash är dåligt och onödigt. Youtube har fungerat utan Flash rätt länge nu.

3. Det är inte "TV-piraterna" som har problem

Rent tekniskt finns det inga större hinder att kopiera videoströmmarna. Om man har tillräcklig kompetens och motivation att sprida videor på torrentsajter, så har man också tillräcklig kompetens och motivation att använda de krångligare lösningarna på nedladdningsproblemen.

I de fall där strömmarna inte direkt går att spara med AdobeHDS.php eller FFmpeg kan man helt sonika köra ett skärmfångstprogram som bara spelar in vad som visas på skärmen. Visserligen tar det litet längre tid, och man måste krångla en del för att inte få antingen gigantiska videofiler eller märkbart sämre kvalitet, men det är som sagt bara en fråga om motivation och kunnande. Och ingen tror väl att det där är två egenskaper som dem som lägger upp grejor på torrent-trackers saknar?

Piratkopierarna har alltså inte några större problem med SVT Play – eller någon av de andra Play-sajterna. I stället hamnar vi i slutändan (åter) i en situation där TV-programmen inte går att spara på de sätt som är lagliga, eller ens att se på vissa plattformar, men de finns på Pirate Bay.

Perfekt.

  1. Sveriges Radio ska för övrigt ha en eloge. När de för några år sedan lanserade sin nya sajt blev det krångligare för oss utan Flash, vilket jag skrev till dem om. De besvarade kritiken genom att göra det enklare än någonsin tidigare att komma åt mediaströmmarna. Det var lysande!

Koda om filmer för Android och iPhone

Obs: ffmpeg är ett rörligt mål, och sedan den här guiden skrevs har anvisningarna i den slutat fungera. Men har du en version av ffmpeg från början av 2011 kan du ju alltid försöka ändå… ,)

* * *

Problem: Du har en film, kanske är den nedtankad från SVTPlay eller på en DVD-skiva, och nu vill du se på den i mobilen. Men den är för otymplig!

Lösning: Koda om filmen till telefonbrukbart mp4-format.

Svårighetsgrad: Lätt omständigt. (Svårare dock för Windows-användare, som saknar $-skal.)

Du behöver:

Om du ska rippa filmen från en DVD behöver du även något program för detta. Om du däremot redan har en färdig filmfil, till exempel en sådan du dragit hem från SVTPlay, så kan du klicka här för att hoppa till nästa avsnitt.

Rippa från DVD (med MEncoder)

För att kopiera från det .vob-format som film-DVD:er använder, så behöver du även något program som kan kopiera filmen till en typisk container i stil med .mpg eller .avi. MEncoder håller måttet, och följer med MPlayer. Så vitt jag vet kan du även göra detta med VLC i Windows, men hur får du allt lista ut själv.

För att med MEncoder skapa filmfilen du behöver från en DVD, ska du först ta reda på vilket kapitel du vill ha.

Prova dig fram med följande kommandon:

$ mplayer dvd://1

$ mplayer dvd://2

$ mplayer dvd://3

Använd parametern -dvd-device om MPlayer inte hittar din DVD-skiva:

## Du kan läsa direkt från enheten:
$ mplayer -dvd-device /dev/cd0c dvd://1

## Om du mountar skivan kan du läsa från den så här istället:
$ mplayer -dvd-device /mnt/disc dvd://1

## Eller förstås så här, om du rippat den rakt av:
$ mplayer -dvd-device metropolis.iso dvd://1

När du funnit rätt kapitel är det dags att kopiera filmen. Glöm inte att använda samma -dvd-device-parameter, eller förstås att ange rätt kapitel:

## Utan -dvd-device:
$ mencoder -oac copy -ovc copy -o "film".mpg dvd://3

## Med -dvd-device:
$ mencoder -oac copy -ovc copy -o "film".mpg -dvd-device metropolis.iso dvd://3

Nu har du skaffat dig filen film.mpg. Dags att konvertera!

Så här gör du

När jag konverterar filmer för mobiltelefon, så är jag ute efter förutsägbar filstorlek. Guiden utgår därför från att vad du önskar dig är 100 megabyte per timme film. I mitt tycke räcker detta alldeles utmärkt. Parametrar för andra MB/h finns sist i inlägget.

  1. Du behöver artbestämma videon litet grand. Det handlar om saker som är unika för varje film. Med MPlayer kan det göras så här:

    $ mplayer -frames 0 -identify "film".mp4 | egrep "(VIDEO_WIDTH|VIDEO_HEIGHT|VIDEO_FPS|AUDIO_BITRATE|AUDIO_FORMAT)"

    Observera att kommandot som ska köras inte får radbrytas, trots att det kanske ser radbrutet ut här bloggen. Utmatningen ser ut ungefär så här:

    ID_VIDEO_WIDTH=640
    ID_VIDEO_HEIGHT=360
    ID_VIDEO_FPS=25.000
    ID_AUDIO_FORMAT=MP4A
    ID_AUDIO_BITRATE=0
    ID_AUDIO_BITRATE=128000

    • Filmens aspect ratio är 16:9, eftersom 640 genom 360 är 1,777…. Ofta skrivs det 1.77:1 istället. En annan vanlig ratio är 1.33:1 eller 4:3.
    • Filmens framerate är 25.
    • Ljudets format är MP4A, vilket strax kan få betydelse.
    • Ljudets bitrate är 128k.
    Håll nu ordning på dessa tal och antal.
  2. Ett ytterligare antal nuffror behöver bestämmas. För 100MB/h rekommenderar jag de följande:
    1. Audio bitrate: 96k (eller 128k för högre ljudkvalitet).
    2. Audio channels: 2 för hörlurar, annars 1 för mono.
    3. Video resolution: 240 på y-ledden, alltså 320x240 för 4:3 och 428x240 för 16:9.
    4. Video bitrate: 131.5k (eller 99.5k om du valde 128k som audio bitrate).
    5. Video framerate: 15 (alt. original/2, i mitt exempel alltså 12.5).

    Den film jag använder som exempel kommer från SVTPlay och heter film.mp4. De kodar vanligtvis sitt ljud i MP4A-format. Eftersom detta är samma format som vår färdiga mobilfilm kommer att använda, så kan vi välja att kopiera ljudströmmen istället för att koda om den. Ljudkvaliteten blir då oerhört mycket bättre, men eftersom 128k tar större plats än 96k, så måste videokvaliteten göras sämre (99.5k) om vi ska hålla oss till 100 MB/h. Jag kommer att demonstrera bägge varianterna.


  3. Nu ska vi bestämma våra rörliga parametrar. Vi har en film i 16:9-format och vill ha stereoljud i 96k. Då blir det så här:
    • Aspect ratio: -aspect 16:9
    • Video resolution: -s 428x240

    • Video bitrate: -b 131.5k

    • Video framerate: -r 15

    • Audio channels: -ac 2

    • Audio bitrate: -ab 96k


    Vill vi däremot bara kopiera den ursprungliga ljudströmmen, som ju låg på höga 128k istället för bara 96k, så byter vi videokvalitet och kan strunta i sådant som rör ljudkvalitet:

    • Aspect ratio: -aspect 16:9
    • Video resolution: -s 428x240
    • Video bitrate: -b 99.5k
    • Video framerate: -r 15

    Nu är det dags att göra bruk av parametrarna.


  4. Det går att få bättre kvalitet och mera exakt filstorlek genom att koda filmen två gånger, istället för bara en. Det tar dock dubbelt så lång tid. Vill du snabba på, så hoppa över det här steget. Annars sätter vi FFmpeg att göra en provkodning av filmen och spara statistik i ett par loggfiler. Här är trollformeln för att göra detta i Unix-liknande system:

    $ ffmpeg -i "film".mp4 -an -f mp4 -y -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 7 -trellis 1 -refs 5 -bf 0 -flags2 +mixed_refs -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 \
    -b 131.5k -aspect 16:9 -s 428x240 -r 15 \
    -acodec aac -ar 44100 -ab 96k -ac 2 \
    -pass 1 /dev/null

    Backslash markerar radbrytningar som inte behövs. Om du använder Windows måste du ta bort dem, både backslasharna och radbrytningarna. Dessutom måste du ersätta /dev/null med NUL.
    Om vi istället för att omkoda ljudet bara ska kopiera det, så ska näst sista raden ändras från -acodec aac -ar 44100 -ab 96k -ac 2 till bara -acodec copy, och så måste förstås -b 131.5k på raden före ändras till -b 99.5k. Ett Windows-exempel utan radmatningar:

    $ ffmpeg -i "film".mp4 -an -f mp4 -y -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 7 -trellis 1 -refs 5 -bf 0 -flags2 +mixed_refs -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -b 99.5k -aspect 16:9 -s 428x240 -r 15 -acodec copy -pass 1 NUL


  5. Nu är det dags att koda själva filen. Vi bestämmer oss för att den ska heta telefonfilm.mp4. Kommandona ska se likadana ut i Windows som i andra operativsystem, såvitt jag vet. Om du inte hoppade över det föregående steget ska du göra så här:

    ffmpeg -i "film".mp4 -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 5 -bf 0 -flags2 +mixed_refs -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40-i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -b 131.5k -aspect 16:9 -s 428x240 -r 15 -acodec aac -ar 44100 -ab 96k -ac 2 -pass 2 "telefonfilm".mp4

    Om du däremot hoppade över det, så tar du bort -pass 2 från slutet.
    Och valde du att kopiera ljudströmmen istället för att koda om den, så blir det så här:

    ffmpeg -i "film".mp4 -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -subq 7 -trellis 1 -refs 5 -bf 0 -flags2 +mixed_refs -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40-i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -b 99.5k -aspect 16:9 -s 428x240 -r 15 -acodec copy -pass 2 "telefonfilm".mp4

    Även här gäller att -pass 2 ska bort om du hoppade över det förra steget.


Nu är filmen klar. Resultatet finns i filen telefonfilm.mp4.

Andra MB/h

Om du vill ha riktigt små filmer, bara 50 MB/h, så kan du försöka dig på en upplösning om 120 i y-ledden, alltså 160x120 för 4:3 eller 214x120 för 16:9. Använd 17.75k som video bitrate och 96k för ljudet, eller 49.75k för videon och 64k för ljudet om du tycker bilden blir för dålig. Detta är uträknat så här:

17,75 + 96 = 49,75 + 64 = 113,75

Du kan givetvis försöka med någon annan kombination. Huvudsaken är att summan är 113,75.

För 75 MB/h är 106.5k lämplig videokvalitet till 64k på ljudet. Till ljud på 96k gäller 74.6k för video. Upplösningen bör vara 160 på y-ledden, vilket innebär 286x160 för 16:9, eller 208x156 (!) för 4:3.

För 150 MB/h gäller 360 på y-ledden, alltså 480x360 (4:3) eller 642x360 (16:9). En duglig kompromiss mellan ljud och bild är 213k för video och 128k för ljudet. Om bildkvaliteten är viktigast så kan du försöka dig på 245k för video och 96k för ljud. Konserter och sådant är bäst med 149k för video och 192k för ljud.

Till sist kan man koda i 200 MB/h, och därmed toppa de vanligaste pekskärmsmobilernas upplösning med 480 på y-ledden. Använd upplösningen 640x480 för 4:3. Om telefonen har en FWVGA-skärm (till exempel X10) så är 854x480 bra till 16:9, men har den bara en WVGA-skärm (som Galaxy S) så är det bättre med 800x450. Kompromisskvalitet får du med 327k video och 128k ljud. Bäst blir bilden med 359k video och 96k ljud, medan ljudet blir bäst med 263k video och 192k ljud.

Ännu bättre kvalitet är förstås möjlig. För 250 MB/h ska summan av ljud och video vara 568,75k, och för 500 MB/h är summan givetvis den dubbla: 1137,5k. Till upplösning kan du i bägge fallen använda samma som för 200 MB/h. 500 MB/h är för övrigt en sådan kvalitet att det är nästintill meningslöst att använda något annat än 192k ljud och 945.5k video. Eller ja, är du helt galen så kan du ju använda 320k ljud på 817.5k video. ;-)

Nu har jag säkert tryck- eller räknefelat någonstans i de snårigare partierna. Får du problem så löser det sig kanske i kommentarfältet.

Så, några frågor?

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. :-)