版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FFmpeg音视频处理全套工程案例合集⚠️重要前置说明:两种开发模式命令行模式:启动子进程调用ffmpeg.exe/ffmpeg,开发简单,适合业务工具、中小型系统;原生API模式(libav):编译链接libavformat/libavcodec/libavutil/libswscale,无进程开销,高性能服务(直播网关、转码集群)。环境:预先安装FFmpeg并配置环境变量,或内置二进制文件。目录【案例1】Python批量音视频工具箱(ffmpeg-python,快速落地)【案例2】JavaSpringBoot分布式视频转码系统(Web服务,后台任务)【案例3】Go轻量直播推流&拉流录制工具【案例4】C++FFmpeg原生API工程(解封装、编码、音视频合成,核心底层)【案例5】常用FFmpeg核心命令清单(配套所有项目直接调用)部署建议、集群转码优化方案案例1:Pythonffmpeg-python全能批量处理工具适合:本地批量处理、小工具、自动化脚本依赖安装bashpipinstallffmpeg-python#系统提前装好ffmpeg完整源码av_tool.pypython运行importffmpegimportosfrompathlibimportPathclassFFmpegTool:@staticmethoddefvideo_audio_split(video_path:str,out_audio:str):"""音视频分离:提取音频"""(ffmpeg.input(video_path).output(out_audio,vn=None)#vn=novideo.overwrite_output().run())@staticmethoddefmux_av(video_no_audio:str,audio_file:str,out_video:str):"""音视频合成(封装)"""video=ffmpeg.input(video_no_audio)audio=ffmpeg.input(audio_file)(ffmpeg.output(video,audio,out_video,vcodec="copy",acodec="copy").overwrite_output().run())@staticmethoddeftranscode(in_path:str,out_path:str,resolution="1280x720",crf=23):"""视频转码h264"""(ffmpeg.input(in_path).filter("scale",resolution.split("x")[0],resolution.split("x")[1]).output(out_path,vcodec="libx264",crf=crf,preset="medium",acodec="aac").overwrite_output().run())@staticmethoddefadd_watermark(video_in:str,watermark_img:str,video_out:str,x=20,y=20):"""添加图片水印"""(ffmpeg.input(video_in).overlay(x,y).input(watermark_img).output(video_out).overwrite_output().run())@staticmethoddefcapture_snapshot(video_path:str,out_img:str,time_pos="00:00:05"):"""截取视频封面截图"""(ffmpeg.input(video_path,ss=time_pos).filter("scale",640,-1).output(out_img,vframes=1).overwrite_output().run())@staticmethoddefbatch_process(folder:str):"""批量遍历文件夹转码"""p=Path(folder)forfileinp.glob("*.mp4"):out=str(file.with_name(f"trans_{}"))print(f"正在处理{}")FFmpegTool.transcode(str(file),out)if__name__=="__main__":tool=FFmpegTool()#示例:提取音频#tool.video_audio_split("test.mp4","audio.aac")#转码#tool.transcode("test.mp4","720p.mp4")#批量#tool.batch_process("./videos")优点:开发速度极快;缺点:高并发场景进程调度开销大,不建议上万任务集群。案例2:SpringBootJava视频转码Web系统(生产可用工程架构)技术方案:JavaProcessBuilder调用FFmpeg命令+线程池+任务数据库记录状态核心模块任务提交接口(上传视频/传入文件路径)线程池异步执行转码任务状态持久化(待处理/转码中/成功/失败)进度解析(捕获ffmpegstderr日志解析当前进度)核心工具类FFmpegUtil.javajava运行importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassFFmpegUtil{//转码并发数,根据CPU核心调整privatestaticfinalExecutorServiceTRANSCODE_POOL=Executors.newFixedThreadPool(4);/***异步视频转码*/publicstaticvoidasyncTranscode(Stringsrc,Stringdest,LongtaskId){TRANSCODE_POOL.submit(()->{//ffmpeg命令String[]cmd={"ffmpeg","-y","-i",src,"-vcodec","libx264","-preset","medium","-crf","24","-acodec","aac",dest};ProcessBuilderpb=newProcessBuilder(cmd);pb.redirectErrorStream(true);try{Processprocess=pb.start();//读取输出,解析进度BufferedReaderbr=newBufferedReader(newInputStreamReader(process.getInputStream()));Stringline;while((line=br.readLine())!=null){//解析time=xx.xx获取进度,更新数据库task进度if(line.contains("time=")){//updateTaskProgress(taskId,line);}}intexitCode=process.waitFor();if(exitCode==0){//转码成功updateStatus(taskId,SUCCESS)}else{//失败updateStatus(taskId,FAIL)}}catch(Exceptione){e.printStackTrace();}});}//音视频分离publicstaticStringgetExtractAudioCmd(Stringvideo,StringaudioOut){returnString.format("ffmpeg-y-i%s-vn-acodeccopy%s",video,audioOut);}}配套数据表(Mysql)sqlCREATETABLEvideo_transcode_task(idBIGINTPRIMARYKEYAUTO_INCREMENT,src_pathVARCHAR(512),dest_pathVARCHAR(512),statusTINYINTCOMMENT'0待处理1处理中2成功3失败',progressINT,create_timeDATETIME,finish_timeDATETIME);扩展方案:接入RabbitMQ实现分布式转码集群,多机器消费任务。案例3:Go直播推流&录像工具(RTMP推流+拉流录制)Go适合运维工具、边缘推流网关;调用ffmpeg子进程。go运行packagemainimport( "os/exec")//RTMP本地文件推流到直播服务器funcPushStream(videoFilestring,rtmpUrlstring)error{ args:=[]string{ "-re", "-i",videoFile, "-c:v","copy", "-c:a","copy", "-f","flv", rtmpUrl, } cmd:=exec.Command("ffmpeg",args...) returncmd.Run()}//拉取rtmp流,保存为本地视频funcRecordStream(rtmpUrlstring,savePathstring)error{ args:=[]string{ "-y", "-i",rtmpUrl, "-c","copy", savePath, } cmd:=exec.Command("ffmpeg",args...) returncmd.Run()}funcmain(){ //PushStream("input.mp4","rtmp:///live/stream1") //RecordStream("rtmp:///live/stream1","record.mp4")}直播配套:搭配Nginx-RTMP/SRS流媒体服务器搭建完整直播链路。案例4:C++FFmpeglibav原生API完整工程(最底层,无进程调用)⭐高性能转码服务首选,直接调用FFmpeg底层库,不创建子进程功能演示:avformat打开媒体、解封装音频、视频数据包读取视频缩放swscale重新编码+封装输出音视频合成mux编译环境Windows:MSVC+vcpkg安装ffmpegLinux:aptinstalllibavformat-devlibavcodec-devlibswscale-devlibavutil-dev极简核心示例代码main.cppcpp运行extern"C"{#include<libavformat/avformat.h>#include<libavcodec/avcodec.h>#include<libswscale/swscale.h>#include<libavutil/avutil.h>}#include<iostream>staticvoidlog_error(intret){charerr[AV_ERROR_MAX_STRING_SIZE];av_strerror(ret,err,sizeof(err));std::cerr<<err<<std::endl;}intmain(){av_register_all();AVFormatContext*pFormatCtx=nullptr;intret=avformat_open_input(&pFormatCtx,"input.mp4",nullptr,nullptr);if(ret<0){log_error(ret);return-1;}avformat_find_stream_info(pFormatCtx,nullptr);//打印媒体信息av_dump_format(pFormatCtx,0,"input.mp4",0);//后续:查找视频流、打开解码器、读取AVPacket、像素转换、编码、封装输出avformat_close_input(&pFormatCtx);return0;}【重要】完整工程CMakeLists、完整转码代码、pts/dts时间基处理、音频重采样代码量较大,如果你需要,我可以直接输出完整可编译CMake项目整套代码(包含重采样swresample)。C++方案适用场景低延迟实时转码多路并发转码服务器嵌入式设备(ARM网关、摄像头设备)通用高频FFmpeg命令(所有项目直接调用)1.音视频分离bash#提取音频ffmpeg-iinput.mp4-vn-acodeccopyaudio.aac#提取视频(无声)ffmpeg-iinput.mp4-an-vcodeccopysilent.mp42.音视频合成bashffmpeg-isilent.mp4-iaud
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 感恩教育主题班会(完美)课件
- 网络推广年度个人工作总结
- 老年骨科手术术后并发症
- 2026年医疗器械质量安全主体责任监督管理规定培训考试试题(含答案)
- 受限空间作业安全管理
- 2026年输血法试题及答案
- 护理管道安全管理
- 露天煤矿安全生产管理制度
- 药品管理法培训试题及答案
- 办公楼装修工程弱电工程施工组织设计方案
- GB 4053.3-2025固定式金属梯及平台安全要求第3部分:工业防护栏杆及平台
- 2025年山东职教英语试卷及答案
- 钢结构加固设计标准
- 【施工】建设工程施工现场安全管理研究论文开题报告和任务书
- 2025中远海运战略性新兴产业人才社会招聘265人笔试历年常考点试题专练附带答案详解2套试卷
- 胃癌合并肝转移综合治疗方案
- 南昌水业集团南昌工贸有限公司2026年招聘考前自测高频考点模拟试题浓缩300题必考题
- 退休支部工作计划2025完整版
- GB/T 46197.2-2025塑料聚醚醚酮(PEEK)模塑和挤出材料第2部分:试样制备和性能测定
- 啤酒质量知识培训课件
- 消毒供应中心清洗课件
评论
0/150
提交评论