如何在 ffmpeg 中解压缩视频文件?

如何在 ffmpeg 中解压缩视频文件?

示例 1:ffmpeg -i input.avi -c:v libxvid output.mp4

我得到的输出代码是:

ffmpeg -i input_1.avi -c:v libxvid output_1.mp4
ffmpeg version git-2020-02-16-8578433 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 41.100 / 56. 41.100
  libavcodec     58. 70.100 / 58. 70.100
  libavformat    58. 38.101 / 58. 38.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 76.100 /  7. 76.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, avi, from 'input_1.avi':
  Duration: 00:00:02.53, start: 0.000000, bitrate: 498000 kb/s
    Stream #0:0: Video: rawvideo (Y800 / 0x30303859), gray, 1920x1080, 504300 kb/s, 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg4 (libxvid))
Press [q] to stop, [?] for help
Output #0, mp4, to 'output_1.mp4':
  Metadata:
    encoder         : Lavf58.38.101
    Stream #0:0: Video: mpeg4 (libxvid) (mp4v / 0x7634706D), yuv420p, 1920x1080, q=2-31, 200 kb/s, 30 fps, 15360 tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.70.100 libxvid
frame=   76 fps= 41 q=31.0 Lsize=     313kB time=00:00:02.50 bitrate=1024.0kbits/s speed=1.35x
video:311kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.371668%

示例 2:

也许 libxvid 不是最好的例子。如果我使用无损压缩(如 x264)会怎么样?

ffmpeg -i 输入.avi -c:v libx264 -preset veryslow -crf 0 输出.mp4

如果您想让别人ffmpeg为您解压缩一个视频文件,您会使用什么命令呢?

答案1

假设您的输入文件使用 4:2:0 颜色空间,您可以解码(有损)编码的视频并将原始帧输出到 AVI 容器:

ffmpeg -i output.mp4 -c:v rawvideo -pix_fmt yuv420p output.avi

ffmpeg 将从文件中“解压缩”(即解码) MPEG-4 视频流output.mp4并将其作为原始视频写入文件output.avi

原始视频未压缩,但由于原始视频已使用有损算法(例如 libxvid)压缩,因此 中的任何质量损失output.mp4显然也会在 中存在output.avi。您只会得到一个更大的输出文件。

答案2

你只是以另一种格式压缩了你的原始(压缩)avi 文件。你可以这样做ffmpeg -i output.mp4 -c:v msmpeg4v2 -c:a copy new_avi.avi

显然,mp4 中的任何质量损失都将永远消失(您需要原始源文件才能恢复质量)

ffmpeg -i output.mp4 -c:v copy -c:a copy output.avi只会替换容器(mp4 到 avi)。

相关内容