26

I have an .avi file that is about 110mb. When I try to play it with VLC Media Player it says something like "This file is broken. Attempt to repair?" and after it does its thing it is still unable to play it.

Is there any other software out there that can possibly get whatever video it can out of it? Maybe one that specializes on that sort of thing? I'm not very hopeful because I figured if anything could be played out of it VLC would have managed to do it, but I figured I'd give it a shot anyways...

7 Answers 7

15

I've had some luck in the past with a lot of broken/incomplete AVIs using DivFix, but not sure if it works well on anything later than Windows XP.

A newer version is DivFix++:

DivXFix++ is designed to repair broken AVI file streams by rebuilding index part of file. This is very useful when trying to preview movies which has no index part, like some files are currently downloading from ed2k or bittorent networks. DivFix++ is complete rewrite of "DivFix" program due it's bugs and low performance.

2
  • 2
    Awesome. I did this for a 799 MB video file and it worked like a charm. In fact, this AVI file when played with VLC came up with the same error. It never played on Windows Media Player. Now it plays perfectly fine in Windows Media Player also. Nick - Thanks much!
    – Kanini
    Oct 23, 2009 at 7:21
  • @Kanini, glad DivFix helped :) Oct 24, 2009 at 23:56
17

Here are some programs that might help:

  • VLC should offer you to fix a broken AVI file's index when you open the file.
  • DivFix++
  • AviFiXP (only runs on Windows)

There's an extensive tutorial on repairing broken AVI files here: Repair broken or corrupt AVI files - AfterDawn: Guides

You can also try rebuilding the container by doing a bitstream copy with FFmpeg:

ffmpeg -i input.avi -c copy output.avi
6
  • 1
    With ffmpeg 0.6.2, use -vcodec copy -acodec copy instead of -c copy. I used (for windows) this version. I had a bunch of files to fix. DivFix++ crashed on me. ffmpeg was great. Thanks.
    – sinelaw
    Sep 12, 2013 at 12:21
  • 1
    ffmpeg fixed the broken index of my video avi files Oct 13, 2019 at 22:01
  • 1
    @sinelaw Doesn't that just do the same thing? Isn't -c copy a shortcut for copying both audio and video codecs? Jan 3, 2020 at 1:10
  • 1
    @Hashim It's almost the same. -c copy implies subtitle copying as well, but that's most likely not relevant here.
    – slhck
    Jan 3, 2020 at 7:48
  • new style -- ffmpeg -i input.avi -c:v copy -c:a copy -c:s copy output.avi possibly -- ffmpeg -err_detect ignore_err -i input.avi -c:v copy -c:a copy -c:s copy output.avi
    – Chris Reid
    Apr 29, 2021 at 0:36
2

VirtualDub can do pretty amazing things with broken AVI files. Just open the file in VirtualDub, let it cook, and then if it's opened it successfully, re-save it as a new AVI file. Usually, you don't even need to change the compression settings.

2
  • Ah, VirtualDub is a good recommendation but it wasn't able to do squat with it. Jul 28, 2009 at 17:54
  • Man, sorry to hear that. Hope you find something that works - noting more frustrating than a 100 meg file you can't use! Jul 30, 2009 at 20:19
2

I had some AVIs which VLC didn't even attempt to repair and DivFix++ gave me seek errors for. Passing them through ffmpeg didn't work, but mencoder did (it's very quick):

mencoder -idx input.avi -ovc copy -oac copy -o output.avi

(mencoder is part of the mplayer package on most systems, e.g. brew install mplayer on Homebrew.)

See also: How can I check the integrity of an avi file and repair it automatically in Linux?

2

All good ideas for how to repair the broken AVI index (my preference is ffmpeg), but contributing here a way to find avi files that have the broken index to test them and proactively repair them. After unsuccessfully trying to use mediainfo ffprobe and others to detect files that vlc would complain about, I finally decided to use vlc since it was the one that's complaining. Here's a snippet that may be useful as part of a scan and automated repair script.

if grep -q "avi demux error" \
    <(cvlc --vout null --aout null --stop-time 2 "${VIDFILE}" vlc://quit 2>&1 )
    # alternate ways to stop after two seconds
    #<(timeout 2 cvlc --vout null --aout null "${VIDFILE}" 2>&1)
    #<(cvlc --vout null --aout null "${VIDFILE}"  2>&1 & sleep 2; kill $!)
then
    echo "avi demux error: ${VIDFILE}"
    exit 1
fi

Note: the alternate stopping methods (so it doesn't play the whole video before exiting) are included because some versions of VLC have a bug in --stop-time and other systems may not have timeout.

1

There is a played called SuperDecoder.

have been able to play really messed up files and CD/DVDs with it. You can give it a shot.

-1

I've had good experience so far with Media Player Classic and The KMPlayer. They can play files which have been partially downloaded, or broken into parts (by hjsplit for example).

I think they may be able to play yours.

Although, it also depends on the type of codec and so ...

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .