31

我是 FFMpeg 的新手,所以这可能是一个愚蠢的问题,但我在文档中看不到答案。

我想从 DVD vob 文件中解码帧。打开组中的第一个 VOB 工作正常,但我如何告诉 ffmpeg 继续到下一个 VOB 并读取 DVD 上的所有 VOB?

我在硬盘上的一个文件夹中有 VOB 文件。

4

4 回答 4

31

VOB 格式是mpeg的一个子集,因此您应该能够像 mpeg 数据一样组合您想要读取的 VOB:通过将它们连接在一起。

cat first.VOB second.VOB third.VOB | ffmpeg -i - outfile.mp4

提升Matt Gallagher 的评论以增加寿命/知名度:

较新版本的 ffmpeg 支持连接作为输入文件的运算符。所以你可以使用...ffmpeg -i concat:VTS_01_0.VOB\|VTS_01_1.VOB\|VTS_01_2.VOB outfile.mp4

于 2011-12-01T22:47:48.167 回答
14

您实际上可以使用 ffmpegs 内置连接功能,这是我认为您正在寻找的:

ffmpeg -i "concat:$(echo *.VOB|tr \  \|)" -f mpeg -c copy -sn -y combined.mpg

参见: http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20concatenate%20( join,%20merge)%20media%20files

于 2013-07-15T19:53:15.407 回答
6

内置的连接功能似乎是基于 *NIX 的,对我来说在 Windows 上不起作用。在 Windows上, VobMerge似乎可以加入相关的 VOB 文件(对于 DVD 上的主要电影来说,这似乎是从 1GB 大小开始的集合)。

附加物

您还可以直接从命令行加入 Windows 中的VOB 文件:

copy /b "vob1.vob" + "vob2.vob" + "vob3.vob" "voboutput.vob"

如果文件名中没有空格,您可以省略引号,但请务必记住 the/b和所有+符号。

于 2015-04-19T12:03:44.810 回答
0

在 Windows 中,我更喜欢“重构”连接,也不依赖预定义的文件名:

copy /b  e:\VIDEO_TS\vts*.vob  temp.vob
ffmpeg -i temp.vob .... newfile.ogg

/b 表示:二进制拷贝;否则换行符等会被区别对待。

注意事项:

  • 有时 VOB 文件不是电影的一部分,我找不到自动检测哪个是哪个的方法
  • 在慢速 I/O 系统上,这会增加大量时间:写入和读取临时文件需要时间。
于 2017-07-25T22:19:13.333 回答