Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Repair mpeg files using ffmpeg

Tags:

ffmpeg

I have a bunch of MPEG files which are somehow invalid or incorrect. I can play the files in different media players but when I upload the files and they should automatically be converted. It takes a very long time to create screenshots and it creates about 10000 screenshots instead of the 50 to be expected. The command is part of an automatic conversion app. With mp4 and other files it works great but whit MPEG it doesn't work as expected. The creation of screenshots eats up all memory and processor power.

For creating screenshots I have tried the following:

ffmpeg -y -i /input/file.mpeg -f image2 -aspect 16:9 -bt 20M -vsync passthrough -vf select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)' /output/file-%05d.jpg

this just creates 2 screenshots while I expect 50 or so. The following command:

ffmpeg -y -i /input/file.mpeg -f image2 -vf fps=fps=1/10 -aspect 16:9 -vsync passthrough -bt 20M /output/file-%05d.jpg

gave me errors about buffers:

    ffmpeg version N-39361-g1524b0f Copyright (c) 2000-2014 the FFmpeg developers
      built on Feb 26 2014 23:46:40 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
      configuration: --prefix=/home/example/ffmpeg_build --extra-cflags=-I/home/example/ffmpeg_build/include --extra-ldflags=-L/home/example/ffmpeg_build/lib --bindir=/home/example/bin --extra-libs=-ldl --enable-gpl --enable-nonfree --enable-libfdk_aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libfreetype --enable-libspeex --enable-libtheora
      libavutil      52. 66.100 / 52. 66.100
      libavcodec     55. 52.102 / 55. 52.102
      libavformat    55. 33.100 / 55. 33.100
      libavdevice    55. 10.100 / 55. 10.100
      libavfilter     4.  2.100 /  4.  2.100
      libswscale      2.  5.101 /  2.  5.101
      libswresample   0. 18.100 /  0. 18.100
      libpostproc    52.  3.100 / 52.  3.100
    [mp3 @ 0x200d7c0] Header missing
    [mpegts @ 0x2008a60] DTS discontinuity in stream 0: packet 6 with DTS 34185, packet 7 with DTS 8589926735
    [mpegts @ 0x2008a60] Invalid timestamps stream=0, pts=7157, dts=8589932741, size=150851
    Input #0, mpegts, from '/home/example/app/uploads/21.mpeg':
      Duration: 00:03:14.75, start: 0.213000, bitrate: 26112 kb/s
      Program 1
Stream #0:0[0x3e9]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv), 1440x1080 [SAR 4:3 DAR 16:9], max. 25000 kb/s, 29.97 fps, 60 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x3ea]: Audio: mp2 ([3][0][0][0] / 0x0003), 48000 Hz, stereo, s16p, 384 kb/s
    [swscaler @ 0x1ff9860] deprecated pixel format used, make sure you did set range correctly
    Output #0, image2, to '/home/example/app/uploads/21-%05d.jpg':
      Metadata:
encoder         : Lavf55.33.100
Stream #0:0: Video: mjpeg, yuvj420p, 1440x1080 [SAR 4:3 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 0.10 tbc
    Stream mapping:
      Stream #0:0 -> #0:0 (mpeg2video -> mjpeg)
    Press [q] to stop, [?] for help
    [mpegts @ 0x2008a60] Invalid timestamps stream=0, pts=7157, dts=8589932741, size=150851
    [output stream 0:0 @ 0x1ff2ba0] 100 buffers queued in output stream 0:0, something may be wrong.
    [output stream 0:0 @ 0x1ff2ba0] 1000 buffers queued in output stream 0:0, something may be wrong.

and it creates about 10000 screenshots while I expect 50.

Now I have read somewhere on how to repair some broken files. For this I have the following command:

ffmpeg -y -i input.mpeg -codec:v copy -codec:a copy output.mpeg

This, however, creates a file somewhat smaller, but if I run the same command on the output again, I would expect that it creates the same file, but the following command

ffmpeg -y -i output.mpeg -codec:v copy -codec:a copy output2.mpeg

returns a file which is much smaller and runs for only a few seconds while the original was about 3 minutes.

If I run the "repair" commands for a not broken MPEG then it results in a much smaller file the first time I run the command. With ffprobe I checked what changed but the only thing that changes is MPEG-TS to MPEG-PS.

If I run the command over an mp4 file it results in exactly the same file as expected. Does someone have a clue of what is going wrong. It is boggling me now for about two days and I really have no clue. Or does someone have a good suggestion on how to extract screenshots every 10 seconds without creating too much screenshots and eating up all memory and processor power.

like image 820
rsdrsd Avatar asked Feb 27 '14 08:02

rsdrsd


People also ask

How do I fix a corrupted video file on my computer?

Launch VLC >> Click on Tools and select “Preferences”. Switch to the “Input/Codecs” section; Inputs/Codecs “Settings” window will open. Under the files section, select “Always fix” in the “Damaged or incomplete AVI file” option and click Save. Now, try playing the corrupt .


1 Answers

I cannot answer your subsequent questions about the strange behavior of ffmpeg, i.e. why you get inconsistent results. I also have read about the same trick to repair video files. Sometimes it helps to switch to a different video container (mkv & mp4 often works best). Since your question is rather old, I recommend to use the latest build and file a bug report if you still observe the same results (always use the latest nightly when you file a bug report): https://ffmpeg.org/bugreports.html

However, I can recommend the use of VLC to convert your videos as an alternative approach. Open VLC, chose Media->Save/Convert..(Ctrl+R), Add your file, Convert/Save [button], Convert - Profile (default H.264+MP3, or whatever you like), set destination path, and Start.
This worked for me even with badly damaged files that ffmpeg didn't even start to convert.

like image 176
wp78de Avatar answered Oct 17 '22 18:10

wp78de