首页 > 其他分享 >FFMPEG视音频编解码零基础学习方法

FFMPEG视音频编解码零基础学习方法

时间:2024-03-08 20:44:33浏览次数:182  
标签:编解码 封装 FFMPEG 包含 FFmpeg 音视频 视音频 mp4 ffmpeg

背景知识

FFmpeg是一个强大的开源软件项目,包含一套大量的库和程序,用于处理多媒体数据。它可以编码、解码、流式传输、过滤和播放几乎任何人类和及其创建的音频和视频。

  • 使用FFMPEG作为内核视频播放器
    Mplayer、 ffplay 射手播放器 暴风影音 KMPlayer QQ影音

  • 使用FFMPEG作为内核的DirectshowFilter
    ffdshow lav filters

  • 使用FFMPEG作为内核的转码工具
    ffmpeg 格式共厂

1.转换视频格式:

ffmpeg -i 输入文件.mp4 输出文件.avi

2.从视频中提取音频:

ffmpeg -i 输入文件.mp4 -vn -acodec copy 输出文件.mp3

3.转换音频格式:

ffmpeg -i 输入文件.mp3 -acodec pcm-sl6le -ar 44100 -ac 2 输出文件.wav

4.从视频中提取帧

ffmpeg -i 输入文件.mp4 -vf fps=1/10 输出%d.png

5.调整视频大小:

ffmpeg -i 输入文件.mp4 -vf scale=1280:720 输出文件.mp4

6.连接视频:

ffmpeg -i "concat:输入文件1.mp4|输入文件2.mp4" -c copy 输出文件.mp4

ffplay.exe使用

ffplay是FFmpeg提供的一个用于播放音频和视频的简单命令行播放器。它支持几乎所有的音频和视频格式,并且可以在Windows、Linux和macOS等操作系统上运行。

ffplay 文件路径  //要播放名为example.mp4的视频文件  ffplay example.mp4

windows下编译安装ffmpeg

pacman -Syu
  • 3.安装编译工具和依赖项
    执行命令来安装编译工具和FFmpeg的依赖项
pacman -S mingw-w64-x86_64-toolchain 
pacman -S mingw-w64-x86_64-yasm 
pacman -S mingw-w64-x86_64-SDL2 
pacman -S mingw-w64-x86_64-fdk-aac 
pacman -S mingw-w64-x86_64-x264 
pacman -S mingw-w64-x86_64-x265
pacman -S mingw-w64-x86_64-gcc
pacman -S make diffutils pkg-config git nasm
  • 4.获取FFmpeg源代码
git clone https://git.ffmpeg.org/ffmpeg.git
  • 5.准备好源码并新建两个目录
  • 6.切换到目录
    使用./configure命令配置选项
  • 7.make工具编译安装
make -j8
make install
  • 8.这个编译时间较长需要等待

代码介绍

  • libavcodec: 这个目录包含了FFmpeg中所有的解码器编码器

  • libavformat: 这个目录包含了FFmpeg中音视频格式的封装和解封装器。

  • libavutil: 这个目录包含了一些通用的工具函数和数据结构,被其他部分的代码广泛使用。

  • libswscale: 这个目录包含了图像缩放颜色空间转换相关的代码。

  • libswresample: 这个目录包含了音频重采样相关的代码。

  • libavfilter: 这个目录包含了FFmpeg中的滤镜系统相关的代码。

  • libavdevice: 这个目录包含了FFmpeg中的设备支持相关的代码,如摄像头、音频设备等。

  • libpostproc: 这个目录包含了一些后处理相关的代码,例如视频去隔行、降噪等。

  • libavfilter: 这个目录包含了FFmpeg中的滤镜系统相关的代码。

  • fftools: 这个目录包含了一些工具程序,例如命令行工具ffmpeg、ffplay等。

FFMPEG中结构体很多。最关键的结构体可以分成以下几类:

  • AVFormatContext(flv,avi,rmvb,mp4)
    :AVFormatContext是FFmpeg中最关键的结构体之一,它用于表示一个音视频格式的上下文。在解封装过程中,它包含了解封装器的状态信息,包括音视频的信息、封装格式的信息等。

  • AVCodecContext(h264,mpeg2,aac,mp3)
    AVCodeContext是表示一个编解码器的上下文,包含了编解码器的状态信息和参数设置。它包括了编码器或解码器的所有必要信息,如编码/解码参数、编码/解码过程中的缓冲区等。

  • AVFrame(存数据)
    AVFrame是用于表示一帧音视频数据的结构体,它包含了音视频帧的数据以及与该帧相关的元数据。在解码过程中,解码器将音视频数据解码为AVFrame格式进行处理,在编码过程中,编码器将AVFrame编码为特定格式的压缩数据。

  • AVPacket:AVPacket是表示一段音频数据的结构体,它包含了音视频数据的压缩编码数据以及与该数据相关的元数据。在解封装过程中,接封装器将音视频数据封装为AVPacket格式进行处理,在封装过程中,封装器将AVPacket格式进行处理,在封装过程中,封装器将AVPacket封装为特定格式的音视频流。

  • AVFilterContext:AVFilterContext是表示一个滤镜的上下文,它包含了滤镜的状态信息和参数设置。在滤镜

  • AVIOContext:AVIOContext(http,rtsp,rtmp,mms)
    是用于表示音视频输入输出的上下文,它包含了音视频输入输出的状态信息和参数设置。在FFmpeg中,AVIOContext用于管理音视频数据的输入输出流,包括文件读写、网络传输等操作。

