Multimedia - 行者无疆 始于足下 - 行走,思考,在路上

DVD视频提取转换初步研究

1 关于DVD格式

  • Digital Versatile Disc
  • DVD五种格式
    • DVD-VIDEO: 可达17G
    • DVD-ROM:
    • DVD-R: 4.7G
    • DVD-RAM: 可以作为虚拟硬盘
    • DVD-AUDIO: 比CD的音频品质好一倍
  • DVD区域码
    • DVD联盟将全世界依地理区域分为1-6区,而每一部DVD播放机及每一片DVD都会被锁定只能在某一区中播放(依产品贩卖的地区锁上相对应的区域码)。
    • 影片的锁码必须配合播放机的锁码(第1区的影片配合第1区的播放机,第2区的影片配合第2区的播放机.)你才能顺利的观赏影片!
    • 后来产的DVD播放机一般可以播放全区域的DVD
  • DVD版权保护
    • CSS(Content Scrambling System, 内容乱码系统)
    • 防类比设备翻录
    • 区码限制

2 关于VOB格式

  • vob文件用来保存所有MPEG-2格式的音频和视频数据,这些数据不仅包含影片本身,而且还有供菜单和按钮用的画面以及多种字幕的子画面流。
  • .ifo文件用于控制VOB文件的播放,在这个文件中可以找到如何控制.vob文件中数据播放的信息。
  • 有时候.ifo文件保存了一份副本,即同名的.bup文件。
  • 每个DVD光盘中都有视频管理器(VMG),它存放在VIDEOTS.ifo文件中,保存了光盘的全局信息,如光盘可以在哪个地区播放等。
  • 光盘还将用于显示菜单的数据保存在VIDEOTS.vob文件中,当光盘插入到光驱中时播放器会首先显示这个菜单,大多数菜单可让观众指定场景、选择语言字幕等。

3 关于TS流和PS流

3.1 TS流

  • DVD节目中的MPEG2格式,TS的全称则是Transport Stream。
  • MPEG-TS主要应用于实时传送的节目,比如实时广播的电视节目。
  • TS码流由于采用了固定长度的包结构,当传输误 码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。
  • 信道环境较为恶劣,传输误码较高时,一般采用TS码流
  • TS流(DVB-T,DMB-TH等)如果断了码流,后面的随时可以再开始解码怎么看都行。

3.2 PS流

  • DVD节目中的MPEG2格式,是MPEG2-PS,全称是Program Stream。
  • PS包由于长度是变化的,一旦某一 PS包的同步信息丢失,接收机无法确定下一包的同步位置,就会造成失步,导致严重的信息丢失。
  • 在信道环境较好,传输误码较低时,一般采用PS码流 如DVD等等。
  • ps流(主要用在DVD上)如是中间丢了一断码流,后面的都没法播了。

4 关于DVD格式转换

4.1 几个概念

  • angle: 高级的DVD支持同一段场景的不同视角(angle), 一般的DVD只有一个视角
  • Title Set: 基本上一个Title Set的视频为一组内容, 有的DVD会有好几个Title Set, 第一个Title Set往往是最长的, 包含了主体影片的内容; 其余的Title Set往往是一些影片花絮啥的.
  • chapter: 应该是DVD字幕上用于选择章节的东西.

4.2 GUI抓取转换工具

4.2.1 Windows

4.2.2 Linux

5 CLI工具, 自动化(脚本形式)的抓取转换工具

5.1 基本工具

  • lsdvd, 读取dvd信息, 可以得到title set, duration信息等等
  • dvdbackup, rip video DVDs from the command line, 同样可以读取dvd信息, 有时需要libdvdcss的支持, ubuntu上的安装方法可以参考Ubuntu Wiki.
  • h264enc, 交互式的抓取工具, bash脚本, 整个脚本将近一万行(支持非常多的配置选项)
  • ffmpeg and mencoder, linux下两款主要的音频和视频格式转换工具, 绝大多数的GUI工具都是这两个命令行工具的封装. 很多Windows播放器底层也是这两个. ffmpeg还有个有趣的Hall of Shame
  • mplayer and vlc, linux下两款非常有名的播放器, 功能非常qiangda, 支持framebuffer和ascii lib的输出, 很有趣.

