Bagaimana cara mengembalikan file avi H265 yang tidak dapat diputar yang diproduksi oleh ffmpeg?

0

Saya memiliki file video input yang input.avidiproduksi oleh kamera digital

$ 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

dan ffmpeg versi terbaru

$ 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'

Ketika saya transcode video input ke H.265 menggunakan format amplop avi sebagai berikut

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

Saya menerima file yang tidak dapat saya putar (saya mencoba mpv dan vlc) dan avprobemelaporkan bahwa codec rawvideosedang digunakan.

$ 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

Ketika saya transcode video input ke H.265 menggunakan format amplop mp4 sebagai berikut

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

Saya menerima file yang dapat diputar dan avprobemelaporkan codec yang benar.

$ 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)

Ini membawa saya pada kesimpulan bahwa format avi amplop tidak dapat membawa muatan H.265. Saya memiliki beberapa file avi yang dihasilkan yang tidak dapat saya putar sekarang dan saya tidak menyimpan aslinya. Apakah ada cara untuk menyelamatkan video dari ini?

Witiko
sumber

Jawaban:

1

AVI adalah wadah yang sangat lama dan HEVC adalah codec baru, dan FFMpeg coders belum membuat tag untuk menulis ketika menyandingkan HEVC ke AVI. Itu sebabnya video dilaporkan sebagai video mentah.

Menjalankan

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

File dapat diputar dengan ffplay atau Potplayer sekarang.

Anda juga dapat mentransfernya ke MP4, jika Anda suka:

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

Anda juga dapat langsung mentransfer dari AVI asli:

ffmpeg -c:v hevc -i output.avi -c copy new.mp4
Gyan
sumber
Hebat, ini jawaban yang saya harapkan. Terima kasih.
Witiko