Linux:如何从视频中提取帧?(无损)

Tra*_*rae 18 video linux ffmpeg framerate

我读过关于使用程序,如一些答案和文章VLCMPlayerffmpeg,等,但没有我见过的方法是“无损”。他们不会捕捉每一帧。我想从视频中提取每一帧作为图像(100% 质量,我不想丢失任何细节),所以理论上可以拍摄这些图像并重新创建视频文件而无法区分原版(当然不包括缺少音频)。

如果我可以指定从中抓取帧的开始和结束时间,则奖励积分,因此我不必事先裁剪视频文件。

Ely*_*Ely 15

您可以将帧提取为 PNG,这是一种无损图片压缩格式。例如,将帧从 5mn 标记提取到 10mn 标记:

ffmpeg -ss 05:00 -i <input> -t 05:00 filename%05d.png
Run Code Online (Sandbox Code Playgroud)

  • `ffmpeg` 输出 `PNG8` 文件,它不是*无损的,它只有 256 种颜色(与 GIF 相同!只有 `PNG24` 是无损的。`.bmp` 将是 `ffmpeg` 的无损选项 (4认同)

chr*_*ric 9

有几种工具应该能够从电影文件中提取所有帧:

转换
avconv -i file.avi -f image2 Out%00d.jpg

ffmpeg
ffmpeg -i input.file thumb%04d.png -hide_banner

这也可以导出 BMP,其处理时间比 PNG 或 JPG 少得多。

还有一个名为mov2frame.sh的 bash 脚本,它试图自动执行 FFMPEG 提取过程。

播放器
mplayer -ao null -vo png input.file

或其他选择:

mplayer -nosound -vo png:z=9 my_file.mp4

VLC 这个媒体播放器显然可以使用它的过滤器导出图像集,但看起来很麻烦,除非它是你唯一的用途或者你有一个便携式版本。

  1. 创建一个文件夹来存储您的框架并将路径复制到它。对于 Mac OSX/Linux 用户,这必须是完整路径(没有 ~)。

  2. 单击 VLC 中的工具/首选项。

  3. 在“显示设置”下,单击“全部”。

  4. 在“视频”下,选择“过滤器”。勾选“场景视频过滤器”。

  5. 展开“过滤器”并选择“场景过滤器”,

  6. 将之前的路径粘贴到“目录路径前缀”中。

  7. 在“录制比例”框中选择要编码的帧的分数。1/12 每 12 输出一次,1/1 将全部输出

  8. 点击“保存”。

  9. 单击媒体/打开视频并找到您的视频。耐心地让整件事发挥作用。

  10. 单击工具/首选项。在“显示设置”下,单击“全部”。在“视频”下,选择“过滤器”。取消选中“场景视频过滤器”。点击“保存”。这是为了让 VLC 在您下次播放视频时不会生成缩略图。关联

第一次运行程序时,管理员权限似乎也有一些潜在的问题:

sudo vlc [sudo] password for mint16: VLC is not supposed to be run as root. Sorry. If you need to use real-time priorities and/or privileged TCP ports you can use vlc-wrapper (make sure it is Set-UID root and cannot be run by non-trusted users first).

当提取到 BMP 而不是 PNG 时,VLC 也表现得更好