ted morris wrote:

Greetings,

I would like to capture video w/o having to reset the card(s) with awtv,tvtime, etc.,etc.
through X.

It can be done with mencoder so I am assuming there must be some 'trick' to doing it with transcoder. As claimed by a student over here the mencoder command looks
like this:

mencoder -ffourcc XVID -oac lavc -ovc lavc -lavcopts
vcodec=mpeg4:mv0:trell:v4mv:vbitrate=3000:ildct:aspect=16/9:acodec=mp2
-tv driver=v4l2:norm=ntsc:input=2:adevice=/dev/dsp:width=720:height=480
-o /videos/test.avi tv://

Here is a command I have been using for quite a while which captures perfectly the way I want but still requires starting x, running tvtime (for example), then closing x:

I used a very similar transcode command a couple of years ago for realtime compression of TV feeds.

I compiled a very small utility called v4lfreq. I didn't write it, but I've attached the source (v4lfreq.c) to this mail so you can give it a try.

Other parameters than the frequency (tv mode, PAL/NTSC, etc) can be set with the command-line tool v4l-conf (I think that's the name anyway, it's been a while).

Hope it works for you. Don't give up, I've done it for years, so it's definitely possible.

--
Med venlig hilsen
Christian Iversen

/* channelchanger.c  2002/08/21
 *
 * Bill Eldridge, Radio Free Asia, 2002, GPL (see www.gnu.org)
 * http://techweb.rfa.org/staff/bill
 * b...@rfa.org
 *
 * Very simple program to change channels (well, "frequencies")
 * on a video device.
 *
 * Requires the device not be in use or that it be v4l2
 *
 * Has NOT been tested well. Use at your own risk.
 * Specifically, you might want to mute audio between
 * changes, etc.
 *
*/

#ifndef CONFIG_WIN32
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <termios.h>
#include <sys/resource.h>
#endif
#ifdef __BEOS__
#include <OS.h>
#endif

#include <time.h>
#include <ctype.h>
#include <string.h>
#include <stdio.h>


#include <linux/videodev.h>
#include <stdlib.h>

int video_fd;
int ret;
char v4l_device[40];
unsigned long new_freq;

int main(int argc,char *argv[]) {

    if (argc > 2)
        strcpy(v4l_device,argv[2]);
    else
        strcpy(v4l_device,"/dev/video0");

    printf("v4l_device: %s\n",v4l_device);

    if (argc > 1) {
        new_freq=(unsigned long)(atof(argv[1])*16.);
    }
    else {
	printf("Usage: channelchanger <frequency> [videodev]\n;");
	exit(-1);
	//new_freq=196.250*16.;
    }

    video_fd = open(v4l_device, O_TRUNC); //Same as O_NOIO

    if (video_fd < 0) {
          perror(v4l_device);
	  printf("Error: %d\n",video_fd);
          exit(-1);
    }

    printf("new_freq: %6.3lf\n",(double)new_freq/16);
    ret = ioctl(video_fd, VIDIOCSFREQ, &new_freq);
    printf("Result: %d\n",ret);
    return(ret);
    
}
    

Reply via email to