Fatal error and crash when opening a defective file

Started by acritum, November 01, 2017, 11:16:55 AM

Previous topic - Next topic

acritum

Using the latest nightly build for Win64 that I downloaded today.

There is a camera that wrote 4Gb video files and couldn't finish them because the file system max file size was reached. These files are not playable in any player but can be copied from MicroSD card without errors. I hoped to open them in Avidemux to reconvert, but Avidemux crushes. Maybe it is not has to deal with defective MOV files, but I think some kind of exception handler is needed to prevent such a wild crash. Unfortunately, I can't share a 4Gb video, and smaller videos from this camera don't have any problems. I used VideoRepair to fix videos and it partially fixed them (players can play them), but Avidemux cannot open fixed files as well.

ADM_setCrashHook  [libADM_core6.dll]
ADM_setCrashHook  [libADM_core6.dll]
ADM_backTrack  [libADM_core6.dll]
MP4Header::indexify(MP4Track*, unsigned int, MPsampleinfo*, unsigned int, unsigned int*)  [libADM_dm_mp4.dll]
MP4Header::parseStbl(void*, unsigned int, unsigned int, unsigned int, unsigned int)  [libADM_dm_mp4.dll]
MP4Header::parseMdia(void*, unsigned int*, unsigned int, unsigned int)  [libADM_dm_mp4.dll]
MP4Header::parseTrack(void*)  [libADM_dm_mp4.dll]
MP4Header::lookupMainAtoms(void*)  [libADM_dm_mp4.dll]
MP4Header::open(char const*)  [libADM_dm_mp4.dll]
ADM_Composer::addFile(char const*)  [avidemux.exe]
A_openVideo(char const*)  [avidemux.exe]
ADM_QT4_fileSel::GUI_FileSelRead(char const*, void (*)(char const*))  [avidemux.exe]
HandleAction(Action)  [avidemux.exe]
MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)  [avidemux.exe]
QMetaObject::activate(QObject*, int, int, void**)  [Qt5Core.dll]
MainWindow::actionSignal(Action)  [avidemux.exe]
MainWindow::searchToolBar(QAction*)  [avidemux.exe]
MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)  [avidemux.exe]
QMetaObject::activate(QObject*, int, int, void**)  [Qt5Core.dll]
QToolBar::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)  [Qt5Widgets.dll]
QMetaObject::activate(QObject*, int, int, void**)  [Qt5Core.dll]
QToolButton::setArrowType(Qt::ArrowType)  [Qt5Widgets.dll]
QToolButton::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)  [Qt5Widgets.dll]
QMetaObject::activate(QObject*, int, int, void**)  [Qt5Core.dll]
QAction::activate(QAction::ActionEvent)  [Qt5Widgets.dll]
QAbstractButton::keyPressEvent(QKeyEvent*)  [Qt5Widgets.dll]
QAbstractButton::mouseReleaseEvent(QMouseEvent*)  [Qt5Widgets.dll]
QToolButton::mouseReleaseEvent(QMouseEvent*)  [Qt5Widgets.dll]
QWidget::event(QEvent*)  [Qt5Widgets.dll]
QToolButton::event(QEvent*)  [Qt5Widgets.dll]
QApplicationPrivate::notify_helper(QObject*, QEvent*)  [Qt5Widgets.dll]
QApplication::notify(QObject*, QEvent*)  [Qt5Widgets.dll]
QCoreApplication::notifyInternal2(QObject*, QEvent*)  [Qt5Core.dll]
QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool)  [Qt5Widgets.dll]
QDesktopWidget::qt_metacall(QMetaObject::Call, int, void**)  [Qt5Widgets.dll]
QDesktopWidget::qt_metacall(QMetaObject::Call, int, void**)  [Qt5Widgets.dll]
QApplicationPrivate::notify_helper(QObject*, QEvent*)  [Qt5Widgets.dll]
QApplication::notify(QObject*, QEvent*)  [Qt5Widgets.dll]
QCoreApplication::notifyInternal2(QObject*, QEvent*)  [Qt5Core.dll]
QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*)  [Qt5Gui.dll]
QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*)  [Qt5Gui.dll]
QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>)  [Qt5Gui.dll]
QEventDispatcherWin32Private::sendTimerEvent(int)  [Qt5Core.dll]
GetSystemMetrics  [USER32.dll]
GetSystemMetrics  [USER32.dll]
QEventDispatcherWin32::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)  [Qt5Core.dll]
qt_plugin_instance  [qwindows.dll]
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)  [Qt5Core.dll]
QCoreApplication::exec()  [Qt5Core.dll]
UI_RunApp()  [avidemux.exe]
startAvidemux(int, char**)  [avidemux.exe]
SDL_main  [avidemux.exe]
ms2timedisplay(unsigned int)  [avidemux.exe]
unknown function  [avidemux.exe]
unknown function  [avidemux.exe]
BaseThreadInitThunk  [kernel32.dll]
RtlUserThreadStart  [ntdll.dll]


eumagga0x2a

This is an assert which fails due to corrupted input and terminates the application in an orderly way before things really go wrong. Avidemux code is full of that.

fish

