首页 > 其他分享 >ffmpeg提取aac数据

ffmpeg提取aac数据

时间:2024-05-25 19:23:47浏览次数:22  
标签:提取 ffmpeg aac fCtx packet av input NULL size

方法1:通过命令提取

 ffmpeg -i input.mp4 -vn -acodec aac ../output.aac

方法2:通过代码提取

流程图

 

 

main.c

#include "libavutil/log.h"
#include "libavformat/avformat.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, "open input file stream failed:%s\n", av_err2str(ret));
        avformat_close_input(&fCtx);
        return -1;
    }
    int audioIndex = av_find_best_stream(fCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);
    if (audioIndex < 0) {
        av_log(NULL, AV_LOG_ERROR, "find best stream failed:index:%d\n", audioIndex);
        avformat_close_input(&fCtx);
        return -1;
    }
    av_log(NULL,AV_LOG_INFO,"audioIndex=%d\n",audioIndex);
    FILE *dst = fopen(outputFile, "wb");
    if (dst == NULL) {
        av_log(NULL, AV_LOG_ERROR, "open output file: %s failed", outputFile);
        avformat_close_input(&fCtx);
        return -1;
    }
    AVPacket *packet = av_packet_alloc();
    while (av_read_frame(fCtx, packet) == 0) {
        if (packet->stream_index == audioIndex) {
            size_t size = fwrite(packet->data, 1, packet->size, dst);
            if (size != packet->size) {
                av_log(NULL,AV_LOG_ERROR,"write size:%zu,packet size:%d",size,packet->size);
                fclose(dst);
                avformat_close_input(&fCtx);
                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,aac,fCtx,packet,av,input,NULL,size
From: https://www.cnblogs.com/navysummer/p/18212900

相关文章

  • ffmpeg
    1.ffmpegffmpeg官网,https://ffmpeg.org/ffmpeg.html。FFmpeg是领先的多媒体框架,能够解码、编码、转码、过滤和播放多媒体。2.项目中视频处理使用ffmpeg的两种方式方式一。官方下载ffmpeg的基于windows或者linux的工具包。将ffmpeg的bin添加到path中,然后就可以直接使用f......
  • ffmpeg显示视频信息
    方式1:通过命令获取ffprobe../input.mp4方式2:代码获取main.c#include"libavutil/log.h"#include"libavformat/avformat.h"intmain(intargc,char**argv){av_log_set_level(AV_LOG_DEBUG);if(argc<2){av_log(NULL,AV_LOG_ERROR,......
  • ArcPy按掩膜提取ExtractByMask的边界问题
    问题描述按掩膜提取是GIS数据处理中常用的功能之一。按照官方的示例,使用ArcPy的ExtractByMask方法可实现提取,代码如下:1importarcpy2fromarcpyimportenv3fromarcpy.saimport*45env.workspace="C:/sapyexamples/data"6outExtractByMask=Extrac......
  • ffmpeg常用命令
    #通过ffmpeg查看文件属性,使用参数-hide_banner隐藏ffmpeg本身信息ffmpeg-ivideo_file.mp4-hide_banner#格式转换,使用-qscale0来保留原始的视频质量ffmpeg-ivideo_input.wav-qscale0video_output.mp4#格式转换,使用-c:a(音频)和-c:v(视频)来指定编码器名......
  • CentOS 7安装mediainfo以及ffmpeg工具
    基于CentOS7.9的基础镜像,安装mediainfo以及ffmpeg工具一、安装FROMcentos:centos7.9.2009RUNyuminstallepel-release-yRUNyuminstallmediainfo-yRUNrpm-Uvhhttps://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpmRUNyuminstallf......
  • Java实现抓取在线视频并提取视频语音为文本
     最近在做大模型相关的项目,其中有个模块需要提取在线视频语音为文本并输出给用户。作为一个纯后端Jave工程师,搞这个确实是初次尝试。二、调研基于上述功能模块,主要有三大任务:1、提取网页中的视频2、视频转语音3、语音转文本。首先是第一项:尝试了jsoup,webmagic等工......
  • 使用Chrome 开发者工具提取对应的字符串
    最近在查看一个API的数据,效果很好,但是里面只有一部分我想要的内容 如果是简单一点的可以直接获取如下比如我想要提取返回的代码中关键的字符串:"video":"这里的内容"//定义一个正则表达式来匹配'"video":"链接"'格式的字符串varregex=/"video":\s*"([^"]+)"/gi;......
  • wav之提取
    如果需要纯粹的PCM数据而非WAV文件,可以从WAV文件中提取PCM数据。方法1:使用编程语言(如Python)importwavedefextract_pcm(wav_file,output_pcm):withwave.open(wav_file,'rb')aswf:n_channels=wf.getnchannels()sample_width=wf.getsampwid......
  • PDF文档里的图片提取转文字
    最近需要处理一堆PDF文档,这堆PDF文档中有图片,并且需要提取出pdf中的图片来识别图片中的文字,老规矩先上代码:importosimportfitzimportpytesseractfromPILimportImage#设置TesseractOCR引擎的路径(根据你的系统环境修改)pytesseract.pytesseract.tesseract_cmd=r'C......
  • FFMPEG windows版本编译
    安装MSYS2:更新MSYS2系统:pacman-Syu打开正确的终端:?如果您要编译64位版本的FFmpeg)或MSYS2MinGW32-bit(如果您需要编译32位版本)。安装所需组件:?在打开的MinGW-w64终端中,安装编译FFmpeg所需的工具链、开发工具和依赖库:pacman-Sbase-develgitmingw-w64-x86_64-toolchainm......