• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Script zum Aufnehmen von der TV-Karte mit mencoder

OP
taki

taki

Advanced Hacker
Seltsam. Bei mir höre ich nichts, wenn ich aufnehme. Wenn ich die TV-Karte während der Aufnahme höre, dann habe ich etwas falsch konfiguriert, und die erzeugte Datei ist ein Stummfilm.

Ist das eventuell unterschiedlich je nach Hardware (TV-Karte, Soundkarte, Anschluss von TV an Sound etc.)? Oder hängt das evtl. mit der Option Vollduplex zusammen?

Den Master stumm schalten heist, dass Du auch keine Systemklänge oder was auch immer hören kannst. Zugegeben, in der Regel wird niemand seine MP3s hören wollen während eine Aufnahme läuft (bekommt der Aufnahme nicht gut, da gibt es dann je nach Rechenpower des Rechners Aussetzer und Framedrops).

Ich werde das Stummschalten dann mal als Option vorsehen. Man könnte auch VIDEO statt MASTER stummschalten. Das Device sollte daher im Profil konfigurierbar sein.
 

marcor

Member
taki schrieb:
Seltsam. Bei mir höre ich nichts, wenn ich aufnehme. Wenn ich die TV-Karte während der Aufnahme höre, dann habe ich etwas falsch konfiguriert, und die erzeugte Datei ist ein Stummfilm.

Ist das eventuell unterschiedlich je nach Hardware (TV-Karte, Soundkarte, Anschluss von TV an Sound etc.)? Oder hängt das evtl. mit der Option Vollduplex zusammen?

Den Master stumm schalten heist, dass Du auch keine Systemklänge oder was auch immer hören kannst. Zugegeben, in der Regel wird niemand seine MP3s hören wollen während eine Aufnahme läuft (bekommt der Aufnahme nicht gut, da gibt es dann je nach Rechenpower des Rechners Aussetzer und Framedrops).

Ich werde das Stummschalten dann mal als Option vorsehen. Man könnte auch VIDEO statt MASTER stummschalten. Das Device sollte daher im Profil konfigurierbar sein.

War ne AdHoc-Lösung Master zu nehmen.

Meine TV-Karte ist an den Eingang der Soundkarte angeschlossen und wenn ich Aufnehme, dann höre ich den Ton, deswegen schalte ich den eben weg;-)

Und die Systemklänge brauche ich während der Aufnahme eh nicht, weil ich nur dann aufnehme wenn ich nicht da bin um mir dem Film später anzusehen.
 

bussen

Member
Stellt doch einfach mit nem Mixer "Line in" stumm.
Die Aufnahmelautstaerke wird eh von "Capture" geregelt.

Zum rausschneiden der Werbung kann ich nur "avidemux" empfehlen.
Der beherrst auch smart copy. Damit braucht man nicht genau bei den Keyframes schneiden. Dadurch werden die kurzzeitigen Artefakte bei den geschnitten Stellen vermieden.
 
OP
taki

taki

Advanced Hacker
[editiert]
Das hier gepostete Script ist obsolet.

