精华内容
下载资源
问答
  • 2019-04-22 21:03:59

    FFmpeg中常用的工具主要是ffmpeg、ffprobe、ffplay,它们分别用作多媒体的编解码工具、内容分析工具和播放器。

    ffmpeg常用命令

    • ffmpeg的封装转换。ffmpeg的封装转换(转封装)功能包含在AVFormat模块中,通过libavformat库进行Mux和Demux操作.
         * 多媒体文件的格式有很多种,这些格式中的很多参数在Mux与Demux的操作参数中是公用的,可以通过ffmpeg–help full信息,找到AVFormatContext参数部分,该参数下的所有参数均为封装转换可使用的参数。
    • ffmpeg的转码参数。ffmpeg编解码部分的功能主要是通过模块AVCodec来完成的 ,通过libavcodec库进行Encode与Decode操作。
         * 多媒体编码格式的种类很多,但是还是有很多通用的基本操作参数设置。通过命令ffmpeg–help full可以看到AVCodecContext参数列表信息,该选项下面的所有参数均为编解码可以使用的参数。
    • ffmpeg的基本转码原理。ffmpeg工具的主要用途为编码、解码、转码以及媒体格式转换,ffmpeg常用于进行转码操作。可以设置转码的相关参数,如果转码操作涉及封装的改变,则可以通过设置AVCodec与AVFormat的操作参数进行封装与编码的改变。

    ffprobe常用命令

    • ffprobe多媒体信息查看工具(ffmpeg多媒体信息处理工具)。可以通过ffprobe–help来查看详细的帮助信息。例如查看每一个音频数据包信息或者视频数据包信息,查看节目信息,查看流信息,查看每一个流有多少帧以及每一个流有多少个音视频包,查看视频像素点的格式等。

    ffplay常用命令

    • 在FFmpeg中通常使用ffplay作为播放器,其实ffplay同样也可以作为很多音视频数据的图形化分析工具,通过ffplay可以看到视频图像的运动估计方向、音频数据的波形等。
    • ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎、format引擎,以及filter引擎的工具,并且还可以进行可视化的媒体参数分析。通过ffplay–help进行查看。
    • 如果希望使用ffpaly打开网络直播流,则可以使用这个命令:ffplay -window_title “播放测试” rtmp://up.v.test.com/live/stream
    • 如果使用ffplay播放视频时希望加载字幕文件,则可以通过加载ASS或者SRT字幕文件来解决。
    更多相关内容
  • FFmpeg入门到精通.pdf

    2019-06-19 14:32:11
    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领 先的音/视频编码库 libavcodec。 FFmpeg 是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系...
  • FFMPEG入门基础资料pdf

    2018-09-13 14:47:09
    (FFMPEG入门基础资料pdf)FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案
  • Nginx的下载  nginx的官网:http://nginx.org/  百度云盘地址https://pan.baidu.com/s/1kjQST_x1Sf_thg3XDmqx6w 密码:18sc将nginx上传至linux环境搭建安装C语言环境  因为nginx是C语言写的,而且是源码安装,...

    Nginx的下载

      nginx的官网:http://nginx.org/

    18ace7fe3e55290a69e441303249e8f6.png

      百度云盘地址

    https://pan.baidu.com/s/1kjQST_x1Sf_thg3XDmqx6w 密码:18sc

    将nginx上传至linux

    d6a18b601a6f557dd8d61701fee52ef1.png

    环境搭建

    安装C语言环境

      因为nginx是C语言写的,而且是源码安装,安装前需安装C语言环境。

    60ccb7879a73f65cf4a98640013a466a.png

    安装依赖库

      基本的Nginx功能依赖于一些基本的库,在安装Nginx之前需要提前安装这些库。

      pcre-devel:pcre,Perl Compatible Regular Expressions,Perl脚本语言兼容正则表达式,为Nginx提供正则表达式库。

      openssl-devel:为Nginx提供SSL(安全套接字层)密码库,包含主要的密码算法,常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其他目的使用。

      在安装之前需要注意,很多库具有devel库与非devel库两种。devel库表示development开发库,比非devel库会多出一些头文件、静态库、源码包等。而这些包在运行时不可能用到,但在开发时有可能用到。所以对于程序员来说,一般都是需要安装devel库的。不过在yum安装devel库时,由于其依赖于非devel库,所以其会先自动安装非devel库,而后再安装devel库。所以真正安装时,只需显示的安装devel库即可。

    6ec2d02d64a9cb7d7863158cdb8f8f95.png

    解压Nginx包

    1a82f08888d8680e76ae958d2a096c2f.png

    进入刚才解压后的目录

    d3f9b4d5673961710d69f159291906ca.png

    查看帮助(可忽略)

    0923612ab71c265f3843dd25752c6ad2.png

    安装模块

    faf65ef0a7ef29ad328536fc6b224ceb.png

      此时Nginx解压路径下会多出一个:Makefile

    00aecce675336d62fea690661be685d6.png

    系统配置信息

    • path prefix:Nginx安装目录
    • binary file:Nginx命令文件
    • modules path:Nginx模块存放路径
    • configuration - prefix:Nginx配置文件存放路径
    • configuration file:Nginx配置文件名
    • pid file:Nginx的进程id文件
    • error log file:错误日志文件
    • http access log file:http访问日志文件
    • http xxx:其他http请求相关的文件

      配置成功后,再次查看Nginx解压目录,发现其中多出一个文件Makefile。后面的编译就是依靠该文件进行的。

    编译安装

    f95de9b5f432f72278e4ad8451dc604a.png

      这是两个命令,make:为编译命令;make install:为安装命令,可以分别执行。这里使用&&将两个命令连接执行,会在前面命令执行成功的前提下才会执行第二个命令。

      编译安装完成后,会在/usr/local下出现nginx目录

    89f9f0a4b2eaacb3d9f694fa46e31a73.png

    进入安装目录

    e1563e1ef17fcf7b7093083b43aff51d.png

    设置任务目录可以使用sbin(可忽略)

    95c14980c9728471ae3e06eb387adadb.png

    注:软链接建立完成后就可以在任意路径下使用nginx命令

    展开全文
  • ffmpeg.rar

    2020-04-26 16:07:59
    正版ffmpeg下载,可以进行添加字幕、视频格式转换、视频合成、音视频分离等操作,十分便捷。用法:将rar解压后,在所在文件夹打开命令窗口,输入ffmpeg 即可。
  • FFMPEG完美入门资料.pdf

    2018-06-03 17:25:24
    ffmpeg 入门资料,学习FFmpeg不二之选,详细介绍了从入门到事件的细节
  • 封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的...
  • 背景 因为在2021年给自己定了目标和计划,学习ffmpeg,...本文也是属于博主的入门学习总结与分享,因此我们先从ffmpeg的软解码开始,解码绘制,一起体验下亲自动手的快乐。本文的语言环境基于C++,界面部分是 QT。

    背景

    因为在2021年给自己定了目标和计划,学习ffmpeg,所以这篇文章是实现计划的第一步。

    ffmpeg 众所周知,就不展开介绍了,下面给出 FFmpeg 4.2 windows x64 lib库和头文件的下载地址(粉丝免积分下载):

    https://download.csdn.net/download/u012534831/14045436

    本文也是属于博主的入门学习总结与分享,因此我们先从ffmpeg的软解码开始,从解码到绘制,一起体验下亲自动手的快乐。本文的语言环境基于C++,界面部分是 QT。

    流程分析

    在开始看代码之前,我们必须先了解下ffmpeg软解的常规流程:
    在这里插入图片描述

    在以前的教程中我们经常见到av_regeister_all,这是旧版ffmpeg的用法,必须在开始进行初始化,新版的ffmpeg4.0之后已经不需要了,详见github: av_register_all() has been deprecated in ffmpeg 4.0

    1、avformat_open_input

    为 AVFormatContext 分配空间,打开输入的视频数据并且探测视频的格式,这个函数里面包含了复杂的格式解析与探测算法,可解析的内容包括:视频流、音频流、视频流参数、音频流参数、视频帧索引等。用雷神的话说就是 可以算作FFmpeg的“灵魂”

    2、avformat_find_stream_info

    获取多媒体流的信息,包括码流、帧率、时长等信息。但是有些早期格式或者裸流数据它的索引并没有放到头当中,因此需要在后面进行探测。注意一个视频文件中可能会同时包括视频文件、音频文件、字幕文件等多个媒体流。

    3、av_find_best_stream

    当视频被解封装出来后,需要分开处理音频和视频,需要找到对应的音频流和视频流,获取音视频对应的stream_index。

    4、avcodec_find_decoder(enum AVCodecID id)

    “Find a registered decoder with a matching codec ID.”
    上一步找到的AVStream中的成员变量 codecpar->codec_id 就是这儿的参数 ID,codecpar类型为AVCodecParameters。网上的很多资料为 AVCodecContext->codec_id,这个用法在FFMPEG3.4及以上版本已经被弃用了,官方推荐使用codecpar。

    5、avcodec_alloc_context3

    创建AVCodecContext并分配空间。

    6、avcodec_parameters_to_context

    该函数用于将流里面的参数,也就是AVStream里面的参数直接复制到AVCodecContext的上下文当中,执行真正的内容拷贝。avcodec_parameters_to_context()是新的API,替换了旧版本的avcodec_copy_context()。

    7、avcodec_open2

    用给定的 AVCodec 去初始化 AVCodecContext。

    到这儿,解码器的初始化工作已经完成。下面就可以开始真正的解码操作了。

    8、av_read_frame

    读取码流中的音频若干帧或者视频一帧,av_read_frame()函数是新型ffmpeg的用法,对 av_read_packet 进行了封装,旧用法之所以被抛弃,就是因为以前获取的数据可能不是完整的,而av_read_frame()保证了视频数据一帧的完整性,使读出的数据总是完整的一帧。

    8、avcodec_send_packet

    发送数据到后台解码队列。

    It can be NULL (or an AVPacket with data set to NULL and
    size set to 0); in this case, it is considered a flush
    packet, which signals the end of the stream. Sending the
    first flush packet will return success. Subsequent ones are
    unnecessary and will return AVERROR_EOF. If the decoder
    still has frames buffered, it will return them after sending
    

    源码中关于发送一包空数据的解释:
    由于ffmpeg内部会缓存帧,在av_read_frame读不到数据的时候,需要通过packet.data = NULL;packet.size = 0;给ffmpeg发送一包空数据,即再avcodec_send_packet一次,将ffmpeg里面缓存的帧全部刷出来,解决最后几帧没有解码出来的问题。

    9、avcodec_receive_frame

    从解码器读取帧数据,这个函数执行完后,就已经能拿到我们的帧数据了,它被存储在 AVFrame 中。
    此处需要注意的是:
    一般而言,一次avcodec_send_packet()对应一次avcodec_receive_frame(),但是也会有一次对应多次的情况。这个得看具体的流,并常见于音频流,会存在一个AVPacket对应多个AVFrame的情况。因此可以看我上面的流程图有两个while循环。

    代码示例

    //头文件
    
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include<thread>
    extern "C"
    {
        #include "libavcodec/avcodec.h"
        #include "libavformat/avformat.h"
        #include "libavutil/pixfmt.h"
        #include "libswscale/swscale.h"
        #include "libavdevice/avdevice.h"
        #include <libavutil/pixdesc.h>
        #include <libavutil/hwcontext.h>
        #include <libavutil/opt.h>
        #include <libavutil/avassert.h>
        #include <libavutil/imgutils.h>
    }
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        void init();
        void play();
    private:
        std::thread m_decodecThread;
        Ui::MainWindow *ui;
        AVFormatContext *pAVFormatCtx;
        AVCodecContext *pAVCodecCtx;
        SwsContext *pSwsCtx;
        uint8_t *pRgbBuffer;
        AVPacket packet;
        AVFrame *pAVFrame = NULL;
        AVFrame *pAVFrameRGB;
        int iVideoIndex = -1;
        QImage m_image;
        bool isFinish  =false;
        void decodec();
        signals:
        void signalDraw();
    public slots:
        void slotDraw();
    protected:
        void paintEvent(QPaintEvent *event) override;
    };
    
    #endif // MAINWINDOW_H
    
    
    //CPP文件
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QDebug>
    #include <QPainter>
    #include<thread>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        connect(this,&MainWindow::signalDraw,this,&MainWindow::slotDraw);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    void MainWindow::init()
    {
      std::string file = "E:/Video/bb.mp4";
     //描述多媒体文件的构成及其基本信息
     if (avformat_open_input(&pAVFormatCtx, file.data(), NULL, NULL) != 0)
         {
             qDebug() <<"open file fail";
             avformat_free_context(pAVFormatCtx);
             return;
         }
    
     //读取一部分视音频数据并且获得一些相关的信息
     if (avformat_find_stream_info(pAVFormatCtx, NULL) < 0)
     {
         qDebug() <<"vformat find stream fail";
         avformat_close_input(&pAVFormatCtx);
         return;
     }
    // 根据解码器枚举类型找到解码器
        AVCodec *pAVCodec;
        int ret = av_find_best_stream(pAVFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, &pAVCodec, 0);
        if (ret < 0) {
            qDebug()<< "av_find_best_stream faliture";
            avformat_close_input(&pAVFormatCtx);
            return;
        }
        iVideoIndex = ret;
    
         pAVCodec = avcodec_find_decoder(pAVFormatCtx->streams[iVideoIndex]->codecpar->codec_id);
         if (pAVCodec == NULL)
         {
             qDebug()<<"not find decoder";
             return;
         }
    
     qDebug()<<"avcodec_open2 pAVCodec->name:" << QString::fromStdString(pAVCodec->name);
    
    
        if(pAVFormatCtx->streams[iVideoIndex]->avg_frame_rate.den != 0) {
            float fps_ = pAVFormatCtx->streams[iVideoIndex]->avg_frame_rate.num / pAVFormatCtx->streams[iVideoIndex]->avg_frame_rate.den;
               qDebug() <<"fps:" << fps_;
        }
          int64_t video_length_sec_ = pAVFormatCtx->duration/AV_TIME_BASE;
           qDebug() <<"video_length_sec_:" << video_length_sec_;
    pAVCodecCtx = avcodec_alloc_context3(pAVCodec);
         if (pAVCodecCtx == NULL)
         {
             qDebug() <<"get pAVCodecCtx fail";
             avformat_close_input(&pAVFormatCtx);
             return;
         }
    ret = avcodec_parameters_to_context(pAVCodecCtx,pAVFormatCtx->streams[iVideoIndex]->codecpar);
         if (ret < 0)
         {
             qDebug() <<"avcodec_parameters_to_context fail";
             avformat_close_input(&pAVFormatCtx);
             return;
         }
      if (avcodec_open2(pAVCodecCtx, pAVCodec, NULL) < 0)
         {
             qDebug()<<"avcodec_open2 fail";
             return;
         }
             //为解码帧分配内存
             //AVFrame 存放从AVPacket中解码出来的原始数据
                 pAVFrame = av_frame_alloc();
                 pAVFrameRGB = av_frame_alloc();
           //用于视频图像的转换,将源数据转换为RGB32的目标数据
             pSwsCtx = sws_getContext(pAVCodecCtx->width, pAVCodecCtx->height, pAVCodecCtx->pix_fmt,
                                                  pAVCodecCtx->width, pAVCodecCtx->height, AV_PIX_FMT_RGB32,
                                                  SWS_BICUBIC, NULL, NULL, NULL);
    
            int  m_size = av_image_get_buffer_size(AVPixelFormat(AV_PIX_FMT_RGB32), pAVCodecCtx->width, pAVCodecCtx->height, 1);
          pRgbBuffer = (uint8_t *)(av_malloc(m_size));
             //为已经分配的空间的结构体AVPicture挂上一段用于保存数据的空间
             avpicture_fill((AVPicture *)pAVFrameRGB, pRgbBuffer, AV_PIX_FMT_BGR32, pAVCodecCtx->width, pAVCodecCtx->height);
             //av_image_fill_arrays
             //AVpacket 用来存放解码数据
             av_new_packet(&packet, pAVCodecCtx->width * pAVCodecCtx->height);
    }
    
    
    void MainWindow::play()
    {
        m_decodecThread = std::thread([this]()
        {
            decodec();
        });
        m_decodecThread.detach();
    }
    
    void MainWindow::decodec()
    {
        //读取码流中视频帧
            while (true)
            {
                int ret = av_read_frame(pAVFormatCtx, &packet);
                if(ret != 0)
                {
                    qDebug()<<"file end";
                    isFinish = !isFinish;
                     return;
                }
                if (packet.stream_index != iVideoIndex)
                {
                    av_packet_unref(&packet);
                    continue;
                }
               int iGotPic = AVERROR(EAGAIN);
    //             //解码一帧视频数据
                iGotPic = avcodec_send_packet(pAVCodecCtx, &packet);
                if(iGotPic!=0){
                    qDebug()<<"avcodec_send_packet error";
                          continue;
                }
                iGotPic = avcodec_receive_frame(pAVCodecCtx, pAVFrame);
       if(iGotPic == 0){
                       //转换像素
                       sws_scale(pSwsCtx, (uint8_t const * const *)pAVFrame->data, pAVFrame->linesize, 0, pAVCodecCtx->height, pAVFrameRGB->data, pAVFrameRGB->linesize);
    
                       //构造QImage
                       QImage img(pRgbBuffer, pAVCodecCtx->width, pAVCodecCtx->height, QImage::Format_RGB32);
                       qDebug()<<"decode img";
                       m_image = img;
                       emit signalDraw();
      }else {
               qDebug()<<"decode error";
               }
    
                av_packet_unref(&packet);
                std::this_thread::sleep_for(std::chrono::milliseconds(25));
            }
      //资源回收
            av_free(pAVFrame);
            av_free(pAVFrameRGB);
            sws_freeContext(pSwsCtx);
            avcodec_close(pAVCodecCtx);
            avformat_close_input(&pAVFormatCtx);
    }
    
    void MainWindow::slotDraw()
    {
        update();
    }
    
    void MainWindow::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.setBrush(Qt::black);
        painter.drawRect(0, 0, this->width(), this->height());
    
        if (m_image.size().width() <= 0)
            return;
    
        //比例缩放
        QImage img = m_image.scaled(this->size(),Qt::KeepAspectRatio);
        int x = this->width() - img.width();
        int y = this->height() - img.height();
    
        x /= 2;
        y /= 2;
    
        //QPoint(x,y)为中心绘制图像
        painter.drawImage(QPoint(x,y),img);
    }
    
    

    如有兴趣,欢迎加入我的QQ群,QT/Android/音视频 问题在线解答,资源分享。
    在这里插入图片描述

    展开全文
  • FFmpeg从入门到精通(一)

    万次阅读 2019-05-14 18:10:51
    FFmpeg介绍 FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg基本组成 先看图,再看字。 FFmpeg的封装模块 AVFormat ...

    FFmpeg介绍

    FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件。作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。

    FFmpeg基本组成

    先看图,再看字。

    FFmpeg基本组成

    1. FFmpeg的封装模块 AVFormat
      AVFormat中实现了目前多媒体领域中大多数媒体封装格式,包括封装和解封装,如:MP4,FLV等文件封装格式、HTTP,RTMP,HLS等网络协议封装格式。FFmpeg是否支持某种格式,取决于编译时是否包含该封装库。如果需要配置,可以在FFmpeg项目根目录下的config.h中查看宏定义。 0为关闭,1为打开。
    2. FFmpeg的编解码模块 AVCodec
      AVCodec中实现了目前多媒体领域绝大多数常用的编解码格式,既支持编码,也支持解码。AVCodec除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用X265编码器;MP3(mp3lame)编码,需要使用libmp3lame编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在AVCodec中增加相应的编解码模块。
    3. FFmpeg的滤镜模块 AVFilter
      AVFilter库提供了一个通用的音频、视频、字幕等滤镜处理框架。在AVFilter中,滤镜框架可以有多个输入或多个输出。
    4. FFmpeg的多媒体设备交互 AVDevice
      使用这个库能够读取电脑(或者其它设备上)的多媒体设备的数据,或者输出数据到指定的多媒体设备上。
    5. FFmpeg的工具类 AVUtil
      AVUtil为FFmpeg的工具类,其重要组成部分有:AVLog日志输出、AVOption (AVClass)选项设置、AVDictionary键值对存储、ParseUtil字符串解析。
    6. FFmpeg的音频转换计算模块 swresample
      swresample模块提供了高级别的音频重采样API。例如它允许操作音频采样、音频通道布局转换与布局调整。
    7. FFmpeg的视频图像转换计算模块 swscale
      swscale模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从YUV420P转换成YUYV,或者YUV转RGB等图像格式转换。

    FFmpeg 编解码工具 ffmpeg

    ffmpeg是FFmpeg源代码编译后生成一个可执行程序,其可以作为命令行工具使用。
    ffmpeg命令简单应用:

    ./ffmpeg -i input.mp4 output.avi
    

    这是一条简单的ffmpeg命令,ffmpeg通过-i参数将input.mp4作为输入源输入,然后进行转码与转封装操作,输出到output.avi中,这条命令主要做了如下工作:
    1)获得输入源input.mp4
    2)转码
    3)输出文件output.avi
    看似简单的两步主要的工作,其实远远不止是从后缀名为MP4的文件输出成后缀名为AVI的文件,因为在ffmpeg中,MP4与AVI是两种文件封装格式,并不是后缀名就可以决定的,例如上面的命令行同样可以写成:

    ./ffmpeg -i input.mp4 -f avi output.dat 
    

    这条ffmpeg命令相当于前面的那条命令做了一些改变,加了一个“-f”进行约束,“-f"参数的工作非常重要,它制定了输出文件的容器格式,所以可以看到输出的文件为output.dat,文件后缀名为.dat,但是其主要工作依然与之前的指令相同。
    ffmpeg的主要工作流程相对比较简单,具体如下:
    1)解封装
    2)解码
    3)编码
    4)封装
    其中需要经过6个步骤,具体如下:
    1)读取输入源
    2)进行音视频的解封装
    3)解码每一帧音视频数据
    4)编码每一帧音视频数据
    5)进行音视频的重新封装
    6)输出到目标

    FFmpeg的播放器 ffplay

    FFmpeg不但可以提供转码、转封装等功能,同时还提供了播放器相关功能,使用FFmpeg的avformat与avcodec,可以播放各种媒体文件或者流。
    ffplay是FFmpeg源代码编译后生成的另一个可执行程序,与ffmpeg在FFmpeg项目中充当的角色基本相同,可以作为测试工具进行使用,ffplay提供了音视频显示和播放相关的图像信息、音频的波形信息等。

    FFmpeg的多媒体分析器 ffprobe

    ffprode也是FFmpeg源码编译后生成的一个可执行程序。ffprode是一个非常强大的多媒体分析工具,可以从媒体文件或者媒体流中获得你想要了解的媒体信息,比如音频的参数、视频的参数、媒体容器的参数信息等。
    例如它可以帮助分析某个媒体容器中的音频是什么编码格式、视频是什么编码格式,同时还可以得到媒体文件中媒体的总时长、复合码率等信息。使用ffprode可以分析媒体文件中每个包的长度、包的类型、帧的信息等。
    下面举一个简单的例子,以对ffprobe有一个基本的概念,输入以下命令:

    ./ffprobe -show_streams input.mp4
    

    根据输出内容,可以看到MP4文件内容中的流信息。流信息的相关内容是通过[STREAM][/STREAM]的方式展现出来的,在[STREAM][/STREAM]之间的信息即为该视频流信息。

    展开全文
  • 笔者才开始学习音视频开发,FFmpeg从入门到精通读书笔记系列主要是基于阅读刘歧、赵文杰编著的《FFmpeg从入门到精通》以及雷霄骅博士博客总结写的入门心得体会。 官方文档资料 FFmpeg官方文档:...
  • FFmpeg_入门到精通(标准版-完整) 教材.pdf,最新修正版,
  • FFMPEG完美入门资料

    2018-01-25 10:33:40
    FFMPEG完美入门资料 FFMPEG完美入门资料 FFMPEG完美入门资料 FFMPEG完美入门资料
  • FFMPEG入门

    2016-09-25 19:36:38
    1、 ...代码中可以看出,如果视频帧的宽和高分别为w和h,那么一帧YUV420P像素数据一共占用w*h*3/2 Byte的数据。其中 前 w*h Byte存储Y,接着的w*h/4 Byte存储U,最后w*h/4 Byte存储V。
  • ffmpeg基础库编程开发.pdf

    热门讨论 2016-12-22 09:24:44
    ffmpeg基础库编程开发》20140307.pdf
  • ffmpeg

    2014-04-03 22:34:27
    http://blog.csdn.net/leixiaohua1020/article/details/15811977
  • 表3-25 VideoTag数据格式 5.AudioTag数据格式解析 FLVTAG的Header中解析TagType为0x08之后,这个TAG为音频,其与视频TAG类似,音频TAG里面可以封装的压缩音频编码也可以有很多种,下面就来具体看一下。...
  • 什么是FFmpeg FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用 LGPL 或 GPL 许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码...
  • Qt可以与OpenCV,ffmpeg,OpenGL等开源库结合使用,最主要的特点在于其跨平台的特性,也可以很好的用于嵌入式开发,内部有很多种API,把数据库操作,网络编程,多线程,进程,三维GUI动画等相关的API函数,由此可见...
  • Windows下FFmpeg高速入门

    2014-10-20 13:28:00
    Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视频文件转换成FLV整理 java 视频处理 mencoder java 视频处理 ffmped+...
  • 首先从ffmpeg的一些常用的结构体了解起。 小插曲:如果视频不编码那他的体积计算公式:1小时3600秒,1秒25张图(一帧),一第图1920*1080个像素,RGB24格式一个像素占3个字节。 下面是音频的体积计算:4分钟*1分钟...
  • 当一个优秀的程序员是需要不断学习的,初级程序员高级程序员,初级架构师资深架构师,或者走向管理,技术经理技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中...
  • 资料介绍这份资料非常全面且详细,覆盖了 Vim 编辑器 基础到精通等不断阶段的使用技巧,对于初学者来说,实在太合适不过了!资料也按目录进行编排,每一章下面都有更具体的内容:最近我把这本手册的资料重新整理了...
  • PDF PDFMiner:一个用于 PDF 文档中抽取信息的工具。 PyPDF2:一个可以分割,合并和转换 PDF 页面的库。 ReportLab:快速创建富文本 PDF 文档。 Markdown Mistune:快速并且功能齐全的纯 Python 实现的 Markdown ...
  • 首先Android应用开发前景差是在最近两年出现的,也就是2018开始,那时起移动端的程序员已经慢慢出现供大于求的局面,本人作为移动端开发,深知这一点。 然而也必须说明一点,不论是Android开发还是iOS开发,虽然...
  • 跨平台的库,如FFmpeg, skip,weex, 加固,防逆向 签名校验 图片压缩 音视频解码 OpenGL ES 高级特效 热修复 andfix 人脸识别 face++ 加密算法 微信apk中的so文件 一面(1小时14分) 主要问java,以及虚拟机,问了...
  • FFmpeg常用基本命令

    2015-04-03 01:02:01
    ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流 2.视频解复用 ffmpeg –i test.mp4 –vcodec copy –an ...
  • 作业20200428.md

    2020-05-10 15:52:09
    《FFmpeg入门到精通》- AiBooKs.Cc.pdf,这是一本很好的ffmpeg入门书籍。推荐给大家,学习交流提高。
  • Android NDK 是一组允许您将 C 或 C++(“原生代码”)嵌入 Android 应用中的工具,NDK描述的是工具集。 能够在 Android 应用中使用原生代码对于想执行以下一项或多项操作的开发者特别有用: 在平台之间移植其...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

ffmpeg从入门到精通pdf