FFMpeg open a DVD VOB chain?
質問
I'm new to FFMpeg so this may be a dumb question, but I don't see the answer in the documentation.
I want to decode frames from a DVD vob files. Opening the first VOB in the group works fine, but how do I tell ffmpeg to continue on to the next VOB and read all the VOBs on a DVD?
I have the VOB files in a folder on a hard disk.
解決
VOB format is a subset of mpeg, so you should be able to combine the VOBs you want to read in just as you would mpeg data: by concatenating them together.
cat first.VOB second.VOB third.VOB | ffmpeg -i - outfile.mp4
Hoisting Matt Gallagher's comment to increase longevity/visibility:
Newer versions of ffmpeg support concatenation as an operator on the input file. So you could use...
ffmpeg -i concat:VTS_01_0.VOB\|VTS_01_1.VOB\|VTS_01_2.VOB outfile.mp4
他のヒント
You can actually use ffmpegs builtin concatenation functionality, which is what I think you're looking for:
ffmpeg -i "concat:$(echo *.VOB|tr \ \|)" -f mpeg -c copy -sn -y combined.mpg
See: http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20concatenate%20(join,%20merge)%20media%20files
The built-in concatenate functionality seems to be *NIX based and didn't work on Windows for me. On Windows VobMerge seemed to work to join the relevant VOB files (which for the main film on a DVD seemed to be the set starting at 1GB in size).
Addenda
You can also join VOB files in Windows directly from the command line:
copy /b "vob1.vob" + "vob2.vob" + "vob3.vob" "voboutput.vob"
You can omit the quotes if there are no spaces in the filenames, but be sure to remember the /b
and all the +
signs.
in windows I preferred to "refactor" concatenation, and also not to rely on predefined filenames:
copy /b e:\VIDEO_TS\vts*.vob temp.vob
ffmpeg -i temp.vob .... newfile.ogg
/b means: binary copy; otherwise newlines and such are treated differently.
Caveats:
- there are sometimes VOB files that aren't part of the movie, and I couldn't find out an automated way to detect which is which
- on slow I/O systems this adds a huge time hog: it takes time to write and read the temp file.