This is an old revision of the document!


DVD Title

I used to have a dvd_title binary I wrote, but I merged it into dvd_info instead. It returns the UDF volume name. It must be an ISO or the DVD itself in the drive to print it.

$ dvd_info --title
BATMAN_BEYOND_SEASON_1_DISC_2

Each disc will have a title assigned to it. This is a small string. The disc title is not a unique identifer in itself, but it can be used as an element in creating one if you are archiving your titles. I recommend using the DVD id instead.

Most programs that access your DVD will at some point usually spit it out as part of displaying the metadata.

There are a few ways to get the title from a disc. In this case, I'm using Ruby Spears Superman, disc one.

Volname is the simplest one, if you are looking to use it for a shell script:

$ volname dvd.iso
RUBY_SPEARS_SUPERMAN_DISC_01

Some other ways to get it:

lsdvd dvd.iso 2> /dev/null | grep "^Disc Title" | cut -d " " -f 3-

Or you can use dd:

dd if=VIDEO_TS.IFO bs=1 count=32 skip=64 2> /dev/null

Also, here's a small C program I wrote cobbled together from multiple sources to get it as well:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/cdrom.h>
 
/**
 * A simple little program to get the DVD title
 *
 * Checks if the device is a DVD drive or not, and if it is, also looks to see
 * if it can be polled or not.
 */
 
int main(int argc, char **argv) {
 
	int cdrom;
	int drive_status;
	int disc_status;
	char* dvd_device;
	char* status;
	char title[33];
	FILE* filehandle = 0;
	int x, y, z;
 
	if(argc == 1)
		dvd_device = "/dev/dvd";
	else
		dvd_device = argv[1];
 
	// Check if device exists
	if(access(dvd_device, F_OK) != 0) {
		fprintf(stderr, "cannot access %s\n", dvd_device);
		return 1;
	}
 
	// Open device
	cdrom = open(dvd_device, O_RDONLY | O_NONBLOCK);
	if(cdrom < 0) {
		fprintf(stderr, "error opening %s\n", dvd_device);
		return 1;
	}
 
	drive_status = ioctl(cdrom, CDROM_DRIVE_STATUS);
 
	// If the device is a DVD drive, then wait up to 30 seconds for it to be ready (not opening or closing),
	// and then check if there is a disc in the tray.  If there's no disc, exit quietly.
	// If the drive is open, then it just quietly exits.
	if(drive_status > 0) {
		int max_sleepy_time = 30;
		int num_sleepy_times = 0;
		while(ioctl(cdrom, CDROM_DRIVE_STATUS) == CDS_DRIVE_NOT_READY && num_sleepy_times < max_sleepy_time) {
			sleep(1);
			num_sleepy_times++;
		}
		if(ioctl(cdrom, CDROM_DRIVE_STATUS) != CDS_DISC_OK) {
			close(cdrom);
			return 1;
		}
	}
 
	close(cdrom);
 
	filehandle = fopen(dvd_device, "r");
	if(filehandle == NULL) {
		fprintf(stderr, "could not open device %s for reading\n", dvd_device);
		return 1;
	}
 
	if(fseek(filehandle, 32808, SEEK_SET) == -1) {
		fprintf(stderr, "could not seek on device %s\n", dvd_device);
		fclose(filehandle);
		return 1;
	}
 
	x = fread(title, 1, 32, filehandle);
	if(x == 0) {
		fprintf(stderr, "could not read device %s\n", dvd_device);
		fclose(filehandle);
		return 1;
	}
	title[32] = '\0';
 
	fclose(filehandle);
 
	y = sizeof(title);
	while(y-- > 2) {
		if(title[y] == ' ') {
			title[y] = '\0';
		}
	}
 
	for(z = 0; z < strlen(title); z++) {
		printf("%c", title[z]);
	}
	printf("\n");
 
	return 0;
}

Navigation