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.pswp.cn/web/79863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79863.shtml
英文地址,請注明出處:http://en.pswp.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;用 [] 包裹的有序可變集合 …