Die jeweils neueste Fassung des Scripts kann ab sofort von meiner HP gezogen werden (http://www.andreas-silberstorff.de/tv_perl/download/tv.pl.tar.gz).

Dort entsteht auch ein kleines Handbuch (http://www.andreas-silberstorff.de/tv_perl/).

Das steht auch im ersten Posting, wo ich auch den Zeitpunkt des letzten Uploads vermerken werde.
[/editiert]






Was geht
...steht weiter oben

Was noch fehlt
  1. Das Script braucht noch eine gute Hilfsfunktion
  2. Option, um wie bei mogos Script dem mencoder-Aufruf mit sudo und nice eine höhere Priorität zu geben (nach der Aufnahme sollten aber dann noch die Rechte an der erzeugten Filmdatei an den Aufrufer zurückgegeben werden, sonst gehört die Datei root)
  3. Hassans Einstellungen zur Farb- und Kontrastkorrektur
  4. Option zum Stummschalten der Tonausgabe
  5. Profile aufräumen und besser dokumentieren

Code:
#!/usr/bin/perl -w
#
use strict;
use warnings;
use Shell;

#program version
my $VERSION="0.1";

#For CVS , use following line
#my $VERSION=sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);

###################################################################################
# Version: 0.01
# Lizens:  gpl
# Autoren: migo, taki
#
# Dieses Script wird im linux-club Forum multimedia besprochen und entwickelt.
# Verbesserungsvorschläge sollen dort gepostet werden.
# URL: http://www.linux-club.de/viewtopic.php?p=153446#153446
#
# TODO: Umstellung auf englisch, I18N,
#       und
#       s. TODO-comment in the subs
#
#       Wenn vollständig, umsetzen in Python oder Ruby
#       -> bessere Performance, Möglichkeit, zu einer vollwertigen KDE-Anwendung
#          zu wachsen (DCOP-Interface, KFileDialog mit kio-slaves, kparts etc.)
###################################################################################

###################################################################################
# Hardwareabhängige Einstellungen (vom Benutzer anzupassen)
#
# TODO: Auslagern in Konfigurationsdatei, Einstellungsmöglichkeit über Dialog
###################################################################################
#my $driver = 'v4l';
my $driver = 'v4l2';
#my $norm   = 'ntsc';
my $norm   = 'pal';

###################################################################################
# Weitere benutzerspezifische Einstellungen (vom Benutzer anzupassen)
#
# TODO: Auslagern in Konfigurationsdatei, Einstellungsmöglichkeit über Dialog
###################################################################################
#my $pfad  = "/data/video";
my $pfad  = "/home/freevo/Documents/Video/misc";
#my $scale = '384:288';
my $scale = '768:576';

#############################################################
# Vorbelegung globaler Variablen (hier Parameter)
#############################################################
my $interactive = "";
my $sender      = "";
my $start       = "";
my $dauer       = "";
my $cron        = "";
my $grey        = "";
my $film        = "";
my $intervall   = "";

my $minute      = 0;
my $stunde      = 0;
my $minuten     = 0;
my $stunden     = 0;
my $bitrate     = 0;

sub set_sender  {
 # Abfrage des gewünschten Senders und Einstellung desselben.
 # test: Aufruf zu einer Prüfung, Shell-Befehl
 # -eq: "equal" = "ist gleich", Shell-Befehl zum Vergleich zweier Zahlen
 # z.B. arte "Arte" bedeutet: in .xawtv ist "arte" eingestellt, im Menü
 # wird "Arte" angezeigt.
 my ($V) = @_;
 if ( ! ($V) )
 {
     use Env qw/HOME/;
     my $xawtvrc = "$HOME/.xawtvrc";
     $xawtvrc    = "/etc/X11/xawtvrc" unless ( -f $xawtvrc );
     open (IN, $xawtvrc) || die "xawtvrc kann nicht gelesen werden. $!\n";
     my @xawtvrc = <IN>;
     close IN;
     my $Channellist = "";
     my $Channel     = "";
     my $Channelname = "";
     foreach (@xawtvrc)  {
        if (/\[.*\]/)
        {
            $Channelname =  $_;
            $Channelname =~ s/^\[//g;
            $Channelname =~ s/\].*$//g;
            chomp ($Channelname);
            $Channel     = $Channelname;
            # Leerstellen entwerten
            $Channel     =~ s/\ /\\ /g;
            # Klammern entwerten
            $Channel     =~ s/\(/\\(/g;
            $Channel     =~ s/\)/\\)/g;
            $Channellist = "$Channellist $Channel \"$Channelname\" ";
        }
     }
     if (!($Channellist)) {
         print "Die Kanalliste ist leer. Die TV-Karte muss wohl erst noch eingerichtet werden (mit YaST oder mit scantv).\n";
         exit 2;
     }
     $V = `kdialog --title \"Senderauswahl\" --menu \"Welcher Sender soll eingestellt werden?\" $Channellist`;
     chomp $V;
  }
  if ( ! ($V) )
  {
     exit 0;
  }
  return $V;
}

sub set_film
{
  #
  # Abfrage des Filmtitels
  #
  my ($V) = @_;
  if ( ! ($V) )
  {
     $V = `kdialog --title "Filmtitel" --inputbox "Filmtitel für den Dateinamen"`;
     chomp $V;
  }
  if ( ! ($V) )
  {
     exit 0;
  }
  return $V;
}

sub set_start
{
  #
  # Abfrage der Startzeit
  #
  my ($V) = @_;
  if ( ! ($V) )
  {
     $V = `kdialog --title "Startzeit" --inputbox "Bitte Startzeit eingeben (Format hh:mm)"`;
     chomp $V;
  }
  if ( ! ($V) )
  {
     exit 0;
  }
  return $V;
}

sub set_dauer
{
  #
  # Abfrage der Aufnahmedauer
  #
  my ($V) = @_;
  if ( ! ($V) )
  {
     $V = `kdialog --title "Dauer der Aufnahme" --inputbox "Aufnahmedauer? (Format hh:mm)"`;
     chomp $V;
  }
  if ( ! ($V) )
  {
     exit 0;
  }
  return $V;
}

sub set_grey
{
  #
  # Abfrage nach Schwarz-Weiss-Aufnahme
  #
  my ($V) = @_;
  if (( ! ($V)) and ($interactive) )
  {
     $V = `kdialog --title "Schwarz-Weiss?" --menu "Soll in Schwarz-Weiss aufgenommen werden?" "" Farbe "gray" SW`;
     chomp $V;
  }
  return $V;
}



sub realyNow
{
  my ($V)       = @_;
  my $startzeit = "";

  if ( ! ($V) )
  {
     return;
  }

  if ($start)  {
     $startzeit = $start . " Uhr";
  }
  else
  {
    $start = "Jetzt";
  }

  # Ausgabe der eingestellten Daten, letzte Abbruchmöglichkeit
  `kdialog --title "Filmdaten" --yesno "Es wird aufgenommen\n\
----------------------------------------------------------------------------------------------------------------\n\
 Dateiname:           $film\n\
 Sender:              $sender\n\
 Beginn der Aufnahme: $startzeit\n\
 Wiederholungen:      $intervall\n\
 Aufnahmedauer:       $minuten min\n\
 Bitrate:             $bitrate kBit/s\n\
----------------------------------------------------------------------------------------------------------------\n\
 OK?"`;

  if ( $? )
  {
     exit 0;
  }
}


sub recordMovie
{
  $sender = set_sender ($sender);
  $start  = set_start  ($start);
  $dauer  = set_dauer  ($dauer);
  #$grey   = set_grey   ($grey);
  $film   = set_film   ($film);
  $bitrate = set_bitrate ($dauer);

  my $Cmd = "echo \"$0 -sender $sender -dauer = $dauer -film $film $grey -record\" ";

  # Übergabe des zusammengestellten Aufnahmebefehls an at,
  # um einen einzelnen Film aufzunehmen
  exec ("$Cmd |at $start");
  exit 0;
}



sub set_intervall
{
  #
  # Abfrage des Intervalls (s. man crontab)
  #
  my ($V) = @_;
  if ( ! ($V) )
  {
     $V = `kdialog --title "Wiederholungen" --menu "An welchen Wochentagen läuft die Serie?\" 1-7 "Täglich" 1-5 "Werktags" 1 "Montags" 2 "Dienstags" 3 "Mittwochs" 4 "Donnerstags" 5  "Freitags" 6 "Sonnabends" 7 "Sonntags" set "andere Einstellungen..."`;
     chomp $V;
     if ( $V eq 'set' )  {
        $V = `kdialog --title "Wiederholungen" --inputbox "Wiederholungen? Wochentag(e) (s. man crontab)"`;
        chomp $V;
     }
  }
  if ( ! ($V) )
  {
     exit 0;
  }
  return $V;
}

sub recordSerial
{
  ### TODO: Wenn Zeitvorgabe schon vorliegt, gleich in Crontab eintragen
  $sender    = set_sender    ($sender);
  $start     = set_start     ($start);
  $dauer     = set_dauer     ($dauer);
#  $grey      = set_grey      ($grey);
  $film      = set_film      ($film);
  $bitrate   = set_bitrate   ($dauer);
  $intervall = set_intervall ($intervall);

  my $Cmd = "$0 -sender $sender -dauer = $dauer -film $film $grey -record";

  realyNow($interactive);

  # Eintrag des Aufnahmebefehls in die crontab,
  # um eine Serienaufzuzeichnung einzustellen

  $stunde    = $start;
  $stunde    =~ s/:.*$//;
  $minute    = $start;
  $minute    =~ s/^.*://;

  use Env qw/USER/;
  use Config::Crontab;
  my $ct = new Config::Crontab;
  $ct->read || die "Konnte crontab nicht lesen. $?\n";;

  for my $block ( $ct->blocks ) {
        print $block->dump;
    }

  ## make another block using Block methods
  my $block = new Config::Crontab::Block;
  $block->last( new Config::Crontab::Comment( -data    => "# Aufnahme der Serie $film" ) );
  $block->last( new Config::Crontab::Event  ( -minute  => "$minute",
                                              -hour    => "$stunde",
                                              -dow     => "$intervall",
                                              -command => "$Cmd" ) );

  ## add this block to crontab file
  $ct->last ($block);

  ## save the new crontab
  $ct->write || die "Konnte crontab nicht schreiben. $!\n";;

  # Aufruf kcron, um den neuen Eintrag zur Kontrolle noch mal anzuzeigen
  exec ("kcron");
  exit 0;
}


sub set_bitrate  {
  # Umrechnung der Aufnahmedauer in Minuten
  my ($stunden) = @_;
  $stunden    =~ s/:.*$//;
  ($minuten)    = @_;
  $minuten    =~ s/^.*://;
  $minuten    = $minuten + ($stunden * 60);

  # Festlegung der Bitrate: bis zu 128 Minuten Filmdauer stets 2000 kByte/s,
  # darüber Anpassung an max. 2 GB Dateigröße
  if ( $minuten <= 128 )
  {
     $bitrate = 2000;
  }   else  {
     $bitrate = sprintf("%.0f", ((1995 - 0.9375 * $minuten) * 8192/(60 * $minuten)));
  }
  return $bitrate;
}

sub record
{
  $sender  = set_sender ($sender);
  $start   = '';
  $dauer   = set_dauer  ($dauer);
  $film    = set_film   ($film);
  $bitrate = set_bitrate ($dauer);

  if ($grey)
  {
     $grey = ':grey'
  }


  # Start der zeitprogrammierten Filmaufnahme
  #
  system ("v4lctl setstation $sender" );

  use Time::localtime;
  my $Timestamp = (localtime->year() + 1900) . "-" . (localtime->mon() + 1) . "-" . localtime->mday() . "_" . localtime->hour() . "-" . localtime->min();
  $film    = $pfad . "/" . $film . "_" . $Timestamp . "_" . $sender . ".avi";
   my $Cmd = 'mencoder tv:// -tv driver=' . $driver . ':norm=' . $norm . ':fps=25:outfmt=yuy2:quality=0:input=0:width=768:height=576 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=' . $bitrate . $grey . ':keyint=25 -oac mp3lame  -lameopts cbr:br=128:mode=0 -endpos ' . $dauer . ':00 -vf pp=hb/vb/dr/al/lb,denoise3d,scale=' . $scale . ' -o ' . $film;

  realyNow($interactive);
print "Cmd = $Cmd\n";
#    sudo nice -n-17 mencoder tv:// \
  exec ($Cmd);
}


sub play
{
    $sender = set_sender($sender);
#TODO?   farbe=set_farbe();
#TODO?   film=set_film();

#   system ( "v4lctl setstation $sender" ) || die "Konnte Sender $sender nicht einstellen; $! \n";
   system ( "v4lctl setstation $sender" );
   exec ("mplayer -fs tv:// -tv driver=$driver:norm=$norm:outfmt=yuy2:quality=0:width=1280:height=1024:fps=25 -vo xv  -v 3");
}


sub usage
{
   print "\n";
   print "Usage: tv -OPCODE [-i] [args]\n";
   print "\n";
   print "Aufruf zum Fernsehen ist\n";
   print "        tv -play -sender sender \n";
   print "\n";
   print "Aufruf zum sofort Aufnehmen ist\n";
   print "        tv -record [-i] -sender sender -dauer dauer -farbe farbe -film film\n";
   print "\n";
   print "Aufruf zum zeitgesteuerten Aufnehmen eines Films ist\n";
   print "        tv -recordAt [-i] -sender sender -t start -dauer dauer -farbe farbe -film film\n";
   print "\n";
   print "Aufruf zum zeitgesteuerten Aufnehmen einer Serie ist\n";
   print "        tv -recordSerial -sender sender -t start -dauer dauer -farbe farbe -film film\n";
   print "\n";
   print "Fehlende Argumente werden ggf. erfragt.\n";
   print "Mit -i kann man ggf. die Ausführung der Aufnahme abbrechen.\n";
   print "\n"
}



#############################################################
# Auswertung der Parameter und Argumente
#############################################################

use Getopt::Long;
GetOptions ('interactive'  => \$interactive,
            'sender=s'     => \$sender,
            'start=s'      => \$start,
            'dauer=s'      => \$dauer,
            'cron=s'       => \$cron,
            'grey'         => \$grey,
            'film=s'       => \$film,
            'pfad=s'       => \$pfad,
            'help'         => sub { usage () },
            'play'         => sub { play () },
            'record'       => sub { record () },
            'recordMovie'  => sub { recordMovie () },
            'recordSerial' => sub { recordSerial () }
);
usage ();
exit 2;

__END__

=head1 NAME

tv_perl - simple tv recording app

=head1 SYNOPSIS

 tv.pl          -sender SENDER -dauer DAUER in HH:MM                                                 -play
 tv.pl          -sender SENDER -dauer DAUER in HH:MM -film FILMTITEL                                 -record
 /pfad/zu/tv.pl -sender SENDER -dauer DAUER in HH:MM -film FILMTITEL -start HH:MM                    -recordMovie
 /pfad/zu/tv.pl -sender SENDER -dauer DAUER in HH:MM -film FILMTITEL -start HH:MM -cron Wochentag(e) -recordSerial

=head1 DESCRIPTION

 long description of your program

=head1 SEE ALSO

 need to know things before somebody uses your program

=head1 AUTHOR

 Andreas Silberstorff

=cut
[/list]
 

marcor

Member
bussen schrieb:
Stellt doch einfach mit nem Mixer "Line in" stumm.
Die Aufnahmelautstaerke wird eh von "Capture" geregelt.

Zum rausschneiden der Werbung kann ich nur "avidemux" empfehlen.
Der beherrst auch smart copy. Damit braucht man nicht genau bei den Keyframes schneiden. Dadurch werden die kurzzeitigen Artefakte bei den geschnitten Stellen vermieden.

Geile Sache das avidemux.
Schneiden ist damit total einfach.

Und wie mach ich daraus jetzt ne Video CD (VCD oser SVCD)?
Die Anleitung auf der Seite von avidemux ist für ne ältere Version.
 

bussen

Member
Ganz einfach.
Auf der linken Seite sind die Knoepfe fuer die Einstellungen.
Damit kann man die Sachen (Aufloesung, Codec u.s.w.) einstellen.

Vergiss aber nicht, V Process und A Process zu druecken, sonst wird nicht encodiert.
Ist Sinnvoll, wenn man nur die Werbund rausschneiden moechte. Dann wird dazu nur das gewollte kopiert.
 
OP
taki

taki

Advanced Hacker
Eigentlich war ich ja schon etwas enttäuscht, weil sich hier gar nichts mehr tut. Aber in tv.pl ist noch ein Fehler. Bei der zeitgesteuerten Aufnahme eines Films fehlt die Datumsangabe. Für Serienaufnahme reicht es, die Startzeit wie in der Fragebox vorgegeben mit HH:MM anzugeben. Für die Aufnahme eines Einzelfilms wird aber zusätzlich noch die Datumsangabe im Format Monat (dreistellig, zb. Mai) Tag des Monats (z.B. 3). Spätestens morgen abend wird das korrigiert.
 

mca

Hacker
fohe ostern :D
moin taki, zunächst mal find ichs cool, dass du dir so viel mühe für das script machst. deshalb wirst du auch sicher nichts gegen ein paar verbesserungsvorschläge haben.
1. ganz wichtig: wenn ich dein script mit ./tv.pl aufrufe, erscheint eine falsche kommandosyntax zum fernsehen: "tv -play -sender sender". richtig:"tv -sender SENDER -play" (wie in deiner doc). mit erstem seh ich immer den zuletzt gesehenen sender.
2. man muss in deinem script vor der ersten fernsehaufnahme das zielverzeichnis editieren. ich würde das gerne zusammen mit dem filmtitel abgefragt werden.
3. ich würde auch gerne sekundengenau aufnehmen können, bei der play-option kannste die zeit doch ganz rausnehmen, oder?
4. ich würde mir ansich eine kurze befehlszeile wünschen. "tv record" oder "tv play" reicht doch. dann kommen mit kdialog die abfragen nach sender, zeit, (farbe?), titel, pfad (bei erststart).
ich will noch erwähnen, dass die aufnahmen mit dem (neueren) perl-script, bis auf die farbe bei mir, exzellent sind. ich war ganz überrascht.
da ich auch noch was kreatives zu deinem projekt beitragen will, hier noch meine .xawtv kabel hh city:
http://administrator.ham-radio-op.net/temp/xawtvrc.hamburg-zentrum-kabel-analog
 

marcor

Member
bussen schrieb:
Ganz einfach.
Auf der linken Seite sind die Knoepfe fuer die Einstellungen.
Damit kann man die Sachen (Aufloesung, Codec u.s.w.) einstellen.

Vergiss aber nicht, V Process und A Process zu druecken, sonst wird nicht encodiert.
Ist Sinnvoll, wenn man nur die Werbund rausschneiden moechte. Dann wird dazu nur das gewollte kopiert.

Super....und was stelle ich bei SVCD für den Sound ein?
Video dann auf SVCD(lavc)
Und Audio?
 
OP
taki

taki

Advanced Hacker
hassan schrieb:

@Hassan (und an alle, die hier mitlesen): Auch von mir frohe Ostern.

hassan schrieb:
moin taki, zunächst mal find ichs cool, dass du dir so viel mühe für das script machst. deshalb wirst du auch sicher nichts gegen ein paar verbesserungsvorschläge haben.

Im Gegenteil, auf Verbesserungsvorschläge hab ichs mit dem Thread ja gerade abgesehen :lol: .

hassan schrieb:
1. ganz wichtig: wenn ich dein script mit ./tv.pl aufrufe, erscheint eine falsche kommandosyntax zum fernsehen: "tv -play -sender sender". richtig:"tv -sender SENDER -play" (wie in deiner doc). mit erstem seh ich immer den zuletzt gesehenen sender.

Das Problem liegt an der Verwendung von Perl und der Funktion getoptions. Die Optionen -play, -record, -recordMovie und -recordSerial rufen direkt die jeweilige Funktion in dem Script auf. Sie müssen leider zwingend als letztes angegeben werden, weil sonst die anderen Parameter nicht mehr ausgewertet werden.

hassan schrieb:
2. man muss in deinem script vor der ersten fernsehaufnahme das zielverzeichnis editieren. ich würde das gerne zusammen mit dem filmtitel abgefragt werden.

Hier bin ich mir nicht sicher. Besser Pfad und Titel getrennt abfragen? In mogos Script steht der Titel hinter der Sender- und Zeitangabe. Wenn ich Pfad und Titel zusammen abfrage, müsste ich den Titel an den Anfang setzen. Ich bin mir hier einfach nicht sicher, was besser ist.

Ich könnte Titel und Sender- und Zeit tauschen und Titel und Pfad gemeinsam abfragen. Wenn der Pfad fehlt, schreibt aber das Script in das aktuelle Verzeichnis. Das wäre bei Zeitgesteuerter Aufnahme das Root-Verzeichnis, wo das Schreibrecht fehlt.

Ich werde Pfad und Titel getrennt abfragen. Der Pfad kann dann auch als Parameter vorgegeben werden. Diesen Parameter sollte man in die Startverknüpfungen mit aufnehmen, da wahrscheinlich jeder einen Standardpfad hat, wo die Aufnahmen zunächst landen sollten.

Wenn mir jemand eine bessere Lösung nennt, nehme ich gerne Anregungen entgegen.

hassan schrieb:
3. ich würde auch gerne sekundengenau aufnehmen können,

Bau ich wieder ein. In meinem Bash-Script wars ja noch sekundengenau. Bei mogo war es das nicht und ich sah dann auch nicht mehr unbedingt einen Sinn darin. Andererseits nehme ich auch ungerne Features wieder weg, die schon mal da waren und wenn es jemand brauchen kann, soll es auch möglich sein.

hassan schrieb:
bei der play-option kannste die zeit doch ganz rausnehmen, oder?

Hab ich doch schon. Hab ich das falsch dokumentiert?

[editiert]Ja, hatte ich, das habe ich inzwischen auf der HP berichtigt.[/editiert]

hassan schrieb:
4. ich würde mir ansich eine kurze befehlszeile wünschen. "tv record" oder "tv play" reicht doch. dann kommen mit kdialog die abfragen nach sender, zeit, (farbe?), titel, pfad (bei erststart).

Die langen Optionen sind dafür da, dass man das auch nicht interaktiv verwenden kann. Das ist auch notwendig, weil das Script bei der zeitgesteuerten Aufnahme einen Aufruf auf sich selbst bei at oder in die crontab einträgt.

Das -i schaltet die Anzeige der Angaben mit der letzten Abbruchmöglichkeit ein. Ansonsten gilt: Jeder fehlende Parameter wird erfragt.

Der Pfad ist für zeitgesteuerte Aufnahmen notwendig. Das Script trägt sich selbst bei at bzw. in die crontab ein. Ohne Pfad funktioniert der Aufruf über diese Tools nicht.

Weil die Pfadangabe lästig ist, empfehle ich, sich Verknüpfungen einzurichten. Ein Vorschlag, wie man diese erzeugt und was da drin stehen muss, habe ich auf der HP mit Hardcopies beschrieben.

hassan schrieb:
ich will noch erwähnen, dass die aufnahmen mit dem (neueren) perl-script, bis auf die farbe bei mir, exzellent sind. ich war ganz überrascht.

Besser als beim alten Bash-Script? Dann sind wohl mogos Einstellungen besser. Bis auf die höhere Auflösung (mein Anteil) sind mogos Optionen drin.

hassan schrieb:
da ich auch noch was kreatives zu deinem projekt beitragen will, hier noch meine .xawtv kabel hh city:
http://administrator.ham-radio-op.net/temp/xawtvrc.hamburg-zentrum-kabel-analog

Dann werde ich das gleich mal mit bestem Dank in die HP verlinken.

Gruß, Taki
 

bussen

Member
@marcor

Wenn du das genauer Erlaeutert haben moehtest, dann mach doch nen neuen Tread auf.
Sonst wird das hier ein ziemliches durcheinander.
 
OP
taki

taki

Advanced Hacker
Die jeweils aktuellste Fassung findet Ihr wie gehabt über den Link im ersten Posting.

Steuerung der Soundausgabe
Danke an marcor für die Idee zur Verwendung von amix.
Die aktuelle Version setzt vor der Aufnahme den Audiokanal auf capture und mutet die Soundausgabe. Nach der Aufnahme werden diese Einstellungen zurückgesetzt. Welcher Mixerkanal verwendet wird, wird im Hardwareprofil definiert (muss man ggf. im Script an die eigenen Verhältnisse anpassen).

Dazu siehe auch hier: http://www.linux-club.de/viewtopic.php?p=156057#156057


Kontrast und Sättigung
Ich habe hassans Einstellungen in das Script eingefügt. Die Änderung wirkte sich nicht negativ auf meine Ausgabe aus, daher sparte ich mir den Aufwand, diese Einstellungen optional zu machen. Wenn jemand Probleme mit den Einstellungen zur Farbsättigung und zum Kontrast haben sollte, bitte posten. Dann mache ich das über das Hardwareprofil einstellbar.


v4lcfg-Problem beim Einstellen des Senders
Ein Problem ist mir aufgefallen, welches wahrscheinlich nur wenige
betrifft. Meine TV-Karte hat einen etwas eigenwilligen Tuner. Das Setzen des Senders mit 'v4lctl setprogram SENDERNAME' funktioniert mit meiner Karte nur sporadisch.

Bei meinen ersten Tests hatte ich begeistert festgestellt, dass es funktioniert hatte. So war eine der wichtigsten Probleme scheinbar gelöst: Die Sendertabelle ist nun extern und wird auch noch über eine Standardanwendung erstellt.

Als ich nun gestern etwas von VOX aufnehmen wollte, stellte v4lctl den Sender leider nicht um. So nahm ich denn nicht den Film auf, den ich sehen wollte, sondern irgendetwas von KiKA :oops: .
dmesg zeigt auch an, dass der Tuner sich ausserstande sah, sich auf den Sender einzustellen. Das passiert nicht immer, aber oft.

Wenn ich v4lctl verwende, wird über den Kanal geschaltet. Wenn ich mit mplayer / mencoder auf einen Kanal setze, bekomme ich genau wie bei v4lctl Probleme. Mal geht es, oft nicht!

Stelle ich dagegen mit mplayer / mencoder den Sender über die Frequenz ein, funktioniert es immer korrekt.

Fazit
Ich werde im Script eine Option vorsehen, mit der man die Methode zum Umschalten einstellen kann.

Ich nehme mir die Freiheit heraus, in die Konfigurationsdatei von xawtv eine weitere Zeile je Sender hinzuzufügen. xawtv wird diese Zeile ignorieren, aber tv.pl Script wird dort die Frequenz auslesen können.

Wer über Frequenz umschalten will, hat nun aber das Problem, dass er die Frequenzen für alle Sender in die Kanalliste eintragen muss. Für Berlin-Staaken-Kabel-Analog werde ich die um die Frequenzen erweiterte Liste wieder über die HP verfügbar machen.


Bedienbarkeit
Ich will die Angabe der Steuerfunktion (-play, -record, -recordMovie, -recordSerial) optional machen. Wird diese Option weggelassen, sollen die Optionen zur Auswahl im Dialog angeboten werden. Dann braucht man nur noch eine einzige Verknüpfung anlegen (/pfad/zu/tv.pl -i -pfad /pfad/zu/videos).
 
OP
taki

taki

Advanced Hacker
Funktionsschalter kann weggelassen werden
Den Funktionsschalter (-play, -record, -recordMovie oder -recordSerial) darf man weglassen. Die Funktion wird dann erfragt.
Wird der Dialog abgebrochen, wird noch die Hilfe angezeigt, ehe der Lauf abgebrochen wird. (Die Hilfe sieht noch nicht so schön aus, an der arbeite ich noch 8) ).

Einstellungen zum Hardwareprofil parametrisierbar
Man kann jetzt alle Einstellungen zum Hardwareprofil über Parameter steuern, die man sich am besten in die Startverknüpfung einträgt.

Option, um statt des Kanals die Frequenz zu verwenden
Für Anwender, die einen zickigen Tuner auf der Karte haben (z.B. Medion saa7134 aus dem Aldirechner von März 2003) gibt es eine neue Option.
Mit -useFrq wird das Programm nicht mit 'v4lcfg setprogramm Sendername' gesetzt. Statt dessen wird die Frequenz aus der xawtvrc ausgelesen und als Parameter an mencoder / mplayer übergeben. Das setzt allerdings eine frisierte xawtvrc voraus. Man muss unter der Kanalangabe ('channel=KANAL', KANAL im Format NNN.NNN) eine neue Zeile einfügen ('freq=FREQUENZ'). Wer ein Beispiel braucht, kann meine xawtvrc von der HP downloaden.

audiomixerdev
Den Kanal für aumix stellt man mit '-audiomixerdev Mixerdevice' ein. Wenn audiomixerdev nicht gesetzt ist, wird aumix nicht aufgerufen.

Vorschläge für eine Startverknüpfung
Code:
/usr/bin/tv.pl -i -pfad /pfad/zu/videos -audiomixerdev="Video" -useFrq
Aktiviert die Mixereinstellungen für "Video" und schaltet das Programm über die Frequenz statt über den Kanal.

Code:
/usr/bin/tv.pl -i -pfad /pfad/zu/videos -audiomixerdev="Cd1" -saturation 100
Aktiviert die Mixereinstellungen für "Cd1" und setzt die Farbsättigung beim mencoder auf 100 bzw. den Kontrast beim mplayer auf 10 (Gruß @hassan)

Code:
/usr/bin/tv.pl -i -pfad /pfad/zu/videos -driver v4l -nice 17
Verwendet v4l anstelle von v4l2 als Treiber, ruft mencoder ggf. mit "sudo nice -17 ..." auf (setzt aber voraus, dass sudo entsprechend konfiguriert ist) (Gruß @mogo)





offene Punkte
Momentan muss man noch mit '-audiomixerdev ""' ' den Parameter überschreiben, weil ich den Parameter im Script mit "Video" vorbelegt habe, das nehme ich aber heute abend raus, die Vorbelegung soll zukünftig sein, dass der Parameter nicht gesetzt ist (nächste Version kommt voraussichtlich heute abend).

[editiert 30.03.2005 ca 15:00]
Das mit dem Abschalten funktioniert nicht, s.a. http://www.linux-club.de/viewtopic.php?p=156471#156471

Lösung: Script wie im anderen Thread beschrieben ändern oder Version 0.04 abwarten, welche ich noch heute abend uploaden werde und welche diese Änderung enthalten wird.
[/editiert]


[editiert 30.03.2005 22:33]
Das Script ist seit 22:00 aktualisiert (http://www.andreas-silberstorff.de/tv_perl/download/tv.pl.tar.gz).
Die Vorbelegung ist jetzt, dass $audiomixerdev nicht belegt ist. Das Handbuch ist auch aktualisiert (http://www.andreas-silberstorff.de/tv_perl).
[/editiert]


Mit der aumix-Steuerung bin ich mir leider noch nicht so sicher, ob das klappt. Bei meiner Karte schadet der aumix-Aufruf zwar nicht, aber er bewirkt auch nichts :? . Ich werde mich heute abend mal genauer mit der manpage von aumix beschäftigen. Vielleicht muss ich dann doch wie von marcor vorgeschlagen die Lautstärke anpassen. Ich möchte aber die alten Mixereinstellungen nach der Aufnahme wieder herstellen können, deshalb wollte ich mute / unmute verwenden. Besonders ärgerlich finde ich, dass "aumix set Video capture" bzw. "aumix set Video captureOff" wirkungslos sind. Das hätte die Aufnahme für viele einfacher gemacht. Es bleibt also definitiv noch was zu tun, keine Zeit für Langeweile... :lol:
 
OP
taki

taki

Advanced Hacker
Das Script kann jetzt auch als RPM installiert werden.

Das RPM kann unter SuSE installiert werden, indem man mit der rechten Maustaste auf den Link klickt und aus dem Kontextmenü die Vorschau mit KRPMView auswählt. http://www.andreas-silberstorff.de/tv_perl/download/RPMS/noarch/tv_perl-0.4b-1.noarch.rpm

Wer kein RPM installieren kann oder will, kann das Script auch als tarball bekommen.
http://www.andreas-silberstorff.de/tv_perl/download/tv.pl.tar.gz

Unter der folgenden URL gibt es ein kleines Handbuch zum Srcipt. http://www.andreas-silberstorff.de/tv_perl/)

Dort finden sich auch Downloadlinks zum Specfile und zum SRC.RPM. Das RPM ist das erste von mir from scatch erstellte RPM. Es sollte aber zumindest keinen Schaden anrichten können :)

Wenn ich wieder mal Zeit habe, will ich einen Installer erstellen, der beim Einrichten der Startvernküpfung helfen soll.
 

jwartenb

Member
Hallo,

ich bin dabei für das Kabelnetz Kaiserslautern eine .xawtvrc zu erstellen.
Dabei sind mir folgende Punkte aufgefallen:

die Eingabe einer Uhrzeit in der Form H:M:SS (bspw. 0:0:15) bei Sofortaufnahme führt zu einer falschen Auswertung der Uhrzeit. Folgendes Kommando wird erzeugt
Code:
...
-endpos 0:0:0:0:15 -vf pp=hb/vb/dr/al/lb,denoise3d,scale=768:576
-o /hhh_2005-4-4_7-41_SW 3 Rheinland-Pfalz.avi

Sendernamen mit Leerzeichen (bspw. "SW 3 Rheinland-Pfalz") führen
zu falschen Dateinamen (wieder mit Sofortaufnahme):
Code:
...
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, 16 bit (0x10), ratio: 176400->176400 (1411,2 kbit) Selected audio codec: [pcm] afm:pcm (Uncompressed PCM) ==========================================================================
Cannot open output file '/home/jochen/MyTmp/vvv_2005-4-4_7-42_SW'.

Sendernamen mit Leerzeichen führen bei der Option useFreq zur Meldung, dass keine Frequenz eingetragen ist. Eine Frequenz ist eingetragen und nach nach eliminieren der Leerzeichen funktioniert es auch.

Noch eine Frage: warum wird für scale 768:576 angegeben ? Ich habe diesen Wert zwar schon öfters beim googeln gesehen, aber noch keine Begründung gefunden. Bei mir führt dieser Wert zu einem zu hohem Bild (Auflösung: 1280x1024).

Ein dickes Lob: das Script funktioniert besser als xawtv, kdetv ...

Dank & Gruß
Jochen
 
OP
taki

taki

Advanced Hacker
jwartenb schrieb:

Hallo.

jwartenb schrieb:
ich bin dabei für das Kabelnetz Kaiserslautern eine .xawtvrc zu erstellen.

Prima.

jwartenb schrieb:
Dabei sind mir folgende Punkte aufgefallen:

die Eingabe einer Uhrzeit in der Form H:M:SS (bspw. 0:0:15) bei Sofortaufnahme führt zu einer falschen Auswertung der Uhrzeit. Folgendes Kommando wird erzeugt
Code:
...
-endpos 0:0:0:0:15 -vf pp=hb/vb/dr/al/lb,denoise3d,scale=768:576
-o /hhh_2005-4-4_7-41_SW 3 Rheinland-Pfalz.avi

...werde ich heute abend überprüfen. Wahrscheinlich kommen da die Parameter durcheinander (Startwert in Dauer gemischt?). Müsste sich finden lassen.

jwartenb schrieb:
Sendernamen mit Leerzeichen (bspw. "SW 3 Rheinland-Pfalz") führen
zu falschen Dateinamen (wieder mit Sofortaufnahme):
Code:
...
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, 16 bit (0x10), ratio: 176400->176400 (1411,2 kbit) Selected audio codec: [pcm] afm:pcm (Uncompressed PCM) ==========================================================================
Cannot open output file '/home/jochen/MyTmp/vvv_2005-4-4_7-42_SW'.

Sendernamen mit Leerzeichen führen bei der Option useFreq zur Meldung, dass keine Frequenz eingetragen ist. Eine Frequenz ist eingetragen und nach nach eliminieren der Leerzeichen funktioniert es auch.

Vorerst muss ich leider von Leerstellen im Sendernamen und im Videotitel abraten. Hier kommen ganz offensichtlich die Parameter durcheinander. Da muss ich prüfen, ob ich das mit Entwertung in den Griff bekomme. Wird nicht einfach, weil u.U. mehrfach entwertet werden muss, aber lößbar ist das bestimmt.

jwartenb schrieb:
Noch eine Frage: warum wird für scale 768:576 angegeben ? Ich habe diesen Wert zwar schon öfters beim googeln gesehen, aber noch keine Begründung gefunden. Bei mir führt dieser Wert zu einem zu hohem Bild (Auflösung: 1280x1024).

Sie sieht am PC gut aus (wenn das Ausgangsmaterial besser wäre, sogar besser noch als DVDs) und ich kann damit die Videos auch unterwegs anschauen.

Diese Auflösung ist die (inoffizielle) maximale vom Archos AV 420 unterstützte Auflösung. Offiziell kann der Archos nur 720x576, was nicht einmal 4:3 ist und häßliche Balken an den vertikalen Rändern erzeugt.

Damit sind wir auch schon bei einem weiteren Faktor, auf den man bei der Auflösung achten muss.

Folgende Faustregeln sollte man sich merken:

  1. Beide Werte müssen durch 16 teilbar sein.
  2. Das Verhältnis zwischen beiden Werten sollte 4:3 oder 16:9 sein.

Die erste Faustregel ist zwingend, sonst wird mencoder wahrscheinlich den Dienst verweigern. Die zweite ist wichtig, wenn man die Filme auf verschiedenen Plattformen betrachten möchte.

Da jeder andere Vorstellungen haben kann, was die optimale Auflösung ist, kann man sie in der Startverknüpfung überlagern. Falls man langsamere Hardware hat, sollte man eine geringere Auflösung wählen. Ich muss später mal ein wenig googeln, irgendwo habe ich mal eine Tabelle der Standard-Auflösungen verschiedener Medien gesehen. Die werde ich dann auf der HP verlinken.

Übrigens, wer für bestimmte Zielplattformen andere Auflösungen gefunden hat, die besser funktionieren, darf sie auch hier posten. Auf der HP würde sich eine Tabelle gut machen, die bestimmte erprobte Auflösungen für bestimmte Zielplattformen wiedergibt.

jwartenb schrieb:
Ein dickes Lob: das Script funktioniert besser als xawtv, kdetv ...

Das ist der Sinn des Scripts :.-): , wollen hoffen, dass es bald perfekt für seine Aufgabe wird.

jwartenb schrieb:

Nicht dafür... Eigentlich sammle ich doch nur die guten Ideen ein, die andere hier im Forum posten. Mir macht das Spaß, ich lerne eine menge dabei und bekomme jede Menge guter Anregungen. Und wenn andere mit dem Script Erfolg vermelden, ist das der größte Dank, den es geben kann.
Gruß,
Taki.
 
OP
taki

taki

Advanced Hacker
Version 0.05 des Perlscripts ist seit 23:45 auf der HP angekommen.

Diese Version kann mit Leerzeichen und (normalen) Klammern im Dateinamen, im Sendernamen und im Pfad umgehen.

Der Pfad ist in der Voreinstellung leer. Wird er nicht angegeben, kommt eine Verzeichnisauswahl. Hat man einen Standardpfad, trägt man diesen in die Startverknüpfung ein.

Die Hilfe wurde etwas verbessert. Man kann sie auch direkt aus der Funktionsauswahl heraus aufrufen.

Ausserdem wurde ein übler Fehler bei der Serienaufnahme entdeckt und behoben (ich hatte die Dauer anstelle der Startzeit für cron verwendet). :oops:

RPM und tarball gibt es wieder am üblichen Ort:

http://www.andreas-silberstorff.de/tv_perl
 
Oben