FFmpeg视频编码的完整操作指南

步骤如下:

  1. 安装和准备FFmpeg:确保包含所需编码器(如libx264)。
  2. 基本命令行编码:使用ffmpeg命令进行转码,设置视频编码器、CRF、预设等。
  3. API编码流程(针对开发者):
    a. 注册组件(旧版本可能需要,新版本可能自动处理)
    b. 初始化上下文和输出格式
    c. 查找并打开编码器
    d. 配置编码参数(分辨率、帧率、码率等)
    e. 处理输入帧(读取、转换格式)
    f. 编码循环(发送帧,接收包)
    g. 时间戳处理和时间基转换
    h. 写入输出文件
    i. 清理资源
  4. 常见参数说明:CRF、preset、profile、tune等。
  5. 错误处理和调试:处理权限问题、编码器缺失、内存管理等。

 

 

一、命令行工具操作指南

1. 基础编码命令
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 23 -c:a aac -b:a 128k output.mp4
  • 参数解析
    • -c:v libx264:指定H.264视频编码器。
    • -preset slow:平衡编码速度与压缩率(可选值:ultrafast, superfast, veryfast, fast, medium, slow等)。
    • -crf 23:恒定质量模式(CRF范围0-51,值越小质量越高,推荐18-28)。
    • -c:a aac:音频编码为AAC格式。
    • -b:a 128k:音频码率设为128kbps。
2. 常用参数扩展
  • 分辨率调整
  ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 output.mp4

错误信息:

main.bash: line 1: ffmpeg: command not found (exit status 127)

  • 帧率控制
  ffmpeg -i input.mp4 -r 30 output.mp4  # 强制输出帧率为30fps
  • 关键帧间隔(GOP)
  ffmpeg -i input.mp4 -g 60 -keyint_min 60  # 每60帧一个关键帧[[21]]
  • 硬件加速编码(如NVIDIA NVENC):
  ffmpeg -i input.mp4 -c:v h264_nvenc -preset p7 -cq 21 output.mp4

3. 高级功能示例

  • 提取YUV数据
  ffmpeg -i input.mp4 -c:v rawvideo -pix_fmt yuv420p output.yuv
  • 多路流封装
  ffmpeg -i video.mp4 -i audio.wav -map 0:v -map 1:a -c copy output.mkv

二、API开发流程(基于libavcodec)

