FFmpeg读取、增加视频关键帧

  

     失踪人口回归! 

     最近在研究一个叫做视频关键帧的东西,我现在咸鱼得不行,懒得写那么多东西。

      再次强调,这篇博客是写给自己看的,就比较糙了。

      简单来说关键帧就是一种很关键的帧,哈哈哈我开玩笑的。严肃一点,目前市场主流的视频压缩算法叫做H264编码,这个编码把帧分成三种:

    Inter Frame(I帧)

    P-Frame(P帧)

    B-Frame(B帧)

    其中呢,I帧也叫关键帧,它有完整的图像,其他两种帧没有完整的图像,都要依靠于它生成完成的图像。

    所以一个视频的I帧越少,视频就越小。

    原理到此结束,下面介绍两个东西FFmpeg读取视频关键帧和增加视频关键帧。

    先看看如何输出一个视频的关键帧数量,首先要去下载一个叫做ffmpeg的工具。

  mac下命令行:

ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 750*1334 -f image2 core-%02d.jpeg

上面要注意视频路径、文件名、分辨率都要对上。

然后再看看如何添加一个视频的关键帧

mac下命令行:

ffmpeg -i "/path/mmp.mp4" -c:v libx264 -preset superfast -x264opts keyint=25 -acodec c
你可以使用 Java 和 FFmpeg 库来从网络视频地址中抽取帧。下面是一个简单的示例代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class FFmpegFrameExtractor { public static void main(String[] args) { String videoUrl = "YOUR_VIDEO_URL"; String outputFolder = "OUTPUT_FOLDER_PATH"; String ffmpegPath = "FFMPEG_EXECUTABLE_PATH"; try { // 构建 FFmpeg 命令 String command = ffmpegPath + " -i " + videoUrl + " -vf \"select=eq(pict_type\\,I)\" -vsync vfr " + outputFolder + "/frame-%03d.jpg"; // 执行命令 Process process = Runtime.getRuntime().exec(command); // 读取命令输出 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } process.waitFor(); System.out.println("抽帧完成!"); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } ``` 请注意,你需要将 `YOUR_VIDEO_URL` 替换为你的网络视频地址,`OUTPUT_FOLDER_PATH` 替换为希望保存抽取的帧的文件夹路径,以及 `FFMPEG_EXECUTABLE_PATH` 替换为你的 FFmpeg 可执行文件的路径。 该代码使用 `Runtime.getRuntime().exec()` 方法执行 FFmpeg 命令,并通过读取命令输出来获取进程信息。在这个例子中,我们使用了 FFmpeg 的 `-vf` 参数来选择只提取关键帧,`-vsync vfr` 参数用于在不丢帧的情况下提取所有关键帧。抽取的帧将以 `frame-001.jpg`,`frame-002.jpg` 等命名,并存储在指定的输出文件夹中。 请确保你已经正确安装并配置了 FFmpeg,并将其可执行文件路径设置为 `FFMPEG_EXECUTABLE_PATH`。 希望这可以帮助到你!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值