5.2 土法炼钢提取vob视频文件并合成一整个视频文件

  • 原理: vob文件可以直接拼接(cat file1.vob file2.vob >> new_file.vob), 拼接出来的vob文件可以正常播放(测试了两个拼接的文件和拼接后转换的f4v文件, 网页和本地播放器均正常播放到结尾)
  • 思路:
    • 先将整个的DVD内容拷贝到硬盘(比较节省光驱资源)
    • 进入DVD视频文件目录(一般为VIDEO_TS)
    • 用lsdvd或者dvdbackup工具找出duration最长的title set, 提取出这个title set里面的vob文件
    • cat命令拼接这些vob成一个新的vob文件
    • 利用ffmpeg转换脚本转换成新的格式

5.3 h264enc交互式脚本合并

  • 原理: 给予mencoder的转换工具, 可以自动化的设置码率, 滤镜, crop参数, 提取vob文件合并到一个文件中(输出格式可以指定)
  • 思路:
    • 多做实验, 将每次做实验的结果进行对比, 选出最好的一组参数写成配置文件, 调用h264enc做自动化的处理

6 Todo list

  • 深入研究下mencoder的使用方法, 以及mencoder和ffmpeg的不同和关联
  • 深入了解分析下h264enc工具的脚本, 了解下h264enc的配置文件

CLI派视频音频转码工具用法小结(ffmpeg)1

1 ffmpeg 264编码支持

2 ffmpeg 参数选项简要说明

2.1 main options

  • -i filename: 指定输入文件
  • -y: Overwrite output files
  • -target: Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", … ). All the format options (bitrate, codecs, buffer sizes) are then set automatically. It is one of the most useful options of ffmpeg. It instructs ffmpeg to just "do what it takes" for the target file to be usable.

