FFMPEG:通过二进制ffmpeg和代码C ++进行YUV转换的视频文件给出了不同的结果

时间:2016-06-29 23:00:26

标签: c++ ffmpeg yuv

免责声明: 我看过以下问题, FFMPEG: RGB to YUV conversion by binary ffmpeg and by code C++ give different results 但它没有帮助,它不适用于我,因为我没有使用SwsContext或任何东西。

按照http://dranger.com/ffmpeg/的前几个教程,我创建了一个简单的程序来读取视频,对其进行解码,然后在解码帧时,它将原始yuv值写入文件(无填充),使用成功解码帧后AVFrame提供的数据。更具体地说,我将数组AVFrame->data[0]AVFrame->data[1]AVFrame->data[2]写入文件,即我只是将Y值,然后是U值,然后将V值附加到文件。该文件原来是yuv422p格式。

当我使用ffmpeg(相同版本的ffmpeg)命令行工具将同一原始视频转换为原始yuv格式时,两个yuv文件的大小相同,但内容不同。

仅供参考,我可以使用yuv播放器播放两个yuv文件,它们看起来也一样。

以下是我使用ffmpeg命令行工具将原始视频转换为yuv视频的确切命令

 ~/bin/ffmpeg -i super-short-video.h264 -c:v rawvideo -pix_fmt yuv422p  "super-short-video-yuv422p.yuv"

导致这种字节差异的原因是什么?有没有其他方法可以使用ffmpeg工具将原始视频转换为yuv,但也许我需要使用不同的设置?

转换为yuv格式时的Ffmpeg输出:

ffmpeg version N-80002-g5afecff Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
  configuration: --prefix=/home/me/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/me/ffmpeg_build/include --extra-ldflags=-L/home/me/ffmpeg_build/lib --bindir=/home/me/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 --extra-cflags=-pg --extra-ldflags=-pg --disable-stripping
  libavutil      55. 24.100 / 55. 24.100
  libavcodec     57. 42.100 / 57. 42.100
  libavformat    57. 36.100 / 57. 36.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 45.100 /  6. 45.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, h264, from 'super-short-video.h264':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p, 1280x720, 25 fps, 25 tbr, 1200k tbn
[rawvideo @ 0x24f6fc0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Output #0, rawvideo, to 'super-short-video-yuv422p.yuv':
  Metadata:
    encoder         : Lavf57.36.100
    Stream #0:0: Video: rawvideo (Y42B / 0x42323459), yuv422p, 1280x720, q=2-31, 200 kb/s, 25 fps, 25 tbn
    Metadata:
      encoder         : Lavc57.42.100 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
frame=   50 fps=0.0 q=-0.0 Lsize=   90000kB time=00:00:02.00 bitrate=368640.0kbits/s speed=11.3x    
video:90000kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

0 个答案:

没有答案