首页 > 其他分享 >ffmpeg提取H264视频数据

ffmpeg提取H264视频数据

时间:2024-05-26 15:45:30浏览次数:14  
标签:视频 ffmpeg H264 fCtx packet av input NULL size

方法1:命令提取

ffmpeg -i input.mp4 -an -vcodec copy out.h264

ffmpeg -i input.mp4 -an -vcodec copy -bsf: h264_mp4toannexb out1.h264

  

方法2:代码提取

 

main.c

#include "libavutil/log.h"
#include "libavformat/avformat.h"
#include "libavutil/avutil.h"
#include "libavcodec/avcodec.h"


int main(int argc, char **argv) {
    av_log_set_level(AV_LOG_DEBUG);
    if (argc < 3) {
        av_log(NULL, AV_LOG_ERROR, "Usage: %s inputFile outputFile\n", argv[0]);
        return -1;
    }
    const char *inputFile = argv[1];
    const char *outputFile = argv[2];
    AVFormatContext *fCtx = NULL;

    int ret = avformat_open_input(&fCtx, inputFile, NULL, NULL);
    if (ret != 0) {
        av_log(NULL, AV_LOG_ERROR, "Open input file %s failed: %s\n", inputFile, av_err2str(ret));
        return -1;
    }
    ret = avformat_find_stream_info(fCtx, NULL);
    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR, "Find input file stream info failed: %s\n", av_err2str(ret));
        avformat_close_input(&fCtx);
        return -1;
    }
    int videoIndex = av_find_best_stream(fCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
    if (videoIndex < 0) {
        av_log(NULL, AV_LOG_ERROR, "Find best stream failed: %d\n", videoIndex);
        avformat_close_input(&fCtx);
        return -1;
    }
    av_log(NULL, AV_LOG_INFO, "videoIndex=%d\n", videoIndex);
    FILE *dst = fopen(outputFile, "wb");
    if (dst == NULL) {
        av_log(NULL, AV_LOG_ERROR, "Open output file: %s failed\n", outputFile);
        avformat_close_input(&fCtx);
        return -1;
    }
    AVPacket *packet = av_packet_alloc();
    packet->data = NULL;
    packet->size = 0;
    while (av_read_frame(fCtx, packet) == 0) {
        if (packet->stream_index == videoIndex) {
            size_t size = fwrite(packet->data, sizeof(uint8_t), packet->size, dst);
            if (size != packet->size) {
                av_log(NULL, AV_LOG_ERROR, "Write size: %zu, packet size: %d\n", size, packet->size);
                fclose(dst);
                avformat_close_input(&fCtx);
                av_packet_unref(packet);
                return -1;
            }
        }
        av_packet_unref(packet);
    }

    if (fCtx != NULL) {
        avformat_close_input(&fCtx);
    }
    fclose(dst);

    return 0;
}

 Makefile

TARGET=main
SRC=main.c
CC=gcc
CFLAGS=-I /usr/local/ffmpeg/include
LDFLAGS=-L /usr/local/ffmpeg/lib
LDFLAGS+= -lavutil -lavformat -lavcodec
all:$(TARGET)
$(TARGET):$(SRC)
    $(CC) $(SRC) $(CFLAGS) $(LDFLAGS) -o $(TARGET)
clean:
    rm -rf $(TARGET)

  

标签:视频,ffmpeg,H264,fCtx,packet,av,input,NULL,size
From: https://www.cnblogs.com/navysummer/p/18213764

相关文章

  • 7.2k star的万能视频解析下载插件
    今天给大家介绍一个超级厉害的浏览器插件,可以解析各个平台网页视频——猫抓。项目简介猫抓(cat-catch)是一款资源嗅探扩展插件,他能够帮助你筛选列出当前页面的资源。简单来说,当你打开任意一个带有视频的网页,猫抓就可以解析视频的真实地址,协助你下载视频。猫抓这个名字很有......
  • 视频号创作者分成5.0,最新方法,条条爆款,简单无脑,单日变现1000+
    福利来了,微信视频号分成计划正式推出啦!这是微信平台为鼓励优质原创内容创作而推出的一项激励机制。通过这个计划,内容创作者可以通过发布原创视频,吸引用户观看并在评论区互动,从而获得广告分成收益。这种模式类似于公众号的文字内容变现,但视频号专注于视频内容。这意味着,只要......
  • FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流
    ​OBS是一个开源的直播录制软件,英文全称叫做OpenBroadcasterSoftware,广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、MacOS、Linux等操作系统。OBS的官网是https://obsproject.com/,录制软件名叫OBSStudio,它基于QT+FFmpeg编码。使用OBS实现直播功能的......
  • 【使用Python3实现一个音视频播放的工具,同时实现一些自动化的功能,比如视频格式转换,视
    最近有个想法,就是使用python工具自动识别视频文件中的高潮部分#1,主要用途可以有以下几个:转换视频格式识别体育比赛中的高潮部分同样也适用识别电影中的高潮部分截取视频文件中的高潮部分,做成一个视频集锦2,搜索了一圈。使用以下组合开发了一个雏形项目。命名为movie项目。......
  • 房地产行业如何群发5G视频彩信进行营销
    1.引言房地产行业一直在寻找创新的营销方式来吸引客户,随着5G技术的发展和普及,群发5G视频彩信成为一个值得探索的新途径。本文将探讨房地产行业如何利用5G视频彩信进行营销,从而提高品牌知名度和销售量。2.了解5G视频彩信的优势2.1高速传输和稳定性5G网络具有高速传输和低......
  • 创建3D 视频:CreateStudio 3.X Crack
    轻松创建皮克斯风格的3D视频像皮克斯一样构建您自己的3D角色,只需点击一下即可制作动画并制作令人惊叹的视频。 (不需要技术或设计技能)。......
  • 工作室内部多功能掘金助手,内含短视频挂机养标签辅助引流等功能【掘金助手+使用教程】
    项目介绍:脚本这款软件支持多个个APP,我就不做多介绍了,看图就好。多功能合一脚本设备要求:安卓7.0以上......
  • EasyCVR视频管理平台存在任意用户添加漏洞
    漏洞描述攻击者可以通过发送特定的POST请求,利用未授权访问的接口'/api/v1/adduser',在系统中添加任意用户,并将其设置为管理员角色。fofaapp="EasyCVR-视频管理平台"pocpassword为md5加密POST/api/v1/adduserHTTP/1.1Host:xxx.xxx.xxx.xxxContent-Type:application/x-ww......
  • ffmpeg提取aac数据
    方法1:通过命令提取ffmpeg-iinput.mp4-vn-acodecaac../output.aac方法2:通过代码提取流程图  main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavcodec/avcodec.h"intmain(intargc,char**argv){......
  • 【爬虫软件】用Python开发的抖音关键词搜索工具,可筛选爬取热门视频、最新视频等
    一、背景介绍1.1爬取目标用python开发的爬虫采集软件,可自动按关键词抓取抖音视频数据。为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!软件界面截图:爬取结果截图:结果截图1:结果截图2:结果截图3:以上。1.2演......