首先,我要说明的是,我不是视频处理方面的专家,虽然我已经使用ffmpeg进行了几年(在一个相当有限的范围内)。因此,我对人们常用的“语言”以及它如何影响我所做的操作并不是很熟悉,但我仍会尝试解决这个问题...
我查看了一些链接,例如: ffmpeg - remove sequentially duplicate frames ...但内容并没有真正帮助到我。
我有数百个视频剪辑,它们是在Windows和Linux下使用ffmpeg和其他类似应用程序创建的。但是,它们在视频的某些时间段出现了“静止不动”的显示问题。
例如,假设我们有一个网站,在其中将实时视频流传输到Web浏览器中的Flash视频播放器/插件中。在这种情况下,我们正在谈论一个交通摄像头视频流。
有一个运行的ffmpeg实例正在捕获(Windows)桌面的某个区域,并将其保存为视频文件:
但是,如果我们知道了(格式复杂的)信息,如何重新组织视频而不必执行多次运行ffmpeg来提取视频“切片”以供重新组合呢?
在这种情况下,我猜我们需要运行类似于以下内容的东西:
• 用户指定重复时间段的“阈值持续时间”(可能仅运行1秒钟)
• 确定并保存主视频信息(fps等 - 假定帧速率恒定)
• 映射(开始重复的帧/时间)-> 重复帧数/持续时间
• 如果重复时间小于用户阈值,则不将此段时间视为“一系列重复帧”,并继续
• 提取“非重复”视频片段(上图中的a、b和c)
• 创建具有原始视频规格的“新视频”(空白)
• 对于每个视频片段
• 提取片段的最后一帧
• 创建一个短视频剪辑,其中包含重复的刚提取的帧(持续时间=用户规格= 1秒)
• 将(当前视频片段+短剪辑)附加到“新视频”并重复
但在我的情况下,许多捕获的视频可能长达30分钟,并且有数百个持续10秒钟的暂停,因此使用此方法“重建”视频将需要很长时间。
这就是为什么我希望有一种“可靠”和“更智能”的方法使用ffmpeg(带/不带'mp_decimate'过滤器)在几次传递或更少的时间内执行“减速”功能...也许有一种方式可以指定所需的段(例如在文本文件中),当ffmpeg运行时,它将停止/重新启动在指定的时间/帧数转码?
除此之外,是否有另一个应用程序(用于Windows或Linux)可以实现我想要的功能,而无需手动设置起始/结束点,手动提取/组合视频片段...?
我一直在尝试在Win7-SP1和Puppy Linux Slacko 5.6.4下使用ffmpeg N-79824-gcaee88d来完成所有这些工作。
非常感谢您提供任何线索。
我查看了一些链接,例如: ffmpeg - remove sequentially duplicate frames ...但内容并没有真正帮助到我。
我有数百个视频剪辑,它们是在Windows和Linux下使用ffmpeg和其他类似应用程序创建的。但是,它们在视频的某些时间段出现了“静止不动”的显示问题。
例如,假设我们有一个网站,在其中将实时视频流传输到Web浏览器中的Flash视频播放器/插件中。在这种情况下,我们正在谈论一个交通摄像头视频流。
有一个运行的ffmpeg实例正在捕获(Windows)桌面的某个区域,并将其保存为视频文件:
ffmpeg -hide_banner -y -f dshow ^
-i video="screen-capture-recorder" ^
-vf "setpts=1.00*PTS,crop=448:336:620:360" ^
-an -r 25 -vcodec libx264 -crf 0 -qp 0 ^
-preset ultrafast SAMPLE.flv
假设要捕获的实际“显示”看起来像这样:
123456789 XXXXX 1234567 XXXXXXXXXXX 123456789 XXXXXXX
^---a---^ ^-P-^ ^--b--^ ^----Q----^ ^---c---^ ^--R--^
每个字符位置表示一个(序列)帧,由于网络连接不佳,“单帧”可以显示很长时间('X'字符几乎是前一帧的完全复制)。这意味着我们捕获的视频中有一些段落图像根本没有变化(对于肉眼而言)。
我们如何处理重复帧?如果“重复”的内容对ffmpeg来说并不相同但在观众眼里却看起来更或多或少一样,我们的方法会如何改变?
如果我们只是删除重复的帧,则视频的“节奏感”会丢失,原本可能需要5秒钟才能显示的内容,现在只需要一小部分时间就能完成,这会导致非常生硬、不自然的动作,尽管视频中没有重复的图像。 使用ffmpeg的“mp_decimate”选项似乎可以实现这一点,即:
ffmpeg -i SAMPLE.flv ^ ... (i)
-r 25 ^
-vf mpdecimate,setpts=N/FRAME_RATE/TB DEC_SAMPLE.mp4
我引用的参考资料使用了一个命令,它会显示“mp_decimate”在认为某些帧“相同”时将要删除哪些帧,即:
ffmpeg -i SAMPLE.flv ^ ... (ii)
-vf mpdecimate ^
-loglevel debug -f null -
但是,如果我们知道了(格式复杂的)信息,如何重新组织视频而不必执行多次运行ffmpeg来提取视频“切片”以供重新组合呢?
在这种情况下,我猜我们需要运行类似于以下内容的东西:
• 用户指定重复时间段的“阈值持续时间”(可能仅运行1秒钟)
• 确定并保存主视频信息(fps等 - 假定帧速率恒定)
• 映射(开始重复的帧/时间)-> 重复帧数/持续时间
• 如果重复时间小于用户阈值,则不将此段时间视为“一系列重复帧”,并继续
• 提取“非重复”视频片段(上图中的a、b和c)
• 创建具有原始视频规格的“新视频”(空白)
• 对于每个视频片段
• 提取片段的最后一帧
• 创建一个短视频剪辑,其中包含重复的刚提取的帧(持续时间=用户规格= 1秒)
• 将(当前视频片段+短剪辑)附加到“新视频”并重复
但在我的情况下,许多捕获的视频可能长达30分钟,并且有数百个持续10秒钟的暂停,因此使用此方法“重建”视频将需要很长时间。
这就是为什么我希望有一种“可靠”和“更智能”的方法使用ffmpeg(带/不带'mp_decimate'过滤器)在几次传递或更少的时间内执行“减速”功能...也许有一种方式可以指定所需的段(例如在文本文件中),当ffmpeg运行时,它将停止/重新启动在指定的时间/帧数转码?
除此之外,是否有另一个应用程序(用于Windows或Linux)可以实现我想要的功能,而无需手动设置起始/结束点,手动提取/组合视频片段...?
我一直在尝试在Win7-SP1和Puppy Linux Slacko 5.6.4下使用ffmpeg N-79824-gcaee88d来完成所有这些工作。
非常感谢您提供任何线索。