互相作用的流程图

开始
 |
 V
AVFormatContext
 |
 V
 读取音视频文件
 |
 V
 封装格式判断
 |
 V
 音视频流提取
 |
 V
 解码器选择
 |
 V
 设置编解码参数
 |
 V
 开始编解码过程
 |
 V
 解码器解码
 |
 V
 处理解码后的数据
 |
 V
 结束

标签:编解码,封装,FFMPEG,包含,FFmpeg,音视频,视音频,mp4,ffmpeg
From: https://www.cnblogs.com/doubleconquer/p/18059024

相关文章

  • linux 入门(七)-ffmpeg使用
    linux入门(七)1:安装ffmpegubuntu下安装ffmpeg:sudoapt-getinstallffmpeg2:ffmpeg--helpffmpegversion4.2.7-0ubuntu0.1Copyright(c)2000-2022theFFmpegdevelopersbuiltwithgcc9(Ubuntu9.4.0-1ubuntu1~20.04.1)configuration:--prefix=/usr--ex......
  • ffmpeg 转码 H.265为 H.264
    树莓派3上omxplayer无法播放h.265编码的.mp4文件,需要进行转码.参考:  https://superuser.com/questions/1380946/how-do-i-convert-10-bit-h-265-hevc-videos-to-h-264-without-quality-loss单个文件:ffmpeg.exe-ixxx.mp4-map0-c:vlibx264-crf18-vfformat=......
  • ffmpeg记录
    最近工作中有用到ffmpeg,这里做一下简单的记录:1、虚拟机平台安装ffmpeg使用apt进行安装sudoaptupdatesudoaptinstallffmpeg之后安装一些需要的安装包sudoaptinstalllibavcodec-devlibavformat-devlibavutil-devlibswscale-dev这样就编译OK了,之后编译程序,使用下......
  • Macos arm64 ffmpeg h264 还原成yuv
    首先编译ffmpeg由于编译很多依赖尝试了三天果断放弃~使用brewbrewinstallffmpegbrewinfoffmpegcmakelist.txtcmake_minimum_required(VERSION3.20)project(ffmpeg_baseC)set(CMAKE_C_STANDARD11)set(FFMPEG_DIR/usr/local/Cellar/ffmpeg/6.1.1_3)include_......
  • windows之FFmpeg 软、硬解码
    设备支持qsv硬件加速,则虚线判断是否可以支持硬解码namespaceCoder.FFmpeg{///<summary>///视频解码器///</summary>publicunsafeclassFFmpegVideoDecoder:IDisposable{#region私有变量//格式转换器privaterea......
  • ffmpeg 工具及命令介绍
    ffprobe工具介绍查看帮助信息:ffprobe--help使用方式:ffprobe[OPTIONS][INPUT_FILE]查看多媒体数据包:ffprobe-show_packetsoutput.mp4ffprobe-show_packets-show_dataoutput.mp4查看封装格式:ffprobe-show_formatoutput.mp4查看视频文件的帧信息:ffprobe-sh......
  • Windows环境使用ffmpeg转换文件格式
    先安装ffmpeg,官网下载地址https://ffmpeg.org/download.html直接保存即可 将命令保存为.bat 格式,放到ffmpeg.exe所在文件夹, 将所需转换的文件也放到该文件夹,双击bat文件运行即可1.flv 转mp4@echoofffor%%iin("*.flv")doffmpeg-i"%%i"-ccopy"%%i".mp4 ......
  • ffmpeg之avformat_alloc_output_context2
    函数原型:intavformat_alloc_output_context2(AVFormatContext**ctx,constAVOutputFormat*oformat,constchar*format_name,constchar*filename);功能:查找根据format_name或者filename或者oformat输出类型,并且初始化ctx结......
  • 基于huffman编解码的图像压缩算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述       Huffman编码是一种用于无损数据压缩的熵编码算法。由DavidA.Huffman在1952年提出。该算法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffm......
  • ffmpeg摄像头录制+屏幕录制问题
    确保权限系统该打开的权限都打开设备枚举查看设备列表在这个命令中,-devices选项用于列出可用的输入和输出设备。其中,D代表输入设备,E代表输出设备。D通常表示输入设备,如摄像头或麦克风,E通常表示输出设备,如显示器或扬声器。$ffmpeg-hide_banner-devicesDevices:D.=Dem......