Is there software available from the camera makers to stitch these files together? Usually you need to copy the whole file hierarchy to a certain level, as there are additional files, created by the camera, that hold information to enable the files to be stitched together.

acritum

Quote from: fish on November 02, 2017, 12:13:01 AM
Is there software available from the camera makers to stitch these files together? Usually you need to copy the whole file hierarchy to a certain level, as there are additional files, created by the camera, that hold information to enable the files to be stitched together.

No, unfortunately this is a bug in camera firmware. It creates normal 4Gb files in 1080 at 12mbps mode and these damaged files in 1080 at 8mbps mode. Normally it should close one file and continue to a new file when the limit is reached, so there is no need in stitching software. I reported the problem to the developers but even if they fix it, I'm still left with 5 hours of damaged files... I tried Video Repair tool and  it really gives out quite playable files with a couple of checkboxes turned on, but with partial sound losses. It's better than nothing, but Avidemux has problems opening them too... It just sticks without any messages and doesn't respond (I can only close it from Task Manager). I waited for 5+ minutes and nothing happened... All video players can play the repaired files though.

fish

You could try re wrapping them with something like MKVToolNix and see if you can then edit them or use  encoding software called Dali's Moustache that allows the user to wrap video files in a .mov container without re encoding (there is a restriction of two files per session on the free version or pay what you like to unlock) or try Machete. Sometimes that will handle difficult files Avidemux can't, probably for the same reason that creates the annoying lag with it's controls.

acritum

Quote from: fish on November 05, 2017, 06:52:29 PM
You could try re wrapping them with something like MKVToolNix and see if you can then edit them or use  encoding software called Dali's Moustache that allows the user to wrap video files in a .mov container without re encoding

As far as the original files are concerned, I found that most programs just don't see the video stream or think that it's empty. I already tried to copy it with ffmpeg, and it sees the streams but doesn't copy them:

ffmpeg -err_detect ignore_err -i 20171029_083553.MOV  -c copy video_fixed.mov 2>res.txt

ffmpeg version N-82966-g6993bb4 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 43.100 / 55. 43.100
  libavcodec     57. 70.100 / 57. 70.100
  libavformat    57. 61.100 / 57. 61.100
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 68.100 /  6. 68.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004a7a00] overread end of atom 'ctts' by 528336 bytes
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004a7a00] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none, 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20171029_083553.MOV':
  Metadata:
    major_brand     : qt 
    minor_version   : 0
    compatible_brands: qt 
    creation_time   : 2017-10-29T08:35:53.000000Z
  Duration: 01:00:28.00, bitrate: 9417 kb/s
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1920x1080, 30 fps, 30 tbr, 60k tbn, 120k tbc (default)
    Metadata:
      creation_time   : 2017-10-29T08:35:53.000000Z
      handler_name    : iCatch Alias Data Handler
      encoder         : iCatch AVCC
Output #0, mov, to 'video_fixed.mov':
  Metadata:
    major_brand     : qt 
    minor_version   : 0
    compatible_brands: qt 
    encoder         : Lavf57.61.100
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none, 1920x1080, q=2-31, 30 fps, 30 tbr, 60k tbn, 60k tbc (default)
    Metadata:
      creation_time   : 2017-10-29T08:35:53.000000Z
      handler_name    : iCatch Alias Data Handler
      encoder         : iCatch AVCC
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=    0 fps=0.0 q=-1.0 Lsize=       0kB time=00:00:00.00 bitrate=N/A speed=N/A   
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown


I tried several tools to fix these files, but the only acceptable result is made by Grau Video Repair tool v3. Other tools either don't work at all or give out videos with blocking or other kinds or artifacts during the video and very bad sound stream with noise only. The files from Video Repair tool also have some sound damages, but the video does not have artifacts during playback. Although Avidemux cannot open the fixed files, I found that Adobe Premiere can work with them without problems, so at least I can do something with them now.

Jan Gruuthuse

Considered Grau Gmbh asks, for Video Repair Tool, Single User License:
- 5 video repairs at 29 Euro
- 99 Euro Unlimited repairs
You are commercially spamming this forum/board.

acritum

Quote from: Jan Gruuthuse on November 06, 2017, 11:47:08 AM
Considered Grau Gmbh asks, for Video Repair Tool, Single User License:
- 5 video repairs at 29 Euro
- 99 Euro Unlimited repairs
You are commercially spamming this forum/board.

Well, actually it's free for everyone and I think everyone already knows it. The trick is that it allows to repair 50% of the video in trial mode absolutely legally. If you copy the damaged video twice into one file (by appending it) and repair it, you will get 100% of the video repaired. Free and without any limitations! This is quite simple and I think everyone already knows it, so I consider Video Repair Tool as freeware because it allows to repair videos completely without using cracks or keygens or violating the license in any other way. Besides, as I said, I just don't see any alternatives (either free or paid), so I think those who experience the same difficulties with damaged videos could find the results of my little research useful. As I said, I tried other free tools: ffmpeg, recover_mp4_to_h264, FIX-DJI and some other less useful tools, but they just don't work as expected. And 99 Euro is really too much, if they asked $5-10 donation, I would have gladly paid, because the tool is really unique and helped me out, but 99 Euros, nnnaaaah...