【问题标题】:Does ffmpeg support yv12?ffmpeg 支持 yv12 吗?
【发布时间】:2021-07-29 19:09:38
【问题描述】:

我有 YV12 格式的原始 YUV 文件。 YV12 不是YUV420P,也不是I420X264 可以处理,但ffmpeg 不能。

x264 --input-res 1280x720 --fps 25 --input-csp yv12 --output 2.mp4 2.yuv
--this runs correctly, and color is correct!

ffmpeg -c rawvideo -s 1280x720 -pix_fmt yv12 -r 25 -i 2.yuv 2.mp4
--there is an error: No such pixel format: yv12

ffmpeg -c rawvideo -s 1280x720 -pix_fmt yuv420p -r 25 -i 2.yuv 2.mp4
--this can run, but color is NOT correct!

ffmpeg -pix_fmts
--there is no YV12 format in the result list.


ffmpeg version N-81516-gbe07c25 Copyright (c) 2000-2016

那么,谁能说出ffmpeg 是否支持YV12?如果是,如何?谢谢。

【问题讨论】:

    标签: video ffmpeg


    【解决方案1】:

    YV12相当于YVU420(P/I),ffmpeg好像不能直接读取。

    使用过滤器交换平面:

    ffmpeg -c rawvideo -s 1280x720 -pix_fmt yuv420p -r 25 -i 2.yuv -vf shuffleplanes=0:2:1 2.mp4
    

    【讨论】:

      【解决方案2】:

      ffplay不支持YV12,使用ffmpeg转码:

      ffmpeg -vtag YV12 -f rawvideo -s 1280x720 -i cam001  cam001.png
      

      【讨论】:

      • 没有试过这个,因为我丢失了我的 yv12 源文件。
      【解决方案3】:

      编辑:Android和ffmpeg对于YUV420P和YV12的含义不同。 YV12 的标准 Y-U-V 像素排列是(android 似乎不遵循):

      而 YUV420 的 V 平面和 U 平面互换了。因此,您应该能够使用 ffplay 播放 YV12 内容(正如 Gyan 在其他答案中提到的那样):

      ffplay -f rawvideo -pixel_format yuv420p -video_size 640x480 -vf shuffleplanes=0:2:1 -i record_640x480_1.yv12
      

      shuffleplanes 过滤器告诉 ffplay 在渲染之前交换 U 和 V 平面。

      查看this 了解其他格式的像素排列,查看ffmpeg site 了解有关随机平面过滤器的更多信息。

      旧答案:

      根据thisandroid代码,YV12相当于YUV420P,ffmpeg/ffplay支持yuv420p。

      所以您应该能够使用以下方式播放您的 yv12 内容:

       ffplay  -f rawvideo -pixel_format yuv420p -video_size <wxh> -i <file name>
      

      使用 ffplay 版本 4.3.1 测试 this android 示例 yuv12 内容。

      【讨论】:

      • OP 已经检查了yuv420p,并说这可以运行,但颜色不正确
      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2013-12-14
      • 2013-09-26
      • 1970-01-01
      • 2013-09-09
      • 2014-11-07
      • 2011-06-28
      • 2013-12-17
      相关资源
      最近更新 更多