【转】ffmpeg tutorial 4:创建线程 第二部分

FFMPEG 命令行常用方法示例 引言 FFMPEG以其强大的功能而在音视频领域著称,更重要的是它还是开源的!音视频格式转换、裁剪、拼接、提取字幕或某音轨等等,它都能胜任,可谓一把瑞士军刀,小巧但功能强大,是音视频研究的必备利器之一。 示例 1. 转换成H264编解码 ffmpeg -i input_file -vcodec h264 output_file 其中 -i 表示输入文件, -vcodec  h2 阅读详情
 

我们几乎做完了;我们仅仅剩了最后一件事:显示视频!下面就是 video_display函数:

void video_display(VideoState *is) {

 

SDL_Rect rect;

VideoPicture *vp;

AVPicture pict;

float aspect_ratio;

int w, h, x, y;

int i;

 

vp = &is->pictq[is->pictq_rindex];

if(vp->bmp) {

if(is->video_st->codec->sample_aspect_ratio.num == 0) {

aspect_ratio = 0;

} else {

aspect_ratio = av_q2d(is->video_st->codec->sample_aspect_ratio) *

is->video_st->codec->width / is->video_st->codec->height;

}

if(aspect_ratio <= 0.0) {

aspect_ratio = (float)is->video_st->codec->width /

(float)is->video_st->codec->height;

}

h = screen->h;

w = ((int)rint(h * aspect_ratio)) & -3;

if(w > screen->w) {

w = screen->w;

h = ((int)rint(w / aspect_ratio)) & -3;

}

x = (screen->w - w) / 2;

y = (screen->h - h) / 2;

 

rect.x = x;

rect.y = y;

rect.w = w;

rect.h = h;

SDL_DisplayYUVOverlay(vp->bmp, &rect);

}

}

因为我们的屏幕可以是任意尺寸(我们设置为640x480并且用户可以自己来改变尺寸),我们需要动态计算出我们显示的图像的矩形大小。所以一开始 我们需 要计算出电影的纵横比aspect ratio,表示方式为宽度除以高度。某些编解码器会有奇数采样纵横比,只是简单表示了一个像素或者一个采样的宽度除以高度的比例。因为宽度和高度在我们 的编解码器中是用像素为单位的,所以实际的纵横比与纵横比乘以样本纵横比相同。某些编解码器会显示纵横比为0,这表示每个像素的纵横比为1x1。然后我们 把电影缩放到适合屏幕的尽可能大的尺寸。这里的& -3表示与-3做与运算,实际上是让它们4字节对齐。然后我们把电影移到中心位置,接着调用SDL_DisplayYUVOverlay()函数。

结果是什么?我们做完了吗?嗯,我们仍然要重新改写声音部分的代码来使用新的VideoStruct结构体,但是那些只是尝试着改变,你可以看一下 那些参考示例代码。最后我们要做的是改变ffmpeg提供的默认退出回调函数为我们的退出回调函数。

VideoState *global_video_state;

 

int decode_interrupt_cb(void) {

return (global_video_state && global_video_state->quit);

}

我们在主函数中为大结构体设置了global_video_state。

这就是了!让我们编译它:

gcc -o tutorial04 tutorial04.c -lavutil -lavformat -lavcodec -lz -lm /

`sdl-config --cflags --libs`

请享受一下没有经过同步的电影!下次我们将编译一个可以最终工作的电影播放器。

给你有用的 ffmpeg 命令示例 ffmpeg由Fabrice Bellard创建,他与QEMU和QuickJS ( JSLinux背后的引擎)的创建者相同。本文介绍了许多不同的 ffmpeg 用例,假设读者具有该软件的基本知识。您将在本文中看到各种实际示例。更多详细信息,请参考官方文档页面。尽管它们以多行形式呈现,但以下所有示例都是一行。只需将它们复制并粘贴到您的终端中,然后按 Enter。1. 编解码器选项ffmpeg 支持的可用编解码器非常多。以下示例是一些最流行的组合,已在许多不同的商业项目中使用。1.1 转换为 MP4 lib 阅读详情

相关推荐

ffmpeg播放器实现详解 - 创建线程

在上篇文章中我们讨论了如何通过本文在上篇文章的基础上,讨论视频播放器的主要构成组件,并为后续的音视频同步过程做准备。

yinshipin007的博客 428

FFmpeg命令行教程:66个实用案例解析

FFmpeg是一种非常强大的开源工具,可以用于处理各种多媒体数据,如音频,视频和图像。它提供了丰富的功能,包括转码,剪辑,转换格式,添加滤镜等。本教程将详细介绍如何使用FFmpeg命令行,给出66个具体的使用案例。实例包含使用 FFmpeg 录制 RTSP 视频流,使用 FFmpeg 录制 GIF,使用 FFmpeg 录制电脑桌面等内容。

cheungxiongwei的博客 4132

SecureCRT串口连接保姆级教程:从驱动安装到波特率设置(附常见问题解决)

