使用vda加速的ffmpeg解码示例?

时间:2015-03-17 01:32:23

标签: video ffmpeg

我正在测试ffmpeg的vda hw加速解码器,但到目前为止没有运气。

我使用的命令行是:

./ffmpeg -hwaccel vda -i ~/Downloads/big_buck_bunny_720p_surround.avi -c:v rawvideo -pix_fmt yuv420p out.yuv

(输入视频可在此处下载:http://mirrorblender.top-ix.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi

但它使用的是sw解码器,而不是请求的vda hw解码器。

我调试了ffmpeg.c,并在函数get_format中找到了它:

if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL))
    break;

desc->标志未设置为AV_PIX_FMT_FLAG_HWACCEL,因此它会跳过hw加速初始化。

原因是因为pix_fmt由于某种原因设置为AV_PIX_FMT_NONE,而不是命令指定的yuv420p。

然后我将命令改为:

./ffmpeg -hwaccel vda -i ~/Downloads/big_buck_bunny_720p_surround.avi -c:v rawvideo -pix_fmt vda_vld out.yuv

但我得到的是:

Impossible to convert between the formats supported by the filter 'format' and the filter 'auto-inserted scaler 0'


Error opening filters!

你能告诉我一个使用ffmpeg使用vda hw解码器将上述视频转储到yuv的例子吗?

ffmpeg mailist的更新。

我被告知要尝试以下命令:

    ./ffmpeg -vcodec h264_vda -i ~/Downloads/big_buck_bunny_720p_surround.avi out.yuv

但这就是我得到的:

./ffmpeg -vcodec h264_vda -i ~/Downloads/big_buck_bunny_720p_surround.avi out.yuv

ffmpeg version 2.6.1 Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
configuration: 
libavutil      54. 20.100 / 54. 20.100
libavcodec     56. 26.100 / 56. 26.100
libavformat    56. 25.101 / 56. 25.101
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 11.102 /  5. 11.102
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  1.100 /  1.  1.100
[10:20:50.169] vtDecompressionDuctCreate signalled err=-8973 (err) (Could not select and open decoder instance) at /SourceCache/CoreMedia_frameworks/CoreMedia-1562.107/Sources/VideoToolbox/VTDecompressionSession.c line 1181
[h264_vda @ 0x7f9feb034600] Failed to init VDA decoder: -12473.
[avi @ 0x7f9feb00da00] Failed to open codec in av_find_stream_info
[NULL @ 0x7f9feb034600] missing picture in access unit with size 9960
[10:20:50.252] vtDecompressionDuctCreate signalled err=-8973 (err) (Could not select and open decoder instance) at /SourceCache/CoreMedia_frameworks/CoreMedia-1562.107/Sources/VideoToolbox/VTDecompressionSession.c line 1181
[h264_vda @ 0x7f9feb034600] Failed to init VDA decoder: -12473.
[NULL @ 0x7f9feb034600] missing picture in access unit with size 457

我想尝试这个的原因是因为我想首先使用带有libavcodec的vda。但我看到的问题就是上面的问题。看起来像ffmpeg有同样的问题。

1 个答案:

答案 0 :(得分:0)

我通过电子邮件向libavcodec/vda_h264_dec.c的作者发送了电子邮件,他回复了以下消息:

  

我对VDA解码器无法正确插入并不感到惊讶   这里。我想你最终可能需要重新使用你的视频   MP4或MKV容器。

     

我不确切知道那里发生了什么,但根据我的说法   以前使用VDA框架的经验,该框架已经相当   一些限制。我猜你遇到的限制可能就是那个   需要一些额外的视频数据才能启动解码器   它只支持一些容器。我忘记了确切的名字   那些额外的数据,但AFAIK,只有MP4兼容的容器才可以   提供。


我还记得mp4有一个extradata字段,但我不知道它是什么。

我很快尝试了以下命令,它起作用了:

./ffmpeg -hwaccel vda -i ~/Downloads/big_buck_bunny.mp4 -c:v rawvideo -pix_fmt yuv420p out.yuv​