朋友需要制作DVD,遇上很多问题。我帮忙查了一下,发现这方面的信息散见于各个论坛,多数仅适用于单一场景,没有一个完整统一的指导手册(因为DVD Video的标准是非公开的,付费5000美元才能得到相关授权,还必须签订保密协议)。因此尝试把相关信息整理如下。
首先,这里说的DVD,是指DVD Video。它的标准由DVD Forum制定。这个标准不仅限定了存储介质,文件系统,目录结构,也限制了视频编码方式。
DVD Video使用标准DVD光盘作为存储介质。22厘米直径,使用650nm激光读取。
DVD Video采用UDF Bridge文件系统。此文件系统兼容ISO9660文件系统。
DVD Video有如下目录结构:
视频文件就存储在\VIDEO_TS\目录下。其中.VOB文件包含视频,其它文件是各种辅助文件。比如DVD菜单和章节信息。
因为有以上要求,DVD光盘刻录软件中通常有单独的制作DVD Video的选项。选中这个选项就可以制作标准的DVD Video光盘。下面来谈一谈视频的压制和字幕的制作。
VOB文件是特定的MPEG-PS格式,其中包含视频流和音频流。一些基本的限定包括,一个VOB文件中只能包含1条视频流,最多8条音频流;此外,对于视频的分辨率,帧速和码率,都有相应的限制。详细的信息可以参见这里。
FFmpeg有专门针对VOB的选项。使用以下命令行:
ffmpeg -i input.mp4 -target ntsc-dvd output.vob ffmpeg -i input.mp4 -target pal-dva output.vob
就可以把input.mp4转化为符合标准的DVD格式,输出为output.vob。上面两条命令行的区别在于,如果你使用ntsc-dvd,输出文件的分辨率是720×480,帧速为29.97帧/秒;如果你选择pal-dvd,输出文件的分辨率是720×576,帧速为25帧/秒。ffmpeg会自动进行必要的转码。
你还可以指定其它分辨率,但是上面所使用的分辨率是DVD Video所支持的最高分辨率。因此以上命令行可以最大限度地保留分辨率。
以上是视频的处理。
在DVD Video中,字幕也是以位图形式保存在VOB文件中。字幕在VOB文件中是一个单独的媒体流。
ffmpeg -i input.mp4 -i subtitle -target ntsc-dvd output.vob ffmpeg -i input.mp4 -i subtitle -target pal-dva output.vob
以上命令即可把字幕汇入生成的VOB文件。问题是,对于VOB格式(更先进的格式,比如mp4,可以直接把文本字幕放进去),此处的字幕文件必须是图像文件序列。目前我只知道这么一个工具可以生成这样的序列:
用这个工具,把srt文件先转换为.sub格式的位图序列,然后利用上面的命令,就可以生成带字幕的VOB文件。