input.avi
我有一个由数码相机拍摄的输入视频文件
$ 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
以及最新版本的 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'
当我使用 avi 信封格式将输入视频转码为 H.265 时,如下所示
ffmpeg -i input.avi -c:v libx265 c:a libfdk_aac output.avi
我收到一个无法播放的文件(我尝试了 mpv 和 vlc)并avprobe
报告rawvideo
正在使用编解码器。
$ 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
当我使用 mp4 信封格式将输入视频转码为 H.265 时,如下所示
ffmpeg -i input.avi -c:v libx265 c:a libfdk_aac output.mp4
我收到一个可以播放的文件并avprobe
报告正确的编解码器。
$ 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)
这让我得出结论,avi 封装格式无法承载 H.265 有效载荷。我有几个生成的 avi 文件现在无法播放,而且我没有保留原始文件。有什么办法可以挽救这些视频吗?
答案1
AVI 是一种非常古老的容器,而 HEVC 是一种新的编解码器,FFMpeg 编码器尚未创建在将 HEVC 合并到 AVI 时要写入的标签。这就是视频被报告为原始视频的原因。
跑步
ffmpeg -i output.avi -c copy -vtag hev1 -strict -2 new.avi
现在可以使用 ffplay 或 Potplayer 播放该文件。
如果您愿意,您还可以将其转换为 MP4:
ffmpeg -i new.avi -c copy new.mp4
您也可以直接从原始 AVI 传输:
ffmpeg -c:v hevc -i output.avi -c copy new.mp4