2

Does anyone know how to do lossless conversion from *.mpeg/mpg to mov?

I was asked to extract video from DVDs and do editings in FCPX, however FCPX cannot edit *.mpeg/mpg file natively, therefore I need a way to convert it from mpeg.

I have tried two applications to convert mpeg files:

a) FFmpeg: I used c:v copy to do file wrapping to Mov file, but the conversion was failed, each frame of converted video file is jittering. Looks like there're some information missed in Mov header.

ffmpeg -i {input_file}.vob -c:v copy -copyts -threads 8 -sn -y {output_file}.mov

ffmpeg started on 2015-01-30 at 16:48:48
Report written to "ffmpeg-20150130-164848.log"
Command line:
ffmpeg -i /Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob -c:v copy -sn -t 30 -report -y /Users/yusizhang/Movies/vod2Mov.mov
ffmpeg version 2.5.2 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan  1 2015 20:24:48 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
  configuration: --prefix=/Volumes/tempdisk/sw --as=yasm --enable-gpl --enable-pthreads --disable-ffplay --disable-ffserver --disable-shared --enable-static --enable-libvpx --disable-decoder=libvpx --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libx265 --enable-libxvid --enable-zlib --enable-avfilter --enable-fontconfig --enable-libfreetype --enable-libass --enable-libutvideo --enable-filters --enable-postproc --enable-runtime-cpudetect
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Splitting the commandline.
Reading option '-i' ... matched as input file with argument '/Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option '-sn' ... matched as option 'sn' (disable subtitle) with argument '1'.
Reading option '-t' ... matched as option 't' (record or transcode "duration" seconds of audio/video) with argument '30'.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '/Users/yusizhang/Movies/vod2Mov.mov' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Applying option y (overwrite output files) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file /Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob.
Successfully parsed a group of options.
Opening an input file: /Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob.
[mpeg @ 0x7fbc5201dc00] Format mpeg probed with size=8192 and score=52
[mpeg @ 0x7fbc5201dc00] Before avformat_find_stream_info() pos: 0 bytes read:32768 seeks:0
[mpeg @ 0x7fbc5201dc00] probing stream 0 pp:2500
[mpeg @ 0x7fbc5201dc00] Probe with size=2012, packets=1 detected mpegvideo with score=25
[mpeg @ 0x7fbc5201dc00] probed stream 0
[mpeg @ 0x7fbc5201dc00] max_analyze_duration 5000000 reached at 5005000 microseconds
[mpeg @ 0x7fbc5201dc00] After avformat_find_stream_info() pos: 0 bytes read:4542608 seeks:2 frames:466
Input #0, mpeg, from '/Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob':
  Duration: 00:58:50.56, start: 0.233567, bitrate: 2887 kb/s
    Stream #0:0[0x1e0], 152, 1/90000: Video: mpeg2video (Main), yuv420p(tv), 720x480 [SAR 8:9 DAR 4:3], 8000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x80], 157, 1/90000: Audio: ac3, 48000 Hz, stereo, fltp, 128 kb/s
    Stream #0:2[0x81], 157, 1/90000: Audio: ac3, 48000 Hz, stereo, fltp, 128 kb/s
Successfully opened the file.
Parsing a group of options: output file /Users/yusizhang/Movies/vod2Mov.mov.
Applying option c:v (codec name) with argument copy.
Applying option sn (disable subtitle) with argument 1.
Applying option t (record or transcode "duration" seconds of audio/video) with argument 30.
Successfully parsed a group of options.
Opening an output file: /Users/yusizhang/Movies/vod2Mov.mov.
Successfully opened the file.
detected 8 logical cores
[graph 0 input from stream 0:1 @ 0x7fbc51501240] Setting 'time_base' to value '1/48000'
[graph 0 input from stream 0:1 @ 0x7fbc51501240] Setting 'sample_rate' to value '48000'
[graph 0 input from stream 0:1 @ 0x7fbc51501240] Setting 'sample_fmt' to value 'fltp'
[graph 0 input from stream 0:1 @ 0x7fbc51501240] Setting 'channel_layout' to value '0x3'
[graph 0 input from stream 0:1 @ 0x7fbc51501240] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[audio format for output stream 0:1 @ 0x7fbc515008e0] Setting 'sample_fmts' to value 'fltp'
[audio format for output stream 0:1 @ 0x7fbc515008e0] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000|7350'
[AVFilterGraph @ 0x7fbc51501880] query_formats: 5 queried, 12 merged, 0 already done, 0 delayed
[aac @ 0x7fbc52022000] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
[AVIOContext @ 0x7fbc5154cb80] Statistics: 0 seeks, 0 writeouts
[AVIOContext @ 0x7fbc51501b20] Statistics: 4542608 bytes read, 2 seeks

b) Qucktime X: I use Quicktime x to open mpeg files and "Save" it into another file. I thought it would be a lossless conversion, but the color was shifting and I saw the bitrate of video was drop.

Is there any good mpeg/mpg to mov wrapper tool which can do the "wrapping" lossless? Or is there a suggested conversion method?

Thanks!

  • Why does FC not support MPEG-2 video in MPG container? That sounds ridiculous. Can you show your ffmpeg command and the complete console output? – llogan Jan 30 '15 at 21:26
  • Hi LordNeckbread, I updated the description with ffmpeg command. FCPX cannot edit any file with Mpeg container... it really makes me headache. – Ellis Shen Jan 30 '15 at 21:37
  • You forgot the console output from your ffmpeg command. – llogan Jan 30 '15 at 21:41
  • ffmpeg -i {input_file}.vob -c:v copy -copyts -threads 8 -sn -y {output_file}.mov – Ellis Shen Jan 30 '15 at 21:42
  • That's the command, and I saw that in your question. I want to see what ffmpeg says after you enter that and complete the encoding. You can add -t 30 to output a 30 second video so you don't have to wait long. – llogan Jan 30 '15 at 21:43
4

I found a way to resolve this jittering issue. The root cause is that mpeg file doesn't have full PTS info. There's a closed ticket of FFmpeg talking about exactly this problem:

FFmpeg ticket #974

In order to solve this problem, add -fflags +genpts before the input file. Here is a sample FFmpeg command:

ffmpeg -fflags +genpts -i /Users/yusizhang/Movies/DVDRemaster/dvd_1/track003.vob -c:a copy -c:v copy -threads 8 -sn -y /Users/yusizhang/Movies/vod2Mov_clean/Episode1_clean.mov
  • I re-opened the FFmpeg ticket, retitled it to: genpts not enabled automatically when remuxing from VOB to MOV. It's silly that users have to run into a problem and then discover an obscure option. – Peter Cordes Feb 1 '15 at 7:38
  • Great retitled, I totally agree with it. Hope FFmpeg developers can take it into consideration. Thank you! – Ellis Shen Feb 1 '15 at 11:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.