我有一个视频文件,我想获取其中的视频帧数。我可以ffmpeg用来获取视频的长度和 FPS。但是,对于总帧数,我看不到任何明显的东西。
从理论上讲,应该能够将长度(以秒为单位)乘以 FPS 以获得帧数,但在这种情况下,长度(34.43 秒)和帧速率(29.97 fps)给出了一个非整数,这让我认为我做错了什么。
我需要能够以完全自动化和非图形方式在命令行上执行此操作。我还需要这个非常准确,而不是估计(如果视频文件甚至可能)
我尝试tcprobe在一些文件上使用。对于某些 AVI 文件,它可以工作,但对于某些 VOB 文件,tcprobe 输出没有帧数。我得到这个输出:
[tcprobe] MPEG program stream (PS)
[tcprobe] summary for myfile.vob, (*) = not default, 0 = not detected
import frame size: -g 720x480 [720x576] (*)
aspect ratio: 4:3 (*)
frame rate: -f 29.970 [25.000] frc=4 (*)
PTS=2199.3972, frame_time=33ms bitrate=7000 kbps
audio track: -a 0 [0] -e 48000,16,5 [48000,16,2] -n 0x2000 [0x2000] (*)
PTS=2199.2763, bitrate=192 kbps
-D 3 --av_fine_ms 20 (frames & ms) [0] …Run Code Online (Sandbox Code Playgroud) 我不想为 FFMPEG/libx264 (-r/-framerate) 提供固定的帧速率,而是想指定一个具有 MAXIMUM 值的可变帧速率,并允许 libx264 在它认为合适的时候降低帧速率。这里的想法是在有扩展静止帧之类的东西时获得额外的压缩(这在我的源视频中发生了很多)。
我意识到预测或双向 MPEG 帧会压缩得非常好,但也有可能源帧速率小于我打算转码的帧速率(可能导致更大的流!)。
我有一个 23.976 fps (24000/1001) 的 mkv (h264) 视频,但我想将其转换为 25fps 而不重新编码和降低质量。我知道 mkvmerge 可以做到(使用选项 --default-duration '0:25fps'),但如果可能的话,我想直接从 ffmpeg 执行根据文档,这应该可以工作:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
Run Code Online (Sandbox Code Playgroud)
但是当我执行它时,我只能获得相同的视频 fps。在 ffmpeg 中执行此操作(如果存在)的正确方法是什么?
我读过关于使用程序,如一些答案和文章VLC,MPlayer,ffmpeg,等,但没有我见过的方法是“无损”。他们不会捕捉每一帧。我想从视频中提取每一帧作为图像(100% 质量,我不想丢失任何细节),所以理论上可以拍摄这些图像并重新创建视频文件而无法区分原版(当然不包括缺少音频)。
如果我可以指定从中抓取帧的开始和结束时间,则奖励积分,因此我不必事先裁剪视频文件。
是否有一种准确的方法来获取原始视频并从中提取仅包含奇数帧或偶数帧(由选择)的新视频?
例如:
我有 400 帧(0-399)的“blah.yuv”。我想创建包含帧 1-399(1,3,5,7...399)的“blahOdd.yuv”和包含帧 0-398(0,2,4,6...398)的“blahEven” )。
任何想法如何只使用 FFmpeg 来做到这一点?
我最近一直在玩 FFmpeg 并且我正在尝试转换.avi,.gif因为到目前为止我尝试过的其他方法效果不佳。
我注意到的是,当我使用这个命令时:
ffmpeg -I filename.gif
Run Code Online (Sandbox Code Playgroud)
我可以看到一些文件信息,包括 FPS。
而且我看到,为了让您转换为 gif 的视频不会变慢,可能的最高 FPS 是 50 FPS。
现在是正确的吗?GIF 中可以拥有的最高 FPS 数量是不是 50 FPS 就不会变慢?
那么 60 FPS 的 GIF 不存在吗?
我的电脑在玩动态加载资产的游戏时出现了一个奇怪的问题。也许我找错了地方,但我似乎找不到任何有类似问题的人。
如果不清楚,我会注意一些例子。在 Source 游戏中,映射器能够通过告诉引擎隐藏对象的时间和位置来优化事物,以便在您绕过拐角或打开门之前不会将它们添加到场景中。当需要加载这些对象时,我的计算机会窒息。以传送门 2 为例。一旦某个区域的加载屏幕消失,我就会被扔进关卡。立即,我用冻结的屏幕和口吃/重复的音频打招呼,大约一秒钟。一旦通过,每个人都会以全帧速率继续所有的笨拙。然后我走到一扇门前,触发它打开。当它在另一边的房间中加载时,又是一秒钟的静止和断断续续的音频。如果你看其他人玩游戏,这永远不会发生。反正这个我能忍。它' 很烦人,但它并没有真正干扰游戏玩法。现在让我们玩一个随着你的进步不断加载的游戏,Sonic Generations。站着不动,我得到了如丝般流畅的帧率。但是一旦他开始向前跑,加载更多关卡,我就会下降到 <1 FPS,使其完全无法播放。现在越来越多的游戏似乎在这样做,这就是为什么我终于开始认真地解决它。
我非常怀疑这些停顿是否被编入游戏本身。加载屏幕设计为在加载数据时平稳运行,在任何其他机器上,它们都可以。再次以 Sonic 为例,在加载完成之前,即使是其加载屏幕上的移动部件也非常不稳定。
我大约四年前制造了这台计算机,自从我开始将它用于 3D 游戏以来就遇到了这个问题。从那以后,我更换了主板、硬盘和显卡,因为它们快坏了。(机箱风扇有一天停止工作,硬盘完全是另一回事。)
在 Intel 2.5Ghz 四核、4GB RAM 和 nVidia GTX 460 上运行带有 Aero 的 Win7 Ultimate 64 位。
非常感谢大家!
更新:很明显我收到了一堆页面错误。平均17万每秒与索尼克世代,平均70000和Portal 2负荷时,和一个非常稳定的30000一边看在Livestream.com流。根据 Resource Monitor 的说法,这些甚至不是硬故障。我有点好奇这些数字与其他人相比如何。
附录:不妨添加另一个示例,以及一个潜在的症状。首先是一款名为Trackmania的赛车游戏。在单人比赛中,没有明显的页面错误(超出其他程序可能产生的错误)并且游戏运行如丝般流畅。但是,在线玩游戏时,我会以频繁但随机的时间间隔出现大量打嗝(和页面错误尖峰)。我将继续比赛,游戏将暂停一秒钟或更长时间,然后将我的车辆倒挂在墙壁旁边的皱巴巴的质量中。隐藏其他玩家的汽车也不能解决问题。
至于潜在的症状......我避免提及它,因为我担心这可能是一个无关的问题,并且不想让故障排除者走错路。在这一点上,为什么不提呢?基本上,我的电脑在观看视频一段时间后会彻底死机。循环音频,整个屏幕(包括光标)无响应,num-lock 不会切换,只能硬关机。它可以在几分钟或几小时内触发。通常,视口越大,它发生得越快。只要硬件加速开启,全屏 Youtube 视频就是安全的。
启用硬件加速的全屏 Youtube 似乎不会产生页面错误。然而,当窗口化时它确实如此。直播总是产生页面错误,全屏与否,加速与否。尽管游戏本身会产生大量页面错误,但游戏似乎从未像这样冻结我的计算机。
(将标题从“在后台加载游戏资产时图形变得不稳定”更改为“加载游戏和观看 Flash 视频时出现大量软页面错误。)
我有一个帧率为 30 FPS 的长视频,我想将其转换为帧率为 60 FPS 的 200 倍延时视频。我唯一的问题是 avconv 不必要地在输出中每隔一帧重复一次,使 60 FPS 的输出有效地变为 30 FPS。我希望每一帧都是独一无二的。在速度提高 200 倍和帧速率提高 2 倍时,没有理由重复帧。
例如,问题是输出使用了像 1,1,21,21,41,41,... 这样的源帧,而我希望它使用帧 1,11,21,31,41,51,... .
这是我正在使用的命令:
avconv -i input_30fps.avi -vcodec h264 -an -r 60 -vf "setpts=(1/200)*PTS" output_200x_60fps.avi
Run Code Online (Sandbox Code Playgroud) 我发现许多商业应用程序可以通过将每个第 n 帧写入一个新的视频文件来将例如 120 fps 的“慢动作”视频转换为 30 fps。我希望通常的免费软件工具,如 VLC 或手刹或 ffmpeg 可以为我做到这一点,但我承认无法追踪这样做的命令。我找到了多种方法将每个第 n 帧导出到一组图像文件中,但我肯定不必这样做,然后将数百或数千个 jpg 合并到一个新的视频文件中。
我确实找到了这个使用 setpts的延时答案,所以如果这就是我需要做的,请告诉我(有或没有“you dope”部分:-))。
framerate ×10
ffmpeg ×7
video ×7
linux ×2
animated-gif ×1
command-line ×1
compression ×1
gif ×1
libav ×1
memory ×1
webcam ×1
windows-7 ×1