【问题标题】:Fast seeking ffmpeg multiple times for screenshots多次快速寻找ffmpeg截图
【发布时间】:2015-01-04 18:11:11
【问题描述】:

我遇到了https://askubuntu.com/questions/377579/ffmpeg-output-screenshot-gallery/377630#377630,非常完美。这正是我想要的。

但是,我使用远程 URL 来生成屏幕截图时间线。我知道可以使用https://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg(在-i 之前使用-ss)快速搜索远程文件,但这只会运行一次。

我正在寻找一种使用方法

./ffmpeg -i input -vf "select=gt(scene\,0.4),scale=160:-1,tile,scale=600:-1" \
-frames:v 1 -qscale:v 3 preview.jpg

命令,但使用快速查找方法,因为它目前在与远程文件一起使用时非常慢。我使用 PHP,但我知道使用 av_seek_frame 存在 C 方法,我几乎不知道 C,所以我无法将它实现到我正在编写的 PHP 脚本中。所以希望,可以直接在 PHP system() 函数中使用 ffmpeg 来实现。

目前,我运行单独的 ffmpeg 命令(使用 -ss 方法),然后在 PHP 中将屏幕截图组合在一起。但是,使用这种方法,它每次都会重新获取元数据,而更优化的方法是让这一切都发生在同一个命令行中,因为我想减少对远程 url 的请求数量,这样我就可以运行更多脚本依次类推。

感谢您的帮助。

【问题讨论】:

  • 所以你想要一个远程文件的多个“快照”?如果是这样trac.ffmpeg.org/wiki/… 可能有用
  • 是的,在远程文件上,但使用快速查找方法。目前,在 askubuntu 链接中使用 -vf 链接似乎是一种缓慢的方法,因为生成屏幕截图需要很长时间。但是,在“-i”之前使用“-ss”会很快生成它们。目前生成多个“-ss”命令然后将它们拼接在一起比使用“-vf”方法更快。

标签: ffmpeg


【解决方案1】:

这很慢的主要原因是因为“select=gt(scene\,0.4)”需要对每一帧进行解码并与下一帧进行比较,以便检测到场景变化。

我不相信你正在做的事情比使用场景变化检测器更快。您可以从 video_duration/n 步中提供 n 个屏幕截图,此外您还可以通过检查图像强度是否高于阈值来检查每一帧是否为黑色。

【讨论】:

    【解决方案2】:

    是的,因为 -ss 不在 -i 之前,您需要在每个输入之前添加它。

    所以这里有一个工作示例,它可以超快地取出它。

    ffmpeg -ss 10 -i test.avi -frames:v 1 -f image2 -map 0:v:0 thumbnails/output_0.png \
          -ss 800 -i test.avi -frames:v 1 -f image2 -map 1:v:0 thumbnails/output_1.png \
         -ss 2400 -i test.avi -frames:v 1 -f image2 -map 2:v:0 thumbnails/output_2.png
    

    所以 0 : v : 0 表示第一个输入,选择视频流,第一个视频流 1 : v : 0 表示第二个输入,选择视频流,第一个视频流 (0) 2 : v : 0 表示第二个输入,并且选择视频流,第一个视频流(0)

    【讨论】:

    • 我用ffmpeg -ss 100 -i $URL -frames:v 1 -filter:v $FILTER file1.jpg -ss 500 -i $URL -frames:v 1 -filter:v $FILTER file2.jpg 尝试了你的答案,让 file1.jpg 成为 100 秒的缩略图,而 file2.jpg 成为 500 秒的缩略图,但两个文件在不应该时是相同的是。我使用正确吗?
    • @user779159 你能试试下面的确切命令吗 ffmpeg -ss 100 -i $URL -frames:v 1 -f image2 -map 0:v:0 file1.jpg -ss 500 -i $URL-帧:v 1 -f image2 -map 1:v:0 file2.jpg
    【解决方案3】:
    $ffmpeg = "ffmpeg.exe";
    $cmd = "$ffmpeg -ss 20 -i $Filename -frames:v 1 mjpeg -map 0:v:0 $Thumbnail";
    $Return = `$cmd`;
    

    制作极快的视频缩略图。 $Filename 是视频的文件和路径,例如C:\videos\video_1.mp4

    $Thumbnail 是您希望缩略图存储位置的文件路径和文件名,例如C:\Thumbnails\Thumbnail_1.jpg

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 1970-01-01
      • 2021-01-23
      • 2016-07-04
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2016-06-09
      相关资源
      最近更新 更多