使用 ffmpeg 从未压缩的 y4m 视频中提取帧
Extract frames from uncompressed y4m video using ffmpeg
我正在尝试从大型未压缩 y4m 视频中获取小序列(64 帧)。
输入是我从 Netflix 获得的已知测试序列:https://media.xiph.org/video/derf/
由于视频是使用复制解压缩的,因为编解码器应该可以正常工作。
这是我试过的:
./bin/ffmpeg -ss 2.0 -i Netflix_TunnelFlag_4096x2160_60fps_10bit_420.y4m -vframes 64 -codec copy -y /tmp/test.y4m
但是我得到这个错误:
[yuv4mpegpipe @ 0x35f3320] ERROR: Codec not supported.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid data found when processing input
我不确定在这么简单的操作中会出现什么问题,我认为 FFMpeg 应该只是复制 64 个 I 帧并将它们放在一个新容器中。
我也尝试过更改容器,唯一可行的方法是使用 yuv 容器,但我想避免使用它,因为它不是容器 :)
删除 -codec copy
,只使用 y4m 的默认设置(无论如何都是 rawvideo 到 rawvideo)。
错误消息“Codec not supported
”可以改进以提供更多信息。 yuv4mpegpipe 混合器,连同其他一些与原始视频相关的混合器,将默认使用 "wrapped_avframe" 伪编码器,"avoids a costly memcpy of every single video frame" compared to using the old API. See Deprecating AVPicture 了解更多信息。
tl;dr:速度更快。
我正在尝试从大型未压缩 y4m 视频中获取小序列(64 帧)。
输入是我从 Netflix 获得的已知测试序列:https://media.xiph.org/video/derf/
由于视频是使用复制解压缩的,因为编解码器应该可以正常工作。 这是我试过的:
./bin/ffmpeg -ss 2.0 -i Netflix_TunnelFlag_4096x2160_60fps_10bit_420.y4m -vframes 64 -codec copy -y /tmp/test.y4m
但是我得到这个错误:
[yuv4mpegpipe @ 0x35f3320] ERROR: Codec not supported.
Could not write header for output file #0 (incorrect codec parameters ?): Invalid data found when processing input
我不确定在这么简单的操作中会出现什么问题,我认为 FFMpeg 应该只是复制 64 个 I 帧并将它们放在一个新容器中。
我也尝试过更改容器,唯一可行的方法是使用 yuv 容器,但我想避免使用它,因为它不是容器 :)
删除 -codec copy
,只使用 y4m 的默认设置(无论如何都是 rawvideo 到 rawvideo)。
错误消息“Codec not supported
”可以改进以提供更多信息。 yuv4mpegpipe 混合器,连同其他一些与原始视频相关的混合器,将默认使用 "wrapped_avframe" 伪编码器,"avoids a costly memcpy of every single video frame" compared to using the old API. See Deprecating AVPicture 了解更多信息。