精华内容
下载资源
问答
  • 最近采用ffmpeg编写代码的时候,发现视频播放的宽高比例不是我想要的,所以我需要调整显示的宽高比。 一般采用ffplay播放视频的时候,会出现SAR和DAR 其中他们之间的概念是 DAR,Display_aspect_ratio,是指定该...

    最近采用ffmpeg编写代码的时候,发现视频播放的宽高比例不是我想要的,所以我需要调整显示的宽高比。

    一般采用ffplay播放视频的时候,会出现SAR和DAR

    其中他们之间的概念是

    DAR,Display_aspect_ratio,是指定该视频播放的时候,看到的视频比例。
    SAR,Sample Aspect Ratio,是指采集这个视频的比例,也就是存储像素点的比例。

    我发现在AVCodecContext中只有sample_aspect_ratio

    而在AVStream中有sample_aspect_ratio和display_aspect_ratio

    兴冲冲的都设置成16::9,结果是失败的,比例还是没变。

    一番折腾后,在源码中的函数avcodec_string中找到了DAR的来源

    (图里的enc在我这里是AVCodecContext,有的版本可能是AVCodecParameters,一样的)

    发现怎么放16:9都得不出正确的数值,那只能稍微看下av_reduce这个函数怎么算的了

    不要被吓到,其实很简单,把你的数值带入,然后设定你想要输出的比例,就可以计算出了

    简化出来就是

    x=N/D

    a2n=x*N

    a2d=x*D+1

    我这里352*288是我的分辨率,n:d是我应该设置enc->sample_aspect_ratio的值。a2n:a2d就是我最后想要的比例16:9。

    所以代入N=352*n,D=288*d。a2n=16,a2d=9。

    最后算出来n/d=1.45454545......,而这个正好是16/11的值。

    所以我要设置我的enc->sample_aspect_ratio里分别为16:11 即可,验证成功。

    虽然一开始如果注意到一开始的图片里的SAR的值是16:11,可能就不用走这弯路,哈哈,不过用时不久,也算彻底感悟这个DAR的来源。

    就这样啦,下班啦!

     

    展开全文
  • 播放器显示的视频宽高尺寸常常与视频帧数据的原始宽高尺寸不一致,可以使用ffmpeg对解码后的yuv数据进行缩放。

    一、编译

    关于ffmpeg lib库的编译,参考之前发布的文件“使用ffmpeg的lib库解码H264/H265”

    configure的编译选项需要开启swscale,所以不能添加--disable-swscale,编译安装成功后会生成libswscale.a

    播放器显示的视频宽高尺寸常常与视频帧数据的原始宽高尺寸不一致,可以使用ffmpeg对解码后的yuv数据进行缩放。


    二、使用到的api

    struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat,
                                      int dstW, int dstH, enum AVPixelFormat dstFormat,
                                      int flags, SwsFilter *srcFilter,
                                      SwsFilter *dstFilter, const double *param);
    int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
                  const int srcStride[], int srcSliceY, int srcSliceH,
                  uint8_t *const dst[], const int dstStride[]);
    void sws_freeContext(struct SwsContext *swsContext); 
    

    三、demo程序

    //src_pic 是解码后的yuv图像数据, dst_pic是缩放后得到的yuv图像数据, nDstW、nDstH 是指定宽高像素大小
    int imgScaleChange(AVCodecContext *pCodecCtx,AVFrame *src_pic,AVFrame *dst_pic,int nDstW ,int nDstH )
    {
     if((dst_pic==NULL)||(pad_pic==NULL))
      return 0;
    
     int nSrcW = src_pic->width;
     int nSrcH = src_pic->height;
    
     struct SwsContext* m_pSwsContext;
    
     dst_pic->linesize[0] = nDstW;
     dst_pic->linesize[1] = nDstW / 2;
     dst_pic->linesize[2] = nDstW / 2;
     dst_pic->format=src_pic->format; //AV_PIX_FMT_YUV420P; // src_pic->format;
    
     if((dst_pic->width!=nDstW)||(dst_pic->height!=nDstH)){
      dst_pic->width=nDstW;
      dst_pic->height=nDstH;
      if((dst_pic->data!=NULL)&&(dst_pic->data[0]!=NULL))
       avpicture_free((AVPicture *)dst_pic);
      
      if(avpicture_alloc((AVPicture *)dst_pic, dst_pic->format,dst_pic->width*2, dst_pic->height*2)<0){
       printf("dst_picture allocate failed\n");
       return 0;
      }
     }
    
     m_pSwsContext = sws_getContext(nSrcW, nSrcH, src_pic->format,nDstW, nDstH, dst_pic->format,SWS_FAST_BILINEAR,NULL, NULL, NULL);
     if (NULL == m_pSwsContext){
      printf("sws_getContext error!\n");
      return 0;
     }
     sws_scale(m_pSwsContext, src_pic->data,src_pic->linesize, 0, pCodecCtx->height,dst_pic->data,dst_pic->linesize);
     sws_freeContext(m_pSwsContext);
    
     return 1 ;
    }
    






    展开全文
  • 将输入为640480的修改为320240 ffmpeg -i input -vf scale=iw/2:-1 output 如: ffmpeg -i .\b.mp4 -vf scale=iw/2...iw:输入帧,此处为640,640/2=320。 -1告诉scale filter保持纵横比,所以scale filter计算出值240.

    将输入为640480的修改为320240

    ffmpeg -i input -vf scale=iw/2:-1 output
    如:

    ffmpeg -i .\b.mp4 -vf scale=iw/2:-1 c.mp4
    

    iw:输入帧宽,此处为640,640/2=320。

    -1告诉scale filter保持纵横比,所以scale filter计算出值240.

    展开全文
  • 命令如下: ffmpeg -y -i Titanic.mkv -s 640*480 out.h264 运行效果: 一般的 使用 ffmpeg -y -i 原材料视频 -s * 输出的目的视频源

    转载注明 http://blog.csdn.net/u011046042/article/details/62437421
    命令如下:
    ffmpeg -y -i Titanic.mkv -s 640*480 out.h264
    运行效果:
    这里写图片描述

    一般的 使用
    ffmpeg -y -i 原材料视频 -s 宽*高 输出的目的视频源
    转载注明 http://blog.csdn.net/u011046042/article/details/62437421

    展开全文
  • FFMPEG

    2019-04-13 11:16:38
    FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。 本文将简要介绍一下 FFMPEG 库的基本目录结构...
  • 最近实习的时候突然leader让写一个可以提取视频的时长,宽高信息和某一帧的小工具,就开始了解音视频的流媒体编程。主要用到的是 FFmpeg,看了好多好多的文章,尤其是雷霄骅的文章,真的是个好厉害的人啊。 这篇文章...
  • ffmpeg命令高级进阶

    2019-07-01 18:12:55
    FFMPEG拥有强大的视频处理能力,可惜的是有很多人不知道如何使用。本文深入介绍如何用编译好ffmpeg.exe程序处理视频,既有常用的简单的处理,也有一些比较少见的高大上的处理,一定能让你受益匪浅。ffmpeg是一把宝刀...
  • ffmpeg

    2020-04-20 19:40:44
    ffmpeg主要组成部分 1、libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含demuxers和muxer库; 2、libavcodec:用于各种类型声音/图像编解码...
  • 但是我自己用ffmpeg生成的三分屏效果是这样的![图片说明](https://img-ask.csdn.net/upload/201709/19/1505808578_401389.png) 想问一下实现多路视频拼接,视频大小跟位置该如何调整,我自己试了一下只能调整最后一个...
  • 播放器的实际宽高比例常常与视频帧数据的原始宽高比例不一致。 如果选择保持原始比例,则上下或左右会出现黑边,优点是视频中的物体保持原始比例、比较真实,但缺点是黑边会影响界面美观。 如果选择拉伸铺满,优点是...
  • ffmpeg -ss 00:00:04 -i <input video>-vf "select=between(n\,0\,1040210)*not(mod(n\,375))" -vsync 0 %05d.jpg 使用 -ss 和 -t 选项,从第4秒开始 主体是一个select 的过滤语句: 其中:between(n,*) ...
  • FFmpeg

    2018-11-20 11:21:00
    FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来音视频采集、音视频格式转换,编码解码,视频截图,加水印等的开源计算机程序。可以轻易地实现多种视频格式之间的相互...
  • ffmpeg中求h264视频高和帧率的代码

    热门讨论 2014-11-24 17:41:44
    ffmpeg中求h264视频高和帧率的代码,支持三种规格,尤其是正在为high规格发愁的可以下载看看,我认为我的劳动成果绝对不止一分。程序运行需要你有一个h264文件。
  • 修改并保持高为原来大小的命令: ffmpeg -y -i 1.mp4 -vf scale=700:ih out.mp4 添加水印 ffmpeg -y -i 1.mp4 -vf 'movie=1.png,scale= 50:50[watermask]; [in] [watermask] overlay=main_w-overlay_w-50 : main_h...
  • ffmpeg版本为3.4版本,因为ffmpeg一只在保持更新,有很多老版本中的API和新的版本不一样所以在此说明一下。环境是linux系统下。将yuv文件中指定时间点的图片帧提取出来并保存为jpg图片文件。#include #include #...
  • ffmpeg命令

    2016-11-24 07:45:02
    原文地址 ffmpeg -i output.mp4 -r 1 -f image2 image-%3d.jpg ... 播放yuv视频,注意yuv视频播放需要指定视频的宽高,并且这个宽高与录制的时候要相符,否则不能正常播放 YUV序列转AVI ffmpeg –s w*h –
  • FFMPEG拥有强大的视频处理能力,可惜的是有很多人不知道如何使用。本文深入介绍如何用编译好ffmpeg.exe程序处理视频,既有常用的简单的处理,也有一些比较少见的高大上的处理,一定能让你受益匪浅。ffmpeg是一把宝刀...
  • FFmpeg filter

    千次阅读 2018-06-10 17:08:44
    一、FFmpeg filter简介FFmpeg中的libavfilter提供了一整套的基于filter的机制。filter本身是一个插件的形式,可以快速的组装需要的效果。比如下面的filter,可以实现视频的水平镜像效果。ffplay.exe sample.rmvb -vf...
  • ffmpeg使用

    2019-07-07 10:49:00
    参考ffmpeg常用命令ffmpeg参数中文详细解释[总结]FFMPEG视音频编解码零基础学习方法 一、安装 打开https://ffmpeg.zeranoe.com/builds/,该网站中的FFMPEG分为3个版本:Static,Shared,Dev。 前两个版本可以直接...
  • FFmpeg文档

    2019-11-09 23:57:41
    FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。 本文将简要介绍一下 FFMPEG 库的基本目录结构...
  • <p>but neither of them works for me (ffmpeg even not works with this code, maybe i've made mistake when adding theirs code parts in my ffmpeg string) <p>Help me to improve my code pls <p>Thanks ...
  • FFmpeg常用命令

    2019-01-29 11:32:20
    ffmpeg -i juping.mp4 -r 10 -b:a 32k juping-small.mp4   为视频添加文字水印: 描述 从文本文件或字符串在视频中添加文本,并使用各种参数进行修改。 文本从文本文件参数指定的文件中加载,或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,218
精华内容 1,287
关键字:

ffmpeg指定宽高