Wie man nicht abspielbare H265-avi-Dateien von ffmpeg wiederherstellt?

537
Witiko

Ich habe eine Eingangsvideodatei, input.aviwie sie von einer Digitalkamera erzeugt wird

$ avprobe input.avi avprobe version 11.7-6:11.7-1~deb8u1, Copyright (c) 2007-2016 the Libav developers built on Jun 12 2016 21:51:35 with gcc 4.9.2 (Debian 4.9.2-10) Input #0, avi, from 'input.avi': Metadata: creation_time : 2016-08-04 19:42:38 encoder : CanonMVI06 Duration: 00:00:21.60, start: 0.000000, bitrate: 17170 kb/s Stream #0.0: Video: mjpeg, yuvj422p, 640x480, 20 fps, 20 tbn Stream #0.1: Audio: pcm_u8, 11024 Hz, 1 channels, u8, 88 kb/s # avprobe output 

und eine aktuelle Version von ffmpeg

$ ffmpeg ffmpeg version N-81194-g77b0f3f Copyright (c) 2000-2016 the FFmpeg developers built with gcc 4.9.2 (Debian 4.9.2-10) configuration: --prefix=/home/witiko/tmp/ffmpeg_build --bindir=/home/witiko/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree libavutil 55. 28.100 / 55. 28.100 libavcodec 57. 51.100 / 57. 51.100 libavformat 57. 44.100 / 57. 44.100 libavdevice 57. 0.102 / 57. 0.102 libavfilter 6. 49.100 / 6. 49.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 1.100 / 2. 1.100 libpostproc 54. 0.100 / 54. 0.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...  Use -h to get full help or, even better, run 'man ffmpeg' 

Beim Umcodieren des Eingangsvideos nach H.265 im avi-Hüllformat wie folgt

ffmpeg -i input.avi -c:v libx265 c:a libfdk_aac output.avi 

Ich erhalte eine Datei, die ich nicht abspielen kann (ich habe mpv und vlc ausprobiert) und avprobemeldet, dass ein Codec rawvideoverwendet wird.

$ avprobe output.avi avprobe version 11.7-6:11.7-1~deb8u1, Copyright (c) 2007-2016 the Libav developers built on Jun 12 2016 21:51:35 with gcc 4.9.2 (Debian 4.9.2-10) Input #0, avi, from 'output.avi': Metadata: encoder : Lavf57.44.100 Duration: 00:00:05.10, start: 0.000000, bitrate: 364 kb/s Stream #0.0: Video: rawvideo, bgr24, 640x480, 20 fps, 20 tbn Stream #0.1: Audio: aac, 11025 Hz, mono, fltp, 66 kb/s # avprobe output 

Beim Umcodieren des Eingangsvideos nach H.265 mit dem mp4-Hüllformat wie folgt

ffmpeg -i input.avi -c:v libx265 c:a libfdk_aac output.mp4 

Ich erhalte eine Datei, die abgespielt werden kann, und avprobemeldet den korrekten Codec.

$ avprobe output.mp4 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf57.44.100 Duration: 00:00:22.23, start: 0.185760, bitrate: 449 kb/s Stream #0.0(und): Video: hevc, 640x480, 383 kb/s, 20 fps, 10240 tbn (default) Stream #0.1(und): Audio: aac, 11025 Hz, mono, fltp, 66 kb/s (default) 

Dies führt mich zu dem Schluss, dass das AVI-Hüllkurvenformat die H.265-Nutzlast nicht tragen kann. Ich habe ein paar der resultierenden avi-Dateien, die ich jetzt nicht abspielen kann, und ich habe die Originale nicht behalten. Gibt es eine Möglichkeit, das Video daraus zu retten?

0

1 Antwort auf die Frage

1
Gyan

AVI ist ein sehr alter Container und HEVC ist ein neuer Codec, und FFMpeg-Codierer haben kein Tag zum Schreiben erstellt, wenn HEVC in AVI gemuxt wird. Deshalb wird das Video als Rohvideo gemeldet.

Lauf

ffmpeg -i output.avi -c copy -vtag hev1 -strict -2 new.avi 

Die Datei kann jetzt mit ffplay oder Potplayer abgespielt werden.

Sie können es auch auf ein MP4 übertragen, wenn Sie möchten:

ffmpeg -i new.avi -c copy new.mp4 

Sie können auch direkt von der ursprünglichen AVI-Datei übertragen:

ffmpeg -c:v hevc -i output.avi -c copy new.mp4 
Toll, das ist die Antwort, auf die ich gehofft hatte. Vielen Dank. Witiko vor 7 Jahren 0