使用avconv在设定的时间从h264视频中获取单帧

Sam*_*ang 5 video ffmpeg raspberry-pi raspbian avconv

我想使用avconv在视频文件的指定时间获取单个图像.

我已经阅读了很多关于libav的内容,认为我知道自己在做什么,但实际上并不知道.

我试过了:

avconv -ss 00:00:01.786 -r 25 -i input_video.h264 -frames 1 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

以及使用t来避免'frames'参数:

avconv -ss 00:00:01.786 -r 25 -i input_video.h264 -t 0.01 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

并在几秒钟内传递而不是使用hh:mm:ss.xxx格式:

avconv -ss 1.786 -r 25 -i input_video.h264 -t 0.01 output_image.jpg
Run Code Online (Sandbox Code Playgroud)

我看到的是当ss设置为0(即'0','00:00:00.000','0.0'等)时,output_image只是视频的第一帧.正如所料.

ss的任何其他值 - 甚至0.0001 - 都会给出视频的最后一帧.

我正在使用Raspbian wheezy repo的最新avconv.这种行为对我来说感觉像是一个错误,但我不知道视频流的其他复杂性是否足以确定.

有谁知道我做错了什么?



奖金问题:我实际上想从同一个视频中获取大量这些图像.将命令串起来之前似乎有效,即:

avconv -ss 1.786 -r 25 -i input_video.h264 -t 0.01 output_image1.jpg 
-ss 3.454 -r 25 -i input_video.h264 -t 0.01 output_image2.jpg
-ss 5.823 -r 25 -i input_video.h264 -t 0.01 output_image3.jpg
-ss etc,etc.
Run Code Online (Sandbox Code Playgroud)

但我切换回单个图像来调试这个问题.假设第一个问题得到解决,那么构造这个命令的最佳方法还是更好的方法呢?

Ham*_*y75 -1

就我而言,我想要前 3 分钟每 60 秒一张图像......

对于 {0..3} 中的 i ;执行 avconv -ss echo $i*60.0 | bc-i input_video.h264 -frames:v 1 -y out$i.jpg ;完毕

如果您在某些时候需要它,您可以稍微更改一下:9。