本文提供SecureCRT串口连接的保姆级教程,涵盖从USB转串口驱动安装、端口识别到波特率等核心参数设置的完整流程。针对连接失败、乱码、键盘输入无响应等高频问题,给出了深度排查与解决方案,帮助网络与嵌入式开发新手快速掌握串口调试技能。

weixin_29281941的博客 432

FFmpeg最常用命令参数详解及应用实例

FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。

专注企业级视频应用,企业视频直播、MR虚拟直播、教育培训连麦直播 1万+

仿真每日一练 | 有限元模态分析详解

结构的振动一直是工业领域产品分析的重点,在振动的仿真分析中,模态分析是其最基本的分析类型,通过研究结构的固有频率和振型对产品的设计提供指导。2.2、在interaction模块,通过special->Spring,在各点之间分别创建弹簧单元,弹簧刚度为1000。2.1、在interaction模块,创建两个RP点,与两侧RP点各间隔100大小,如图3所示;其中M、K、C均为n*n的矩阵,s、x、v为n*1的矢量,n为系统自由度数量。3、在Assembly模块创建装配体,两点之间的距离为100,如图2所示;

ansysxuexizhe的博客 1654

Matlab中eig内置函数转为C语言

本文记录一下如何将MATLAB中的eig函数转为C语言,即通过C语言求解矩阵的特征值与特征向量。[V,D]=eig(Rx)中V为矩阵Rx的特征向量,D为矩阵的特征值。其中Rx维度为12*12的复矩阵。 首先在MATLAB端创建入口函数保存为eigvalue.m: 打开MATLAB Coder,添加入口函数: 3.在定义输入类型窗口中,需要添加输入数据来训练...

u011441044的博客 3515

ffmpeg tutorial 创建线程

在手册中,这部分有的没有翻译。 流程大致是这样的: main-->定时器产生FF_REFRESH_EVENT事件-->产生decode_thread线程-->进入SDL事件循环   decode_thread-->初始化操作(很简单的找到解码库等)-->read包-->将包放入相应的队列中-->如果是视频流调用video_thread -->如果是音频流则设置audio_callback

hustbin的专栏 795

ubuntu20.04下dsp-slam的运行配置

DSP-SLAM:具有深度形状先验的面向对象的 SLAM

baidu_38431960的博客 3158

FFmpeg In Android - tutorial-4-Spawning Threads创建线程

Overview 概述 Last time we added audio support by taking advantage of SDL’s audio functions. SDL started a thread that made callbacks to a function we defined every time it needed audio. Now we’re going...

kingdam578的专栏 345

AM芯片性能测试

目前车载FM&AM没有明确的国标,因此各家测试项目可能不同,最主要测试标准比较混乱,多是根据具体芯片的规格书以及与芯片厂商协商。信号发生器:R&S SMCV100B音频分析仪:R&S UPV AUDIO AYALYZER DC 250KHZ(AP的也可以)专用USB-I2C控制模块(不同芯片控制模块不同,例如SPI或UART的控制模块)卡农线(针对模拟声道输出,+接左/右声道,-接GND,地可接GND也可悬空)

qflook的博客 902

RoCEv2 (RDMA over Converged Ethernet) 技术详细介绍

本文深入解析RDMA over Converged Ethernet (RoCEv2)技术,该技术是AI时代算力网络的核心。文章从四个维度展开:首先阐述RDMA如何通过零拷贝和内核旁路解决传统网络的数据搬运瓶颈;接着拆解RoCEv2协议栈,对比其与InfiniBand和iWARP的特性差异;然后分析其在分布式AI训练、高性能存储等场景的关键价值;最后提供实战指南,强调无损网络配置、流量隔离和精细监控的重要性。RoCEv2虽能带来微秒级延迟和极低CPU开销,但需精心设计网络环境才能发挥最大效能。

技术引领业务创新 1386

【转】ffmpeg tutorial 4:创建线程

 Spawning ThreadsOverviewLast time we added audio support by taking advantage of SDLs audio functions. SDL started a thread that made callbacks to a function we defined every time it need

code09的专栏 674

基于 Qt C++ 开发一套西门子量子测量系统的控制与数据采集平台

sensorIdCombo->addItems({"QTS-100-001 (温度)", "QPG-200-001 (压力)", "QDS-300-001 (位移)"});precisionTable->setHorizontalHeaderLabels({"传感器ID", "类型", "标称精度", "实际精度", "校准状态"});QWidget *dispWidget = createSensorWidget("量子位移", "mm (±1μm)", 50.0, 0.001);// 传感器状态更新。

寒寒豆豆软件公司的博客 253

ffmpeg tutorial 4:创建线程

Spawning Threads Overview Last time we added audio support by taking advantage of SDL's audio functions. SDL started a thread that made callbacks to a function we defined every time it needed audio

w_ww_w的专栏 508

PPT制作能力在职场中真的重要吗?一定要美术功底才能学好PPT吗?

我推出PPT技能培训专栏啦!好的PPT可以让你事半功倍、2023拥有PPT能力还可以让你具备一门极有价值的斜杠能力。更多内容请进:梦幻训练营专栏。专栏内会用本人积累的近10年的PPT学习方法论在短时间内教会你如何制作出精美绝伦的PPT,每篇教程后还会免费赠送一些小福利,不可多得。

