web-dev-qa-db-fra.com

N'importe quel moyen de réparer ce mp4 qui a été coupé pendant l'enregistrement

J'ai pris une vidéo avec mon Android mais je n'ai pas réussi à appuyer correctement sur le bouton Arrêter. Donc, mon téléphone a manqué de mémoire disque et l'application vidéo a probablement juste coupé hors du fichier.

Après avoir copié le fichier (taille 2,1 Go) sur mon bureau ubuntu, j'ai essayé de l'exécuter avec mplayer. La sortie est:

MPlayer 1.2.1 (Debian), built with gcc-5.4.0 (C) 2000-2016 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing 20190215_141432.mp4.
libavformat version 56.40.101 (external)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f0685aced80]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f0685aced80]Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
LAVF_header: av_find_stream_info() failed
[lavf] stream 0: video (h264), -vid 0
VIDEO:  [H264]  1920x1080  24bpp  90000.000 fps    0.0 kbps ( 0.0 kbyte/s)
Clip info:
 major_brand: mp42
 minor_version: 0
 compatible_brands: isommp42
 creation_time: 2019-02-15 14:06:39
Load subtitles in ./
Failed to open VDPAU backend libvdpau_va_gl.so: cannot open shared object file: No such file or directory
[vdpau] Error when calling vdp_device_create_x11: 1
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 56.60.100 (external)
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Audio: no sound
Starting playback...
V:   0.0   0/  0 ??% ??% ??,?% 0 0 


Exiting... (End of file)

Est-ce qu'il y a un moyen de réparer ceci? Peut-être qu'il y a juste quelques métadonnées qui doivent être corrigées.

J'ai aussi essayé cela mais la sortie est la même:

mplayer -lavfdopts analyzeduration=120 20190215_141432.mp4

Ensuite, j'ai essayé de couper la vidéo

ffmpeg -probesize 1000M -analyzeduration 1000M 
    -i 20190215_141432.mp4 -pix_fmt yuvj420p 
    -ss 00:00:00 -c copy -t 00:05:30 new.mp4 

Mais la sortie est à peu près la même:

ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
[...]
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x182d380] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
20190215_141432.mp4: could not find codec parameters
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20190215_141432.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2019-02-15 12:06:39
  Duration: 00:19:49.40, bitrate: 10308 kb/s
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1080, SAR 1:1 DAR 16:9, 10.94 fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 180
      creation_time   : 2019-02-15 12:06:39
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -180.00 degrees
[...]
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)

Veuillez noter que j'ai spécifié le pix_fmt, probesize et analyzeduration mais obtenu comme réponse

format de pixel non spécifié. Envisagez d'augmenter la valeur des options "analyse de la durée" et "taille de sondage"

Btw: j'ai essayé pixel_format aussi.

Jusqu'à présent, ma dernière tentative a été d'utiliser untrunc. La sortie est:

Repair: 20190215_141432.mp4
Failed to parse atoms in truncated file

Mise à jour de la réponse (éditée) (par Fabby):

J'ai essayé

ffmpeg  -i 20190215_141432.mp4 -probesize 100M -analyzeduration 100M -map_metadata -1 -c:v libx264 -strict -2 -c:a libmp3lame -b:a 512K new.mkv

(et joué avec des valeurs comme 1024M, 2G, 4G et placement des paramètres (comme suggéré ici ) mais la sortie est essentiellement:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0xc0c4a0] Could not find codec parameters for stream 0 (Video: h264 (avc1 / 0x31637661), none(tv, bt709), 1920x1080): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
20190215_141432.mp4: could not find codec parameters
[...]
Codec AVOption b (set bitrate (in bits/s)) specified for output file #0 (new.mkv) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
[...]
[buffer @ 0xc137e0] Unable to parse option value "-1" as pixel format
    Last message repeated 1 times
[buffer @ 0xc137e0] Error setting option pix_fmt to value -1.
[graph 0 input from stream 0:0 @ 0xc133e0] Error applying options to the filter.
Error opening filters!

Je vais poser cette question, maintenant.

Raisons: il est mort de simpe de couper des vidéos, de rejoindre des vidéos - même de faire tourner des vidéos en utilisant ffmpeg/mencoder ou d'autres outils. Les actions de découpe, d'assemblage et de rotation devraient (selon ma compréhension) réorganiser les métadonnées en premier lieu.

Dans ce cas, les métadonnées sont là et valables (telles que la durée, le format, l'heure de création ...). Alors, pourquoi la réparation des métadonnées dans ce cas est-elle si difficile? La sortie des commandes est extrêmement ennuyeuse, affirmant que le format de pixel n'aurait pas été spécifié, etc.

Après tout. Je pensais que réparer cette vidéo avait juste besoin d'un indice précieux ou d'un outil canonique magique mais après tout, ma vie n'en dépend pas.

2
Würgspaß

Désolé de le dire, mais avec les fichiers .MP4, vous avez besoin à la fois de l'en-tête et du pied de page du fichier pour le rendre lisible, donc le transcodage complet (et pas seulement la copie) pourrait rendez-le lisible:

ffmpeg -i 20190215_141432.mp4 -probesize 100M -analyzeduration 100M -map_metadata -1 -c:v libx264 -strict -2 -c:a libmp3lame -b:a 512K 20190215_141432.mkv

Si cela n'aide pas, le contenu est vraiment perdu car le pied de page ne peut pas être reconstruit à partir des données que vous avez.

2
Fabby