2.2 视频剪辑相关参数

  • -ss: 设定剪辑开始时间[支持[hh:mm:ss[.xxx]]格式
  • -t: 设定剪辑长度[支持[hh:mm:ss[.xxx]]格式
  • -fs: 设定文件大小限制

2.3 video options

  • -b bitrate: 设定比特率(默认为200kb/s)
  • -r fps: frame rate(默认为25)
  • -s size: set frame size
    • wxh(width x height) or
    • abbreviations(qcif(176x144), vga(640x480), wvga(852x480)
  • -aspect aspect: 设定aspect ratio(4:3, 16:9, 30:9, 1:3 or 1.333, 1.777 etc.)
  • -sameq: use same video quality as source (implies VBR).
  • -vcodec: codec: force video codec to codec. Use the copy special value to tell that the raw codec data must be copied as is.
  • -newvideo: add a new video stream to the current output stream.
  • -pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
  • -map inputstreamid[:syncstreamid]: Set stream mapping from input streams to output streams.
  • -itsoffset offset Set the input time offset in seconds. "[-]hh:mm:ss[.xxx]" syntax is also supported. This option affects all the input files that follow it.

2.3.1 crop options(视频剪裁选项说明)

  • -crop x:y:width:height: Crop the input video to x:y:width:height.
  • -croptop
  • -cropbottom
  • -cropleft
  • -cropright

2.3.2 pad and filter options

  • -vf filter_graph
  • -vf pad=width:height:x:y:color(这个命令可以给裁剪后的视频增加上下两个pad,形成电影似的效果)

2.4 audio options

  • -ar freq: set the audio sampling frequency(default=44100Hz)
  • -ab bitrate: 设定比特率(默认为64K)
  • -aq q: set the audio quality
  • -ac channels: set the number of audio channels(default=1)
  • -acodec codec: force audio codec to codec. Use the copy special value to specify that the raw codec data must be copied as is.
  • -newaudio: add a new audio track to the output file. If you want to specify parameters, do so before -newaudio (-acodec, -ab, etc..).

2.5 subtitle options

  • -scodec codec: force subtitle codec ('copy' to copy stream).
  • -newsubtitle: add a new subtitle stream to the current output stream.

2.6 disable options

  • -an: disable audio recording.
  • -vn: disable video recording.
  • -sn: disable subtitle recording.

2.7 frames

  • -dframes number: set the number of data frames to record
  • -vframes number: set the number of video frames to record
  • -aframes number: set the number of audio frames to record

2.8 preset files

  • -vpre
  • -apre
  • -spre
  • -fpre

3 ffmpeg 用法示例(see http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs for more examples)

  • Basic Usage: ffmpeg [input options] -i [input file] [output options] [output file]
  • Normally the minimum one should specify in an ffmpeg command line would be something like: ffmpeg -i INFILE -acodec ACODEC -ab 96k -vcodec VCODEC -b 500k OUTFILE …replacing the capitalised values as appropriate. When using x264, we need to add some extra bits as the defaults are bad.
  • Getting infos from a video file: ffmpeg -i video.avi
  • Turn X images to a video sequence: ffmpeg -f image2 -i image%d.jpg video.mpg
  • Turn a video to X images: ffmpeg -i video.mpg image%d.jpg
  • Extracting sound from a video, and save it as Mp3: ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
  • Convert .avi video to .mpg: ffmpeg -i video_origine.avi video_finale.mpg
  • Convert .avi to animated gif(uncompressed): ffmpeg -i video_origine.avi -pix_fmt rgb24 gif_anime.gif
  • Mix a video with a sound file: ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
  • Compress .avi to VCD mpeg2 NTSC format: ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
  • Multi-pass encoding with ffmpeg: ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2
  • Crop top 30 pixels and bottom 30 pixels to get a new video file: ffmpeg -i input_file.flv -croptop 30 -cropbottom 30 -target ntsc-dvd -aspect 16:9 output_file.mpg
  • Delaying the audio or the video: ffmpeg -i input1 -itsoffset 00:00:03.5 -i input2 ………..

4 ffmpeg learning resources

5 Related tools

5.1 transcode

5.2 mencode(from mplayer)

6 yamdi给视频增加关键帧

  • Yet Another MetaData Injector, see http://yamdi.sourceforge.net/
  • options:
    • -i: 输入文件
    • -o: 输出文件
    • -x: An XML file with the resulting metadata information.
    • -l: Adds the onLastSecond event(?).
  • other tools:
    • flvtool2: written by Ruby, slow, need more memory
    • flvmdi: not open source

7 ffmpegthumbnailer截取视频的thumbnail

  • ubuntu: sudo apt-get install ffmpegthumbnailer
  • options:
    • -i<s>: input file
    • -o<s>: output file
    • -s<n>: thumbnail size (default: 128)
    • -q<n>: image quality (0 = bad, 10 = best) (default: 8) (only for jpeg)
    • -c<s>: override image format (jpeg or png) (default: determined by filename)
    • -t<n|s>: time to seek to (percentage or absolute time hh:mm:ss) (default: 10%)
    • -a: ignore aspect ratio and generate square thumbnail
    • -f: create a movie strip overlay

8 Youku的一些探索

  • Youku网站上的大部分视频都是分段的,一般每段视频在5-10分钟之内
  • 目前Youku网上的视频格式大概有三种:
    • 高清mp4格式(h264编码)
    • 高清flv格式(h264编码)
    • 普通flv格式(应该是h263编码)

Author: Lox Freeman <xiaohanyu1988@gmail.com>

HTML generated by org-mode 6.21b in emacs 23




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee