深度探索:使用FFmpeg实现视频Logo的添加与移除(一)

简介: 深度探索:使用FFmpeg实现视频Logo的添加与移除

前言

在这先简单介绍下命令行用法,如需要详细了解可往下看具有内容

  • 增加log
#为视频添加logo
./ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
#右上角: 
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w output.mp4 
#左下角: 
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4 
#右下角: 
./ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
  • 去除log

语法:

-vf delogo=x:y:w:h[:t[:show]]
#x:y 离左上角的坐标 
#w:h logo的宽和高 
#t: 矩形边缘的厚度默认值4 
#show:若设置为1有一个绿色的矩形,默认值0。
./ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

一、FFmpeg简介(Introduction to FFmpeg)

1.1 FFmpeg的定义(Definition of FFmpeg)

FFmpeg(Fast Forward Moving Pictures Expert Group)是一个开源的音视频处理工具,它包含了一套可以用来录制、转换数字音频、视频,并能将其转化为流的库和程序。它提供了录制、转换以及流化音视频的完整解决方案。FFmpeg包含了众多主流的音视频编解码库,几乎可以处理所有的音视频文件格式。**

FFmpeg是由Fabrice Bellard发起的开源计算机程序,用于处理多媒体数据。它包含了许多库,如libavcodec——这是一个用于编解码的库,libavformat——这是一个用于封装和解封装的库,以及ffmpeg——这是一个用于转换和流处理的命令行程序。**

FFmpeg的主要优势在于其强大的处理能力和丰富的功能。它可以处理各种格式的音频和视频,包括常见的MP3、AVI、MKV、MP4等,也包括一些较为罕见的格式。此外,FFmpeg还支持各种音视频编解码器,包括H.264、AAC等。这使得FFmpeg成为了音视频处理的“瑞士军刀”。**

总的来说,FFmpeg是一个强大的、全面的音视频处理工具,无论是对于开发者还是对于普通用户,都是一个非常有用的工具。**


1.2 FFmpeg的功能(Functions of FFmpeg)

FFmpeg作为一个全能的音视频处理库,其功能十分丰富,主要包括以下几个方面:**


1. 音视频编解码(Audio and Video Codec):FFmpeg拥有强大的编解码能力,支持大量的音视频编解码器,包括但不限于MPEG、H.264、AAC等。这使得FFmpeg能够处理几乎所有格式的音视频文件。**

2. 格式转换(Format Conversion):FFmpeg可以进行音视频的格式转换,例如将AVI格式的视频转换为MP4格式,或者将WAV格式的音频转换为MP3格式。**

3. 音视频合成与分离(Audio and Video Synthesis and Separation):FFmpeg可以将音频和视频进行合成,也可以将音视频文件进行分离,得到单独的音频或视频文件。**

4. 音视频剪辑(Audio and Video Editing):FFmpeg可以进行音视频的剪辑操作,包括剪切、拼接、添加水印等。**

5. 音视频滤镜(Audio and Video Filters):FFmpeg提供了丰富的滤镜,可以进行画面的旋转、缩放、裁剪、颜色调整等操作。**

6. 音视频采集与推流(Audio and Video Capture and Streaming):FFmpeg可以进行音视频的采集和推流,支持各种协议,如RTMP、HLS等。**


总的来说,FFmpeg是一个功能全面的音视频处理库,无论是基本的编解码、格式转换,还是复杂的音视频编辑、滤镜处理,甚至是音视频采集与推流,FFmpeg都能够胜任。**

1.3 FFmpeg的安装(Installation of FFmpeg)

FFmpeg的安装过程因操作系统的不同而有所差异。以下是在几种常见操作系统中安装FFmpeg的方法:**


1. 在Windows系统中安装FFmpeg(Installing FFmpeg on Windows):**

首先,访问FFmpeg官方网站(https://ffmpeg.org/)**

2. 在Linux系统中安装FFmpeg(Installing FFmpeg on Linux):**

在大多数基于Debian的Linux发行版中,可以使用apt-get命令来安装FFmpeg,命令如下:**

sudo apt-get install ffmpeg**

在基于Red Hat的Linux发行版中,可以使用yum命令来安装FFmpeg,命令如下:**

sudo yum install ffmpeg**

3. 在macOS系统中安装FFmpeg(Installing FFmpeg on macOS):**

在macOS系统中,推荐使用Homebrew来安装FFmpeg,命令如下:**

brew install ffmpeg**


以上就是在不同操作系统中安装FFmpeg的方法,安装完成后,可以在命令行中输入ffmpeg -version来查看FFmpeg的版本信息,以确认FFmpeg是否安装成功。**

二、视频Logo的基本概念(Basic Concepts of Video Logo)

2.1 什么是视频Logo(What is Video Logo)

视频Logo(Video Logo),顾名思义,是在视频中出现的标志或者符号。这个标志通常代表了视频的制作单位、版权所有者或者某种特定的标识。在电视节目、网络视频、电影等多种媒体中,我们都能看到视频Logo的身影。**

视频Logo的形式多样,可以是文字、图形,也可以是文字和图形的组合。它的位置通常在视频的角落,比如左上角、右上角、左下角或者右下角,以不干扰视频的主要内容。但也有一些特殊的Logo,比如水印,它们可能覆盖在视频的整个画面上,以达到特定的效果。**

在视频制作中,添加Logo是一种常见的操作。通过添加Logo,观众可以快速识别出视频的来源,同时也能增加视频的专业感。对于商业视频,Logo还可以起到宣传和推广的作用。**

然而,有时候我们也需要移除视频中的Logo。比如,当我们需要对视频进行二次创作,或者Logo的存在影响了视频的观看体验时,就需要进行Logo的移除操作。**

无论是添加还是移除Logo,都需要对视频处理有一定的了解,并掌握相应的技术和工具。在接下来的内容中,我们将详细介绍如何使用FFmpeg这个强大的工具,来进行视频Logo的添加和移除操作。**

2.2 视频Logo的作用(Functions of Video Logo)

视频Logo在视频制作和播放中起着重要的作用,其主要功能可以归纳为以下几点:**

1. 品牌识别(Brand Recognition):视频Logo通常包含了企业或者个人的品牌元素,如公司的标志、名称等。当观众在观看视频时,可以通过Logo快速识别出视频的来源,增强了品牌的曝光度和认知度。**

2. 版权声明(Copyright Statement):视频Logo也是一种版权声明的方式。通过在视频中添加Logo,可以明确标识出视频的版权所有者,防止视频被非法使用或者盗版。**

3. 增加专业感(Enhance Professionalism):一个精心设计的视频Logo不仅可以美化视频,还可以增加视频的专业感,使视频看起来更具有质感和吸引力。**

4. 宣传推广(Promotion):对于商业视频,Logo还可以起到宣传和推广的作用。观众在观看视频的同时,也能接收到企业的品牌信息,从而达到宣传推广的效果。**

5. 防篡改(Anti-Tampering):视频Logo的存在,也在一定程度上防止了视频内容的篡改。因为任何对视频的修改,都可能影响到Logo的显示,从而被观众察觉。**

总的来说,视频Logo是视频内容的重要组成部分,它在提升视频品质、保护版权、宣传品牌等方面都起着重要的作用。因此,如何正确地添加和移除视频Logo,是每一个视频制作者需要掌握的基本技能。**

2.3 视频Logo的设计要点(Key Points in Designing Video Logo)

设计一个好的视频Logo,不仅需要考虑到Logo的美观性,还需要考虑到其在视频中的表现效果。以下是一些设计视频Logo时需要注意的要点:**

1. 简洁明了(Simplicity):好的Logo设计应该简洁明了,避免过于复杂的设计。因为在视频播放过程中,观众的注意力主要在视频内容上,Logo应该尽可能地简单,以便快速识别。**

2. 易于识别(Recognizability):Logo的设计应该具有较高的识别度,即使在视频画面变化快速或者画面较小的情况下,观众也能快速识别出Logo。**

3. 适应性强(Adaptability):视频Logo需要在不同的背景和环境下都能保持良好的视觉效果。因此,Logo的颜色、形状和大小都需要考虑到其在不同场景下的适应性。**

4. 代表性强(Representativeness):Logo应该能够代表视频的主题或者品牌,通过Logo,观众能够联想到视频的内容或者来源。**

5. 不干扰主体(Non-Interference):在设计视频Logo时,需要考虑到Logo的位置和大小,避免Logo过大或者位置不当,影响到视频的主体内容。**

总的来说,设计一个好的视频Logo,需要综合考虑到Logo的美观性、识别度、适应性、代表性以及对视频主体的影响。只有这样,才能设计出既能吸引观众,又能有效传达信息的视频Logo。**

三、使用命令行方式处理视频Logo(Handling Video Logo with Command Line)

3.1 添加视频Logo(Adding Video Logo)

在我们的日常生活中,我们经常会看到一些视频在角落里有一个标志,这就是我们所说的视频Logo。那么,如何使用FFmpeg命令行工具来给我们的视频添加Logo呢?下面我们就来详细介绍一下。**

首先,我们需要准备一张我们想要添加的Logo图片,这张图片可以是任何格式,但是通常我们会使用透明背景的PNG图片,以便更好地融入到视频中。然后,我们需要确定我们想要添加Logo的位置,通常我们会选择视频的右上角或者右下角。**

有了这些准备工作,我们就可以开始使用FFmpeg的命令行工具来添加Logo了。FFmpeg的命令行工具非常强大,它提供了大量的参数供我们选择,以满足我们的各种需求。在这里,我们主要使用到的是overlay滤镜,这个滤镜可以将一张图片覆盖到视频上。**

下面是一个基本的命令行示例:**

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4

在这个命令中,-i参数用来指定输入文件,我们需要指定两个输入文件,一个是我们的视频文件input.mp4,另一个是我们的Logo图片logo.png。-filter_complex参数用来指定我们要使用的滤镜,我们使用的是overlay滤镜,后面的"W-w-10:H-h-10"是指定Logo的位置,W和H分别代表视频的宽度和高度,w和h分别代表Logo的宽度和高度,-10是指我们希望Logo距离视频的右边和下边各10个像素。最后,output.mp4是我们的输出文件。**

通过这个命令,我们就可以轻松地给我们的视频添加Logo了。但是,这只是最基本的使用方法,FFmpeg的命令行工具还提供了更多的参数供我们选择,例如,我们可以调整Logo的透明度,可以让Logo在视频的某个时间点出现或消失,等等。这些都需要我们去深入学习和探索。

接下来,我们来看一个稍微复杂一点的例子,这个例子中,我们将调整Logo的透明度,并让Logo在视频的第5秒时出现,在第10秒时消失。下面是命令行示例:**

ffmpeg -i input.mp4 -i logo.png -filter_complex "[0:v][1:v] overlay=W-w-10:H-h-10:enable='between(t,5,10)':alpha=0.7" output.mp4

在这个命令中,我们添加了两个新的参数。enable='between(t,5,10)'是指定Logo的出现时间,t代表视频的时间,5和10分别代表第5秒和第10秒。alpha=0.7是指定Logo的透明度,0.7代表70%的透明度。**

通过这个命令,我们就可以实现更复杂的Logo添加效果了。但是,这还只是冰山一角,FFmpeg的命令行工具的功能远不止这些。如果你想要深入学习和掌握FFmpeg,我建议你去阅读FFmpeg的官方文档,那里有更详细和全面的介绍。**

总的来说,使用FFmpeg的命令行工具添加视频Logo是一件非常简单而又有趣的事情。只要你掌握了基本的命令和参数,你就可以轻松地给你的视频添加各种各样的Logo了。希望你在阅读这篇文章后,能够有所收获,也希望你在使用FFmpeg的过程中,能够发现更多的乐趣。**

3.2 移除视频Logo(Removing Video Logo)

在某些情况下,我们可能需要从视频中移除已经添加的Logo,这可能是因为Logo的设计已经过时,或者我们想要替换一个新的Logo。不管是什么原因,使用FFmpeg的命令行工具,我们都可以轻松地实现这个目标。下面,我们就来详细介绍一下如何使用FFmpeg的命令行工具来移除视频Logo。**

首先,我们需要明确一点,那就是移除视频Logo并不是一件简单的事情。因为一旦Logo被添加到视频中,它就成为了视频的一部分,我们不能简单地通过一条命令就将其移除。但是,我们可以使用一种技术,那就是视频修复(Video Inpainting),来尽可能地恢复被Logo覆盖的视频内容。**

FFmpeg的命令行工具提供了一个叫做delogo的滤镜,这个滤镜可以帮助我们实现视频修复的功能。下面是一个基本的命令行示例:**

ffmpeg -i input.mp4 -vf "delogo=x=10:y=10:w=100:h=100" output.mp4

在这个命令中,-vf参数用来指定我们要使用的滤镜,我们使用的是delogo滤镜。后面的"x=10:y=10:w=100:h=100"是指定Logo的位置和大小,x和y分别代表Logo的左上角的坐标,w和h分别代表Logo的宽度和高度。最后,output.mp4是我们的输出文件。**

通过这个命令,我们就可以尝试移除视频中的Logo了。但是,需要注意的是,这个命令并不能完全移除Logo,它只能尽可能地恢复被Logo覆盖的视频内容。因此,如果Logo覆盖的区域中包含了重要的视频内容,那么这个命令可能无法达到你的预期效果。**

总的来说,使用FFmpeg的命令行工具移除视频Logo是一件比较复杂的事情,它需要我们有一定的视频处理知识和技巧。但是,只要我们掌握了基本的命令和参数,我们还是可以尝试去做这件事情的。希望你在阅读这篇文章

后,能够有所收获,也希望你在使用FFmpeg的过程中,能够发现更多的乐趣。**

在实际操作中,我们可能会遇到各种各样的问题,例如,Logo的位置和大小可能并不是固定的,或者视频的质量可能并不是很好,这些都会影响到我们移除Logo的效果。因此,我们需要不断地尝试和学习,才能够更好地掌握这个技术。**

此外,我还想提醒你,虽然我们可以使用这种技术来移除视频中的Logo,但是我们必须尊重他人的版权,我们不能随意地移除他人视频中的Logo,这可能会涉及到版权问题。所以,在使用这个技术的时候,我们必须遵守相关的法律和规定。**

最后,我希望你能够在阅读这篇文章后,能够有所收获,也希望你在使用FFmpeg的过程中,能够发现更多的乐趣。如果你有任何问题或者建议,欢迎你随时向我提出,我会尽我所能来帮助你。**

3.3 命令行参数解析(Command Line Parameters Analysis)

在使用FFmpeg处理视频Logo时,我们需要通过命令行参数来指定具体的操作。这些参数包括输入文件、输出文件、滤镜选项等。下面我们将详细解析这些参数的含义和使用方法。**

1. -i:这是一个非常基础的参数,用于指定输入文件的路径。例如,-i input.mp4表示输入文件是input.mp4。**

2. -vf:这个参数用于指定视频滤镜。在添加或移除Logo时,我们通常会使用到overlay(叠加)滤镜。例如,-vf "movie=logo.png [logo]; [in][logo] overlay=W-w-10:H-h-10 [out]"表示将logo.png叠加到输入视频的右下角。**

3. -y:这个参数表示如果输出文件已存在,那么就覆盖它。这在批处理视频时非常有用。**

4. 输出文件:在命令行的最后,我们需要指定输出文件的路径。例如,output.mp4表示输出文件是output.mp4。**

所以,一个完整的FFmpeg命令行可能是这样的:ffmpeg -i input.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=W-w-10:H-h-10 [out]" -y output.mp4。这条命令表示将logo.png叠加到input.mp4的右下角,然后输出到output.mp4。**

需要注意的是,FFmpeg的命令行参数非常丰富,我们只是介绍了其中最常用的一部分。在实际使用中,你可能还需要根据具体需求来调整参数。例如,你可能需要调整Logo的位置、大小,或者调整输出视频的质量等。这就需要你去查阅FFmpeg的官方文档,或者通过网络搜索来获取更多的信息。**

四、使用编程方式处理视频Logo(Handling Video Logo with Programming)

4.1 FFmpeg的编程接口(Programming Interface of FFmpeg)

FFmpeg是一个强大的多媒体处理库,它不仅提供了命令行工具,还提供了丰富的编程接口,让开发者可以更灵活地处理多媒体数据。在本节中,我们将深入探讨FFmpeg的编程接口,以及如何使用这些接口来处理视频Logo。**

FFmpeg的编程接口主要包括以下几个库(Libraries):**

  • libavutil(AV Utility Library):这是FFmpeg的基础库,提供了一些通用的函数和数据结构,如日志、错误处理、内存管理等。
  • libavcodec(AV Codec Library):这是FFmpeg的编解码库,提供了大量的音视频编解码器。通过这个库,我们可以对音视频数据进行编码和解码。
  • libavformat(AV Format Library):这是FFmpeg的封装格式处理库,提供了读取和写入多种音视频封装格式的功能。
  • libavfilter(AV Filter Library):这是FFmpeg的滤镜库,提供了处理音视频数据的各种滤镜,如裁剪、缩放、添加水印等。
  • libswscale(Software Scaling Library):这是FFmpeg的图像缩放库,提供了图像缩放和颜色空间转换的功能。
  • libswresample(Software Resampling Library):这是FFmpeg的音频重采样库,提供了音频重采样、格式转换和混音的功能。

在处理视频Logo时,我们主要会用到libavcodec、libavformat和libavfilter这三个库。下面,我们将详细介绍这三个库的使用方法。**

首先,我们需要包含这三个库的头文件:

extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/avfilter.h>
}

然后,我们需要初始化这三个库:

av_register_all();
avcodec_register_all();
avfilter_register_all();

接下来,我们可以使用这些库的功能了。例如,我们可以使用libavformat库打开一个视频文件:

AVFormatContext* pFormatCtx = avformat_alloc_context();
if (avformat_open_input(&pFormatCtx, "input.mp4", NULL, NULL) != 0)
{
    printf("Couldn't open input stream.\n");
    return -1;
}

然后,我们可以使用libavcodec库找到视频流,并打开对应的解码器:

int videoStream = -1;
for (int i = 0; i < pFormatCtx->nb_streams; i++)
{
    if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
    {
        videoStream = i;
        break;
    }
}
if (videoStream == -1)
{
    printf("Didn't find a video stream.\n");
    return -1;
}
AVCodecContext* pCodecCtx = pFormatCtx->streams[videoStream]->codec;
AVCodec* pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (pCodec == NULL)
{
    printf("Codec not found.\n");
    return -1;
}
if (avcodec_open2(pCodecCtx, pCodec, NULL) < 0)
{
    printf("Could not open codec.\n");
    return -1;
}

最后,我们可以使用libavfilter库添加一个Logo滤镜:

AVFilterGraph* filter_graph = avfilter_graph_alloc();
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilter *buffersrc  = avfilter_get_by_name("buffer");
AVFilter *buffersink = avfilter_get_by_name("buffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs  = avfilter_inout_alloc();
enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE };
char args[512];
snprintf(args, sizeof(args),
         "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
         pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt,
         pCodecCtx->time_base.num, pCodecCtx->time_base.den,
         pCodecCtx->sample_aspect_ratio.num, pCodecCtx->sample_aspect_ratio.den);
avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in", args, NULL, filter_graph);
avfilter_graph_create_filter(&buffersink_ctx, buffersink, "out", NULL, NULL, filter_graph);
av_opt_set_int_list(buffersink_ctx, "pix_fmts", pix_fmts, AV_PIX_FMT_NONE, AV_OPT_SEARCH_CHILDREN);
outputs->name       = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx    = 0;
outputs->next       = NULL;
inputs
>**<font face="楷体" size =3>接下来,我们需要设置输入滤镜的参数。在这个例子中,我们将使用overlay滤镜来添加Logo。我们需要指定Logo的位置和大小,这些参数可以通过滤镜的options参数来设置。例如,我们可以将Logo放在视频的右上角,并且大小为100x100像素:</font>**
```cpp
inputs->name       = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx    = 0;
inputs->next       = NULL;
char filter_descr[100];
sprintf(filter_descr, "overlay=W-w-10:10,scale=100:100");
int ret;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filter_descr, &inputs, &outputs, NULL)) < 0)
{
    printf("Failed to parse filter graph: %s\n", av_err2str(ret));
    return -1;
}
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
{
    printf("Failed to configure filter graph: %s\n", av_err2str(ret));
    return -1;
}

现在,我们已经设置好了滤镜,接下来就可以开始处理视频帧了。我们需要读取视频帧,然后将其送入滤镜进行处理,最后将处理后的帧写入输出文件。这个过程可以通过一个循环来实现:**

AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
int got_frame;
while (1)
{
    if ((ret = av_read_frame(pFormatCtx, &packet)) < 0)
        break;
    if (packet.stream_index == videoStream)
    {
        ret = avcodec_decode_video2(pCodecCtx, frame, &got_frame, &packet);
        if (ret < 0)
        {
            printf("Error decoding video\n");
            break;
        }
        if (got_frame)
        {
            frame->pts = av_frame_get_best_effort_timestamp(frame);
            /* push the decoded frame into the filtergraph */
            if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0)
            {
                printf("Error while feeding the filtergraph\n");
                break;
            }
            /* pull filtered frames from the filtergraph */
            while (1)
            {
                ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
                if (ret < 0)
                    break;
                // Here we can write the filtered frame to the output file.
                av_frame_unref(filt_frame);
            }
        }
    }
    av_packet_unref(&packet);
}

以上就是使用FFmpeg的编程接口处理视频Logo的基本步骤。需要注意的是,这只是一个简单的例子,实际的应用可能会更复杂。例如,我们可能需要处理多个视频流,或者使用更复杂的滤镜。但是,基本的思路是一样的:我们需要打开输入文件,找到视频流,设置滤镜,然后处理视频帧。**


深度探索:使用FFmpeg实现视频Logo的添加与移除(二)https://developer.aliyun.com/article/1464968

目录
相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
168 4
|
2月前
|
存储 编解码 算法
深度探索:使用FFmpeg实现视频Logo的添加与移除(二)
深度探索:使用FFmpeg实现视频Logo的添加与移除
45 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
41 0
|
2月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
42 0
|
2月前
|
存储 编解码 调度
剖析ffmpeg视频解码播放:时间戳的处理
剖析ffmpeg视频解码播放:时间戳的处理
54 0
|
2月前
|
编解码 算法 vr&ar
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(二)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
33 1
|
2月前
|
存储 编解码 算法
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换(一)
深度剖析FFmpeg视频解码后的帧处理到Qt显示 从AVFrame到QImage的转换
66 1
|
2月前
|
设计模式 存储 缓存
【ffmpeg C++ 播放器优化实战】优化你的视频播放器:使用策略模式和单例模式进行视频优化
【ffmpeg C++ 播放器优化实战】优化你的视频播放器:使用策略模式和单例模式进行视频优化
58 0
|
2月前
|
存储 缓存 编解码
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(一)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
46 0
|
2月前
|
机器学习/深度学习 编解码 算法
深度探索:使用FFmpeg实现视频Logo的添加与移除(三)
深度探索:使用FFmpeg实现视频Logo的添加与移除
22 0