【问题标题】:ffmpeg choose exact frame from long film stripffmpeg 从长胶片中选择精确的帧
【发布时间】:2018-04-28 10:06:19
【问题描述】:

我正在使用 ffmpeg 为我的视频选择更好的缩略图。并且选择将基于滑块。 根据要求,多个缩略图不需要一个长的电影图像,并在滑块的帮助下选择缩略图并保存。

我使用下面的命令来获取长条缩略图。

ffmpeg -loglevel panic -y -i "video.mp4" -frames 1 -q:v 1 -vf "select=not(mod(n\,40)),scale=-1:120,tile=100x1 " video_preview.jpg

我按照this tutorial的指示进行操作

我能够得到长片图像:

这很好,他们在滑块中移动图像很好。

我的问题是如何从该滑块/胶片条中选择特定帧。如何从滑块计算确切的持续时间,然后执行命令来提取该帧?

【问题讨论】:

  • 帧将如何被选中,帧号会返回给你吗?

标签: ffmpeg


【解决方案1】:

在我的一个项目中,我实现了以下场景。在我从 ffmgpeg 命令获取视频持续时间的代码中,如果持续时间小于 0.5 秒,则我为其设置新的缩略图间隔。在您的情况下,您应该设置缩略图创建的时间间隔。希望这会对您有所帮助。
$dur = 'ffprobe -i '.$video.' -show_entries 格式=持续时间 -v 安静 -of csv="p=0"'; $duration= 执行($dur);

            if($duration < 0.5) {
                $interval = 0.1;
            } else {
                $interval = 0.5;
            }

            screenshot size
            $size = '320x240';

            ffmpeg command
            $cmd = "ffmpeg -i $video -deinterlace -an -ss $interval -f mjpeg -t 1 -r 1 -y $image";
            exec($cmd);

【讨论】:

  • 这样的条带中的帧将按 PTS 排序,-ss 将根据 DTS 进行搜索,因此您将无法获得所需的确切帧。使用该 ffprobe 命令,您可以根据匹配的 PTS 转储帧的 DTS,然后进行搜索。
【解决方案2】:

你可以试试这个:

ffmpeg -vsync 0 -ss duration -t 0.0001 -noaccurate_seek  -i filename -ss 00:30 -t 0.0001 -noaccurate_seek -i filename -filter_complex [0:v][1:v] concat=n=2[con];[con]scale=80:60:force_original_aspect_ratio=decrease[sc];[sc]tile=2x1[out] -map [out]:v -frames 1 -f image2   filmStrip.jpg

2 frame

【讨论】:

  • 请解释为什么这会起作用以及它的作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 2018-07-27
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多