1. 核心步骤
  1. 初始化上下文
   avformat_alloc_output_context2(&fmt_ctx, NULL, NULL, output_file);
  1. 查找编码器
   AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
  1. 配置编码参数
   codec_ctx->width = 1280;codec_ctx->height = 720;codec_ctx->time_base = (AVRational){1, 25};  // 帧率25fpscodec_ctx->bit_rate = 4000000;              // 码率4Mbpscodec_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
  1. 打开编码器
   avcodec_open2(codec_ctx, codec, NULL);
  1. 编码循环
   AVFrame *frame = av_frame_alloc();AVPacket *pkt = av_packet_alloc();while (/* 有数据输入 */) {// 填充frame数据(如YUV像素)avcodec_send_frame(codec_ctx, frame);while (avcodec_receive_packet(codec_ctx, pkt) == 0) {av_write_frame(fmt_ctx, pkt);  // 写入封装层}}
  1. 收尾处理
   av_write_trailer(fmt_ctx);  // 写入文件尾部avcodec_free_context(&codec_ctx);
```<span data-key="39" class="reference-num" data-pages="undefined">1</span><span data-key="40" class="reference-num" data-pages="undefined">11</span><span data-key="41" class="reference-num" data-pages="undefined">15</span>---### **三、关键参数详解**
1. **码率控制模式**  - **CRF模式**:质量优先(推荐视频存档)  - **CBR模式**:恒定码率(适合流媒体)  
```bashffmpeg -i input.mp4 -b:v 2M -maxrate 2M -bufsize 4M output.mp4
  • VBR模式:动态码率(平衡质量与体积)
  1. 编码预设(Preset)

    • -preset ultrafast:编码速度最快,压缩率最低
    • -preset veryslow:编码速度最慢,压缩率最高
  2. Profile与Level

   ffmpeg -i input.mp4 -profile:v high -level 4.1  # 支持高级特性(如B帧)[[21]]

三、常见问题解决

  1. 找不到编码器

    • 安装扩展库:如libx264(H.264)、libvpx(VP9)
    • 编译FFmpeg时启用:./configure --enable-libx264
  2. 时间戳错误

    • 转换时间基:av_packet_rescale_ts(pkt, codec_ctx->time_base, stream->time_base)
  3. 内存泄漏

    • 确保释放资源:av_frame_free()av_packet_free()

需要注意不同版本的FFmpeg差异,比如av_register_all()在较新版本中已不再需要,因此需要确认当前日期是2025年,可能相关函数有所变化。根据(2025年)和(2023年),可能现在使用avcodec_send_frame和avcodec_receive_packet更常见。

 视频二维码应用

  • 保持视频二维码不变更新视频内容的教程
  • 视频二维码制作与应用的分步骤教程(职场小白也会用)
  • 如何把多个视频文件生成一个二维码(图文教程)
  • 音视频转换生成视频二维码,如何操作快速生成?
  • 视频二维码也可以做倍速观看,看教程吧
  • PHP生成视频二维码代码和视频转换二维码操作教程
  • 竖式全屏形式的二维码如何制作?
  • 视频二维码有哪些方便之处,如何生成二维码?
  • 二维码不变如何更新视频内容?教程来了,手把手教程

 热门原创推荐

  • 无版权,全免费,请收藏这10个免费高清无权素材网站
  • 常用照片尺寸对照表,照片大小看这个表就OK了
  • 如何使用FTP上传文件(FTP文件传输)
  • 在线视频加密播放(加密视频观看)操作教程完整版
  • 企业公众号菜单添加视频的完整教程(组图)

AI工具类文章

  • AI应用:mijdourney 如何写prompt
  • Midjourney最基础的一些使用设置
  • Gemini 前世今生全面的信息介绍
  • AI视频成工具D-ID介绍(AI数字人常用工具)
  • Midjourney Prompt的使用基本结构介绍

视频加密/防下载/防录屏

  • 防止付费课程视频被盗被下载的五大招数
  • 企业内训视频加密防盗录全攻略
  • 视频加密的两种常见的方式数字版权管理和加密算法与应用

FFmpeg视频编码

  • 如何设置FFmpeg进行高分辨率视频转码?
  • 视频处理时的截图工具ffmpeg截图用法实例

谷歌浏览器

  • Chrome提示由贵单位管理该怎么取消?
  • 关闭谷歌更新提示“若要接收后续 google chrome 更新,您需使用 windows 10或更高版本”
  • chrome谷歌浏览器书签不同步的解决办法
  • Chrome浏览器无痕浏览真的无痕吗?
  • 关闭谷歌浏览器输入框记忆功能的方法

ThinkPad电脑

  • ThinkPad系列产品进入BIOS并设置U盘启动的详细步骤
  • 通用的ThinkPad BIOS 设置指南(精简版)

视频直播

  • 企业如何做虚拟直播(绿幕抠像直播)
  • 视频直播推流攻略(整理的各大平台推流界面)
  • OBS直播工具使用指南/OBS推送直播视频源到服务器的工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙 UIAbility组件与UI的数据同步和窗口关闭

使用 EventHub 进行数据通信 Stage模型概念图 根据 Stage 模型概念图 UIAbility 先于 ArkUI Page 创建 所以&#xff0c;事件要先 .on 订阅 再 emit 发布 假如现在有页面 Page1 和他的 UIAbility // src/main/ets/page1ability/Page1Ability.ets onCreate(want: Want, laun…

全栈工程师实战手册:LuatOS日志系统开发指南!

本文聚焦LuatOS-log库的实战应用场景&#xff0c;通过完整案例演示日志模块集成、格式定制及远程同步方案&#xff0c;帮助全栈开发者构建灵活可靠的日志管理框架。下面&#xff0c;我们一起来认识LuatOS的log库&#xff01; 一、 log.info() log info()主要打印一些正常的…

STM32-USART串口通信(9)

一、通信接口介绍 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统。 当STM32想要实现一些功能&#xff0c;但是需要外挂一些其他模块才能实现&#xff0c;这就需要在两个设备之间连接上一根或多跟通信线&#xff0c;通过通信线路发送或者接…

【MoveIt 2】使用 MoveIt 任务构造器(MoveIt Task Constructor)进行拾取和放置

本教程将引导您创建一个使用 MoveIt 任务构造器规划抓取和放置操作的包。MoveIt 任务构造器&#xff08;https://github.com/moveit/moveit_task_constructor/tree/ros2/&#xff09;提供了一种为包含多个不同子任务&#xff08;称为阶段&#xff09;的任务进行规划的方法。如果…

破解商业综合体清洁管理困局:商业空间AI智能保洁管理系统全场景解决方案

方案整体概述 随着商业综合体日益向智能化、精细化管理转型&#xff0c;传统保洁工作面临人员监管难、清洁效果评估难、应急响应滞后等诸多挑战。为解决这些痛点&#xff0c;本系统依托计算机视觉、行为识别、图像分割与深度学习等AI技术&#xff0c;构建一套集人员管理、工作…

spring响应式编程系列:异步消费数据

目录 示例 大致流程 parallel cache PARALLEL_SUPPLIER newParallel init publishOn new MonoSubscribeOnValue ​​​​​​​subscribe ​​​​​​​new LambdaMonoSubscriber ​​​​​​​MonoSubscribeOnValue.subscribe ​​​​​​​onSubscribe ​​…

视频编解码学习十二之Android疑点

一、android.view.SurfaceControl.setDisplaySurface的作用 android.view.SurfaceControl.setDisplaySurface 是 Android 系统中一个 native 层级别的 API&#xff0c;主要用于 设置某个物理显示屏&#xff08;Display&#xff09;的输出 Surface&#xff0c;属于 SurfaceFlin…

家用或办公 Windows 电脑玩人工智能开源项目配备核显的必要性(含 NPU 及显卡类型补充)

一、GPU 与显卡的概念澄清 首先需要明确一个容易误解的概念&#xff1a;GPU 不等同于显卡。 显卡和GPU是两个不同的概念。 【概念区分】 在讨论图形计算领域时&#xff0c;需首先澄清一个常见误区&#xff1a;GPU&#xff08;图形处理单元&#xff09;与显卡&#xff08;视…

Python----神经网络(《Deep Residual Learning for Image Recognition》论文和ResNet网络结构)

一、论文 1.1、论文基本信息 标题&#xff1a;Deep Residual Learning for Image Recognition 作者&#xff1a;Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun 单位&#xff1a;Microsoft Research 会议&#xff1a;CVPR 2016 主要贡献&#xff1a;提出了一种深度残…

Qt/C++开发监控GB28181系统/录像文件查询/录像回放/倍速播放/录像文件下载

一、前言 搞定了实时预览后&#xff0c;另一个功能就是录像回放&#xff0c;录像回放和视频点播功能完全一致&#xff0c;唯一的区别就是发送点播的sdp信息中携带了开始时间和结束时间&#xff0c;因为是录像文件&#xff0c;所以有这个时间&#xff0c;而实时视频预览这个对应…

在Spark搭建YARN

&#xff08;一&#xff09;什么是SparkONYarn模式 Spark on YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Spark 框架在 Hadoop 集群中运行的一种部署模式&#xff0c;它借助 Hadoop YARN 来管理资源和调度任务。 架构组成 ResourceManager&#xff1a;作…

SpringAI

机器学习&#xff1a; 定义&#xff1a;人工智能的子领域&#xff0c;通过数据驱动的方法让计算机学习规律&#xff0c;进行预测或决策。 核心方法&#xff1a; 监督学习&#xff08;如线性回归、SVM&#xff09;。 无监督学习&#xff08;如聚类、降维&#xff09;。 强化学…

如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?

一、Redis分布式锁基础实现 public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime 30; // 默认30秒public boolean tryLock() {try (Jedis jedis jedisPool.getResource()) {// NX表示不…

前端面试宝典---js垃圾回收机制

什么是垃圾回收 垃圾回收是指一种自动内存管理机制&#xff0c;当声明一个变量时&#xff0c;会在内存中开辟一块内存空间用于存放这个变量。当这个变量被使用过后&#xff0c;可能再也不需要它了&#xff0c;此时垃圾回收器会自动检测并回收这些不再使用的内存空间。垃圾回收…

阿里妈妈LMA2新进展:集成大语言模型与电商知识的通用召回大模型URM

近日&#xff0c;阿里妈妈在国际顶级学术会议 —— 国际万维网大会&#xff08;International World Wide Web Conference, 简称WWW&#xff09;上共同主持了计算广告算法技术相关的Tutorial&#xff08;讲座&#xff09;&#xff0c;介绍了计算广告领域的技术发展脉络&#xf…

数字孪生实时监控汽车零部件工厂智能化巡检新范式

在汽车制造业面临数字化转型时&#xff0c;汽车零部件工厂也面临着提升生产效率、降低运营成本和增强市场竞争力的多重挑战。传统的巡检方式已经难以满足现代工厂对高效、精准管理和实时决策的需求。数字孪生系统的出现&#xff0c;为汽车零部件工厂提供了一种创新的智能化巡检…

【计算机网络】3数据链路层②

1. 数据链路层所处的地位 数据链路层使用的信道主要有两种: ①点对点信道:PPP协议 ②广播信道:有线局域网,CSMA/CD协议;无线局域网,CSMA/CA协议 对比项点对点信道 vs 单播广播信道 vs 广播核心是否一致✅ 一致(一对一传输)✅ 一致(一对所有传输)差异点前者是物理层…

c++中的函数(默认参数,占位参数,重载)

1&#xff0c;函数默认参数 在c中&#xff0c;函数的形参列表中的形参是可以有默认值得 语法&#xff1a;返回值类型 函数名 &#xff08;参数 默认值&#xff09;{} 示例&#xff1a; #include<iostream> using namespace std;//函数默认参数 // 就是如果传了就…

【原创】使用阿里云存放一个临时共享的文件

在某些场合&#xff0c;需要临时将一个文件存储到一个可被公网访问的地方&#xff0c;某个服务需要访问一下这个文件。这个文件基本上就是一次寿命&#xff0c;也就是你上传一下&#xff0c;然后被访问一下&#xff0c;这个文件的寿命就结束了。 对于这种需求&#xff0c;自建…

Python中列表(list)知识详解(2)和注意事项以及应用示例

在 Python 中列表&#xff08;list&#xff09; 的包括其结构、常见操作&#xff08;更新、添加、删除、查找、队列栈行为等&#xff09;&#xff0c;下面将逐一的进行讲解并附相关的示例。 一、列表的基础知识 1. 定义与特点 定义方式&#xff1a;用 [] 包裹的有序可变集合 …