3

私の目標は、入力としてAVIファイルを受け取り、それをDVDに書き込むために必要なことをすべて実行するプログラムを作成することです。

現在、私はこれを達成するために3つの別々のプログラムを使用しています。最初のツールでは、AVIファイルからMPEGに変換する必要があります。2番目のツールはそのMPEGを取得し、DVDファイル(VIDEO_TSフォルダーとその中にいくつかのファイル)を作成します。3番目のツールは、フォルダをDVDに書き込みます。これらの3つのツールを1つに統合し、可能であればAVIからMPEGへの変換をスキップして、DVDファイルを作成して書き込みます。

ターゲットプラットフォームはWindows7で、使用する言語は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)
4

3 に答える 3

4

Windowsを使用していることは承知していますが、Linuxで複数のAVIからDVDを作成するための手順は次のとおりです。主な3つのプログラムはffmpeg、トランスコーディングを実行しdvdauthor、DVDファイルシステムを構築し、DVDファイルシステムからgrowisofsDVDイメージを作成することです。私はあなたがグーグルを通してそれらのそれぞれのためのウィンドウズバイナリを見つけることができると思います(私はかなり速く見つけることができましたが、私はすべてのリンクを貼り付けたくありません)。

  • 各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ファイルに関するすべての詳細を確認することをお勧めします。/dev/dvd/また、growisofsコマンドでWindowsDVDバーナードライブ文字に置き換える必要があります。

aviからmpeg-2へのトランスコードをスキップできるというあなたの希望について:これを行う方法はなく、MPEG-PS(プログラムストリーム)コンテナでMPEG-2ビデオを厳密に要求するDVD標準と互換性を持たせることはできません。

于 2010-02-16T01:29:41.063 に答える
1

Primo DVDコンポーネントを試してみてください。また、mpeg-2エンコーディングライブラリもあります。

または、 ffmpegライブラリを使用してavisをcvonvertします。

于 2010-02-15T21:41:53.497 に答える
1

問題は、ビデオDVD(つまり、通常のDVDプレーヤーで再生されるもの)を作成するのか、それともビデオを含むファイルをデータDVDディスクに保存するのかということです。

DVDプレーヤーで再生できるものが必要な場合は、それをAVIからDVDプレーヤーが期待するMPEG 2エンコーディングにトランスコードしてから、MPEG2ビットストリームをVOBファイルに変換し、VIDEO_TS(およびそのような)DVDに必要なディレクトリ。

ファイルをデータDVDに書き込むだけの場合は、(一例として)MicrosoftのImage Mastering API(IMAPI)を使用できます。APIのバージョン2は最新のものだと思います。したがって、使用する必要がある主なものは、COMインターフェイスIFileSystemImage(イメージファイルを作成するため)とIDiscFormat2Dataでデータをディスクに書き込むことです。

于 2010-02-15T22:24:36.317 に答える