You've probably seen some AVI (Audio Video Interleave) files with MPEG-4 video (more specifically, MPEG-4 Visual / ASP, usually encoded by DivX or Xvid codecs) inside; they are often used for DVD-rips. Such AVI video files often contain "packed B-frames", which is not an optimal frame storage way, but just a workaround for the VfW (Video for Windows) framework shortcomings (i. e., bugs).
To ensure you have a "bad-style" MPEG-4 AVI file, you can check it with a media analyzer utility like
MediaInfo (in this case, it'll show you something like "
Muxing mode : Packed bitstream").
Fortunately, that wrong thing is easy to "unpack" with an up-to date version of
FFmpeg (
v2.7+):
$ ffmpeg -i in_bad.avi -codec copy -bsf:v mpeg4_unpack_bframes out_good.avi
The conversion is lossless (neither video nor audio quality is harmed; the file should remain compatible with the hardware players... or even become more compatible), but often can even reduce the resulting AVI container size.
BTW, after "bitstream unpacking", the MPEG-4 video stream becomes standards-compliant, so you can put it directly into the popular MP4 container without transcoding (but it requires the audio stream to be MP4-compatible too, e. g. MP3 is OK);
e. g., here are
2.5 3 remuxing examples using the same FFmpeg:
$ ffmpeg -i in10_good.avi -codec copy out10_good.mp4
$ ffmpeg -i in20_bad.avi -codec copy -bsf:v mpeg4_unpack_bframes out20_better.mp4
$ ffmpeg -i in20_bad.avi -codec copy -bsf:v mpeg4_unpack_bframes -movflags faststart out25_best.mp4
You can download the source code and binary builds of the current FFmpeg (for MS Windows, Apple Mac OS X and Linux) freely from the official site.
Usually, you will find a compatible version in the repositories of your favorite Linux distribution;
however, in Debian, it's available only starting from the release 9 "Stretch" (and fortunately, it's currently in the backports for 8 "Jessie" too; and for use in Ubuntu, you need release 15.10 "Wily Werewolf", at least):
# sudo apt-get install ffmpeg
References:
- FFmpeg
- FFmpeg Bitstream Filters Documentation
- Download FFmpeg
- FFmpeg Changelog
- #2913 (Bitstream filter to fix "invalid and inefficient vfw-avi packed B frames") – FFmpeg
- MediaInfo
- Debian Package Tracker - ffmpeg
- ffmpeg package : Ubuntu
- Wikipedia
- Ripping
- MPEG-4 Part 2
- DivX
- Xvid
- Audio Video Interleave
- Video for Windows
- Video compression picture types
- Inter frame
---
Last updated: 2017-12-28