Spela in TV i Linux

Det bästa programmet, i mitt tycke, att spela in DVB TV från kommandoraden är dvbstream (läs mer här nedan). Detta program gör också post-processing av inspelningen enklare.

Det minst resurskrävande uppnår man med "tzap" och dumpa tv strömmen via "/dev/dvb/adapter0/dvr0".

Se till att ha fungerande kanaler "cp ~/.mplayer/channels.conf ~/.tzap/channels.conf" eller scanna till fil som redigeras efter eget tycke. Så här ser en kanallista ut gällande Stockholm/Nackamasten:

SVT1:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1019:1018:5770
SVT2:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1029:1028:5510
Kunskapskanalen:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1249:1248:1240
Barnkanalen:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:879:878:870
SVT24:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:879:878:870
TV4:642000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_NONE:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1049:1048:6110
TV6:642000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1079:1078:1070

Denna kanallista funkar både för tzap och mplayer.

Enkel uppspelning

För att bara titta på TV är det enklast, via en terminal skriva:

mplayer dvb://"SVT1"

För att deinterlaca (ta bort uppdelningen i fält) och cacha lite innan uppspelning kan man använda följade:

mplayer -cache 2048 -vf pp=l5 dvb://"SVT1"

 

Kortfattad enkel inspelning med tzap

Starta detta i en terminal

tzap -r "SVT2" >> /dev/null

Dumpa i en annan terminal

cat /dev/dvb/adapter0/dvr0 > inspelning.mpg

Gör om DVB-t strömmen till MPEG-PS

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -vf scale=720:576,harddup -srate 48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 $INPUT_FILE -o $OUTPUT_FILE

Eller en enklare variant

mencoder -of mpeg -ni -mpegopts format=dvd:vbitrate=9000 -o inspeling_mpeg-ps.mpg -oac copy -ovc copy inspelning.mpg

Redigera filen med gopedit (installera source qt3 och mpeg2-4 libs)

http://gopdit.ath.cx/

Mer avancerat inspelningskommando lämplig för script

Spela in en timme (-n 3600) från Kunskapskanalen direkt med dvbstream.

dvbstream -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n 3600 -o 879 878 > masterverk_kk_081116.ts
...
dvbstream v0.6 - (C) Dave Chapman 2001-2004
Released under the GPL.
Latest version available from http://www.linuxstb.org/
Tuning to 490000000 Hz
Using DVB card "DiBcom 7000PC", freq=490000000
tuning DVB-T (in United Kingdom) to 490000000 Hz, Bandwidth: 8
Getting frontend status
Event: Frequency: 490000000
Bit error rate: 2097151
Signal strength: 40848
SNR: 0
UNC: 0
FE_STATUS: FE_HAS_SIGNAL FE_HAS_LOCK FE_HAS_CARRIER FE_HAS_VITERBI FE_HAS_SYNC
dvbstream will stop after 3300 seconds (55 minutes)
Output to stdout
Streaming 2 streams
Audiostream: Layer: 2 BRate: 256 kb/s Freq: 48.0 kHz
Videostream: ASPECT: 16:9 Size = 720x576 FRate: 25 fps BRate: 15.00 Mbit/s

Detta kommando drar bara ca 0.7% av CPU i ett 2.4 GHz system.

dvbstream inställningar för olika kanaler

Ett enkel shell script för att spela in TV (kanalerna är för Stockholm Nacka eller Marieberg)

#!/bin/sh
-c 0 (/dev/dvb/adapter0)
-c 1 (/dev/dvb/adapter1)
DVBS="/usr/bin/dvbstream"
DUR=ARG1
OUT=ARG2
SVT1="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1019 1018 > $OUT"
SVT2="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1029 1028 > $OUT"
Barnkanalen="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 879 878 > $OUT"
SVT24="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1249 1248 > $OUT"
# SVT har slutat sända HD TV över DVB-T!
#SVTHD="-c 0 -qam 64 -cr 2_3 -gi 32 -bw 8 -tm 8 -f 730000000 -ps -n $DUR -o 619 618> $OUT"
TV4="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 642000000 -ps -n $DUR -o 1049 1048 > $OUT"
TV6="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 642000000 -ps -n $DUR -o 1079 1078 > $OUT"

Spara denna som inspelning.sh och kör med kommandot

sh scriptnamn.sh inspelningslängd utfil.mpg

 

Perl script för direktinspelning

 

#!/usr/bin/perl
# rec-direct
# Hans E Andersson, 2008-11-17 05.04.30
my $DVBS="/usr/bin/dvbstream";
# my $ARGS="-c 0 -ps";
# -c 0 (/dev/dvb/adapter0)
# -c 1 (/dev/dvb/adapter1)

print "*************************************************\n";
print "Kanal väljare\n";
print "*************************************************\n";
print qq|SVT1
SVT2
Barnkanalen
SVT24
TV4
TV6
*************************************************
Välj kanal (hela namnet): |;
my $CHAN = <STDIN>;
chomp($CHAN);
print $CHAN;

print "*************************************************\n";
print "Längd i min: ";
my $DUR = <STDIN>;
chomp($DUR);
$DUR = $DUR * 60;
print "*************************************************\n";

print "*************************************************\n";
print "Utfil (my_rec.mpg): ";
my $OUT = <STDIN>;
chomp($OUT);
$OUT = "/srv/media/TV/REC/$OUT";
if (-e $OUT) {
chdir("/srv/media/TV/REC/");
print system("ls -1");
print "\nFilen finns redan, annat namn: ";
my $OUT = <STDIN>;
chomp($OUT);
$OUT = "/srv/media/TV/REC/$OUT";
}
#print "$OUT";
print "*************************************************\n";



my $REC = "";
if ($CHAN eq "SVT1") {
$REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1019 1018 > $OUT";
}
if ($CHAN eq "SVT2") {
$REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1029 1028 > $OUT";
}
if ($CHAN eq "Barnkanalen") {
$REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 879 878 > $OUT";
}
if ($CHAN eq "SVT24") {
$REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n $DUR -o 1249 1248 > $OUT";
}

# Denna funkar inte längre!
# SVT slutade sända HD över DVB-T den 1 mars 2010 #if ($CHAN eq "SVTHD") { #$REC="-c 0 -qam 64 -cr 2_3 -gi 32 -bw 8 -tm 8 -f 730000000 -ps -n $DUR -o 619 618> $OUT"; #} if ($CHAN eq "TV4") { $REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 642000000 -ps -n $DUR -o 1049 1048 > $OUT"; } if ($CHAN eq "TV6") { $REC="-c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 642000000 -ps -n $DUR -o 1079 1078 > $OUT"; } if (!$REC) { print "Ingen kanal vald, avslutar nu!\n"; exit; } #Annars spelar vi in else { print "Spelar in $CHAN i $DUR sekunder\n"; print "Kommando: $DVBS $REC\n"; system("$DVBS $REC"); my $size = system("du -sh $OUT"); print "Inspelingen avslutad\n"; exit; }

 

TV Guider

http://tvsajten.com/tv

http://tv.swedb.se/xmltv/

http://xmltv.org/wiki/

http://converter.xmltv.se/

Syntax för XMLTV

http://tv.swedb.se/content/view/55/48/

Data Layout

Data is stored in a number of separate gzipped xml-files that can be downloaded from an http-server. To download data, you should start by retrieving the root-url. For tv.swedb.se, the root-url is http://tv.swedb.se/xmltv/channels.xml.gz. The root-url for Sweden will likely remain the same for the foreseeable future, but there might be data-sources available in the future, so you should make the root-url user configurable.

This file describes which channels are available and where data can be found for each channel. A typical entry looks like this:

<channel id="svt1.svt.se">
<display-name lang="sv">SVT1</display-name>
<base-url>http://xmltv.tvsajten.com/xmltv/</base-url>
<icon src ="http://xmltv.tvsajten.com/chanlogos/svt1.svt.se.png"/>
</channel>

The contents of the channel-entry is the same as specified by the xmltv-dtd with the addition of the base-url element. The base-url specifies where data for this particular channel can be found. Note that one base-url is specified for each channel. Right now, all channels use the same base-url, but this might change in the future.

If a channel-entry specifies more than one base-url for the channel,
the grabber shall use the first base-url.

The actual programs for each channel are stored in one file per channel and day in the location specified by the base-url for the channel. The name of each file is <id>_<yyyy-mm-dd>.xml.gz. As an example, the data for SVT1 on July 2nd, 2006, can be found at:
http://xmltv.tvsajten.com/xmltv/svt1.svt.se_2006-07-02.xml.gz

Each of these files follow the xmltv dtd, with the exception that they don't contain any <channel> elements.

A valid xmltv file can be constructed from the above data by removing all base-url fields from channels.xml.gz and outputting the relevant channel-entries concatenated with the contents of all program-files with the first and last lines omitted.

 

Länkar

http://www.turtlespond.net/scripts/dvb-t.html

http://wiki.arts.usyd.edu.au/meta/index.php/Building_a_DVB_streaming_server

 


"Spela in TV i Linux", Hans E Andersson: 2008-11-16 23:09:19, ändrad: 2014-01-16 01:19:41

 

Copyright © 2005 - 2024 HEAP. Alla rätter förbehållna. Integritetspolicy