打造全国最全的AI Agent开发知识领域的博客 728

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ffmpeg学习(2)--An ffmpeg and SDL Tutorial

ffmpeg学习(2)--An ffmpeg and SDL Tutorial 安装好ffmpeg后,就开始学习如何应用了,主要也就是熟悉一些常用API。 同事推荐了一个ffmpeg的自学教程--An ffmpeg and SDL Tutorial,觉得不错,就开始照敲代码了。这个教程的网址为:http://dranger.com/ffmpeg/tutorial01.html 学习过程中

gavin的专栏 5013

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FFmpeg入门(3)-An ffmpeg and SDL Tutorial

ffmpeg学习(2)--An ffmpeg and SDL Tutorial 安装好ffmpeg后,就开始学习如何应用了,主要也就是熟悉一些常用API。 同事推荐了一个ffmpeg的自学教程--An ffmpeg and SDL Tutorial,觉得不错,就开始照敲代码了。这个教程的网址为:http://dranger.com/ffmpeg/tutorial01.html 学习过

s170262941的专栏 1565

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

音视频入门(学习ffmpeg tutorial之 iOS 视频多线程)

FFmpeg视频多线程 接上一章节使用多线程来播放音频,这里讲讲如何使用多线程来播放视频,首先需要明确的是,多线程播放视频比多线程播放音频要复杂,因为音频的播放可以直接使用audio_callback方法来控制音频硬件读取的缓存区大小,没有数据了就直接调用这个方法读一批数据进来,但是视频硬件读取数据是需要代码来控制视频缓冲区的读取的,因此需要再弄一个生产者消费者模式代码来展示图片帧。具体流程图如下...

无聊的专栏 461

An ffmpeg and SDL Tutorial 学习笔记(四)

官网: http://dranger.com/ffmpeg/tutorial04.html Tutorial 04: Spawning Threads Code: tutorial04.c Overview Last time we added audio support by taking advantage of SDL's audio functions.  SDL st

STN_LCD的专栏 607

【ffmpeg学习】Tutorial 04: Spawning Threads 将解析线程与视频解码线程分开

环境 FFmpeg:2013年9月9日 github master版本 SDL:SDL2 系统:macos 10.8 64位 ffmpeg编译参数:./configure --cc=clang --disable-everything --enable-libfdk_aac --enable-libmp3lame --enable-protocol=file --enable-proto

ashqal的专栏 4659

ffmpeg tutorial 4 初印象

目标    大纲式列出变化(v3 vs v4)

titer1的专栏 1004

ffmpeg Tutorial学习

转自:http://blog.youkuaiyun.com/gavinr/article/details/6973704 安装好ffmpeg后,就开始学习如何应用了,主要也就是熟悉一些常用API。 同事推荐了一个ffmpeg的自学教程--An ffmpeg and SDL Tutorial,觉得不错,就开始照敲代码了。这个教程的网址为:http://dranger.com/ffmpeg/tutoria

hustbin的专栏 660

FFmpeg的tutorial 学习

一、前言: 这是一个学习 FFmpeg 的 tutorial 系列。 这个是一个对初学者比较友好的FFmpeg学习教程,作者一步步引导我们实现了一个音视频同步的播放器。 参考链接: 原文地址: http://dranger.com/ffmpeg/ 比较新的代码Github地址: https://github.com/mpenkov/ffmpeg-tutorial...

weixin_30919235的博客 113

ffmpeg的tutorial中文版学习笔记(四)

源代码:tutorial04-1.c 综述 前面我们利用SDL的音频函数实现了对音频解码和播放的支持,我们定义一个包含音频回调函数callbacks的线程函数,当我们需要音频的时候就使SDL启动这个线程。现在我们将要对视频播放做同样的事情,这样能使代码更容易模块化和协作,尤其有利于音视频同步,那么我们从哪里开始呢? 首先注意到,我们的主函数需要做太多的事情:运行event循环,读pa

郑亚帅 430

【转】ffmpeg tutorial 5:同步视频

 指导5:同步视频如何同步视频 前面整个的一段时间,我们有了一个几乎无用的电影播放器。当然,它能播放视频,也能播放音频,但是它还不能被称为一部电影。那么我们还要做什么呢? PTS和DTS 幸运的是,音频和视频流都有一些关于以多快速度和什么时间来播放它们的信息在里面。音频流有采样,视频流有每秒的帧率。然而,如果我们只是简单的通过数帧 和乘以

code09的专栏 841

k-skill myrealtrip-search:通过官方 Streamable HTTP MCP 服务器检索航班、住宿与 Tour/Ticket 的实战指南

本文基于 [docs/features/myrealtrip-search.md](https://link.gitcode.com/i/5c4fc9b138c6920cf0735e5723486436) 与 [myrealtrip-search/instruction.md](https://link.gitcode.com/i/d5d9384e7a8883bcbf4f71272efcd74a)

gitblog_00314的博客 391
上一篇: 【转】ffmpeg tutorial 4:创建线程
下一篇: 【转】ffmpeg tutorial 5:同步视频
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值