gpt4 book ai didi

C++ - 我需要哪些库或命令行程序来创建一个获取 AVI 文件并将其刻录到 DVD 的程序?

转载 作者:可可西里 更新时间:2023-11-01 14:47:13 25 4
gpt4 key购买 nike

我的目标是创建一个程序,将 AVI 文件作为输入,然后执行任何必要的操作将其刻录到 DVD。

目前,我使用三个独立的程序来完成这项工作。第一个工具要求我将它从 AVI 文件转换为 MPEG。第二个工具采用 MPEG 并创建 DVD 文件(一个 VIDEO_TS 文件夹,里面有一些文件)。第三个工具将文件夹刻录到 DVD。我想将这三个工具合二为一,如果可能的话,跳过 AVI 到 MPEG 的转换,只创建 DVD 文件并刻录它们。

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

哪些库或命令行程序可以帮助我追求荣耀?

编辑:澄清一下,我想制作视频 DVD 以在 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 所采取的步骤。主要的三个程序是 ffmpeg 进行转码,dvdauthor 构建 DVD 文件系统,以及 growisofs 从 DVD 制作 DVD 镜像文件系统。我认为您可以通过 Google 找到每个文件的 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 文件结构(将在上面显示的位置创建它):

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

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

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

只需调用正确的命令行程序并创建 dvdauthor xml 文件,即可相当轻松地实现此过程的自动化。您需要阅读 dvdauthor 的文档以找出有关定义 DVD 的 xml 文件的所有详细信息。您可能还必须将 growisofs 命令中的 /dev/dvd/ 替换为 Windows DVD 刻录机驱动器盘符。

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

关于C++ - 我需要哪些库或命令行程序来创建一个获取 AVI 文件并将其刻录到 DVD 的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com