【发布时间】:2012-01-04 17:05:21
【问题描述】:
我是 FFMpeg 的新手,所以这可能是一个愚蠢的问题,但我在文档中看不到答案。
我想从 DVD vob 文件中解码帧。打开组中的第一个 VOB 工作正常,但我如何告诉 ffmpeg 继续到下一个 VOB 并读取 DVD 上的所有 VOB?
我在硬盘上的一个文件夹中保存了 VOB 文件。
【问题讨论】:
我是 FFMpeg 的新手,所以这可能是一个愚蠢的问题,但我在文档中看不到答案。
我想从 DVD vob 文件中解码帧。打开组中的第一个 VOB 工作正常,但我如何告诉 ffmpeg 继续到下一个 VOB 并读取 DVD 上的所有 VOB?
我在硬盘上的一个文件夹中保存了 VOB 文件。
【问题讨论】:
VOB 格式是mpeg 的子集,因此您应该能够像将 mpeg 数据一样组合您想要读取的 VOB:通过将它们连接在一起。
cat first.VOB second.VOB third.VOB | ffmpeg -i - outfile.mp4
提升Matt Gallagher's comment 以增加寿命/知名度:
较新版本的 ffmpeg 支持连接作为输入文件的运算符。所以你可以使用...
ffmpeg -i concat:VTS_01_0.VOB\|VTS_01_1.VOB\|VTS_01_2.VOB outfile.mp4
【讨论】:
cat 的串联输出直接通过管道传输到从标准输入读取的ffmpeg。这就是-i - 的含义。速度应该没有差别。
您实际上可以使用 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
【讨论】:
-sn,因为这只会删除您可能不想要的字幕。您还应该能够删除-f mpeg
内置的连接功能似乎是基于 *NIX 的,对我来说在 Windows 上不起作用。在 Windows 上,VobMerge 似乎可以加入相关的 VOB 文件(DVD 上的主要电影似乎是从 1GB 大小开始的设置)。
附录
你也可以在Windowsdirectly from the command line加入VOB文件:
copy /b "vob1.vob" + "vob2.vob" + "vob3.vob" "voboutput.vob"
如果文件名中没有空格,您可以省略引号,但请务必记住 /b 和所有 + 符号。
【讨论】:
在 Windows 中,我更喜欢“重构”连接,也不依赖预定义的文件名:
copy /b e:\VIDEO_TS\vts*.vob temp.vob
ffmpeg -i temp.vob .... newfile.ogg
/b 表示:二进制拷贝;否则换行符等会被区别对待。
注意事项:
【讨论】: