C ++的 – 我需要什么库或命令行程序来创build一个程序,需要一个AVI文件,并将其刻录到DVD?

我的目标是创build一个程序,将一个AVI文件作为input,然后做任何必要的刻录到DVD。

目前,我使用三个独立的程序来完成这个任务。 第一个工具需要我把它从AVI文件转换成MPEG。 第二个工具采用该MPEG并创buildDVD文件(一个VIDEO_TS文件夹,里面有几个文件)。 第三个工具将文件夹刻录到DVD。 我想将这三个工具合并为一个,如果可能的话,跳过AVI到MPEG的转换,然后创buildDVD文件并刻录它们。

目标平台是Windows 7,我将要使用的语言是C ++。

什么图书馆或命令行程序将帮助我追求荣耀?

编辑:澄清,我想创build一个videoDVD在DVD播放机上播放电影。 (谢谢杰里)

编辑2:我结束了在Linux上使用Python自动化的一切。 这是脚本,以防万一需要。 (注意:这是我的第一个Python脚本,所以它可能不是很好)

import sys import os import shutil from subprocess import call # step 1: call ffmpeg and convert the input avi to an mpeg-2 def avi_to_mpeg(input, output): return call(["ffmpeg", "-i", input, "-target", "ntsc-dvd", "-threads", "4", output]) # step 2: create the xml file needed for dvdauthor def create_xml_file(mpg_source, xml_file): with open(xml_file, "w") as file: file.write("<dvdauthor>\n") file.write("\t<vmgm />\n") file.write("\t<titleset>\n") file.write("\t\t<titles>\n") file.write("\t\t\t<pgc>\n") file.write("\t\t\t\t<vob file=\"" + mpg_source + "\" />\n") file.write("\t\t\t</pgc>\n") file.write("\t\t</titles>\n") file.write("\t</titleset>\n") file.write("</dvdauthor>\n") return os.path.isfile(xml_file) # step 3: invoke dvdauthor def author_dvd(mpg_source): return call(["dvdauthor", "-o", "mkdvd_temp", "-x", xml_file]) # step 4: finally, burn the files to the dvd def burn_dvd(dvd_target): return call(["growisofs", "-Z", dvd_target, "-dvd-video", "mkdvd_temp"]) # step 5: clean up the mess def clean_up(mpg_source, xml_file): shutil.rmtree("mkdvd_temp") os.remove(mpg_source) os.remove(xml_file) def eject(dvd_target): return call(["eject", dvd_target]) def print_usage(): print "mkdvd by kitchen" print "usage: mkdvd -s file.avi -t /dev/disc" print " -s : Input .AVI file" print " -t : Target disc, /dev/dvd for example" def get_arg(sentinel): last_arg = "" for arg in sys.argv: if last_arg == sentinel: return arg last_arg = arg return None # program start avi_source = get_arg("-s") # input .avi file dvd_target = get_arg("-t") # the disc to burn it to (/dev/dvd for example) if avi_source == None or dvd_target == None: print_usage() sys.exit("Not enough parameters.") if os.path.isfile(avi_source) == False: sys.exit("File does not exists (" + avi_source + ")") mpg_source = avi_source + ".mpg" if avi_to_mpeg(avi_source, mpg_source) != 0: sys.exit("Failed to convert the AVI to an MPG") xml_file = mpg_source + ".xml" if create_xml_file(mpg_source, xml_file) == False: sys.exit("Failed to create the XML file required by dvdauthor") if author_dvd(mpg_source) != 0: sys.exit("Failed to create the DVD files") if burn_dvd(dvd_target) != 0: sys.exit("Failed to burn the files to the disc") print "mkdvd has finished burning " + avi_source + " to " + dvd_target print "Cleaning up" clean_up(mpg_source, xml_file) eject(dvd_target) 

我知道你正在使用Windows,但这里是我从Linux上的多个AVI创建DVD的步骤。 主要的三个程序是转码, dvdauthor构建DVD文件系统,并增加DVD映像到DVD文件系统。 我认为你可以通过谷歌找到每个人的Windows二进制文件(我只是能够很快,但我不想粘贴所有的链接)。

  • 转码每个AVI:

     ffmpeg -i <infile.avi> -target ntsc-dvd -threads 2 <outfile.mpg> 
  • 为DVD作者创建xml文件:

    例:

     <dvdauthor dest="dvd"> <vmgm> </vmgm> <titleset> <titles> <pgc> <vob file="<file1.mpg>" chapters="0,5:00,10:00,15:00,20:00,25:00,30:00,35:00,40:00" /> </pgc> <pgc> <vob file="<file2.mpg>" chapters="0,5:00,10:00,15:00,20:00,25:00,30:00,35:00,40:00" /> </pgc> </titles> </titleset> </dvdauthor> 
  • 创建DVD文件结构(将在上面显示的dest中创建它):

     dvdauthor -x <xmlfile.xml> 
  • 将文件系统卷成一个iso并刻录。

     growisofs -Z /dev/dvd -dvd-video dvd/ 

    DVD / DVD是创建DVD文件系统的地方。

通过调用正确的命令行程序并创建dvdauthor xml文件,这个过程可以很容易地自动化。 您将需要阅读dvdauthor的文档,以找出有关定义DVD的xml文件的所有详细信息。 您也可能需要将growisofs命令中的/dev/dvd/替换为Windows DVD刻录机驱动器号。

关于您希望您可以跳过从avi到mpeg-2的转码:没有办法做到这一点,仍然使其与MPEG-PS(节目流)容器中严格要求MPEG-2视频的DVD标准兼容。

试用Primo DVD组件 ,他们也有一个mpeg-2编码库。

或者,使用ffmpeg库来改变你的avis。

问题是你是否想要创建一个视频DVD(即可以在普通的DVD播放器上播放的东西),或者只是将恰好包含视频的文件保存到数据DVD光盘。

如果你想要在DVD播放机上播放的东西,那么你需要将它从AVI转码成DVD播放机所期望的MPEG2编码,然后将MPEG2比特流转换成VOB文件,然后创建VIDEO_TS(和这样的)任何DVD所需的目录。

如果您只想将文件刻录到数据DVD,则可以使用(例如)Microsoft的Image Mastering API(IMAPI); 我相信API的版本2是最新的,所以你需要使用的主要东西是COM接口IFileSystemImage(创建一个图像文件)和IDiscFormat2Data将数据写入光盘。