步驟如下:
- 安裝和準備FFmpeg:確保包含所需編碼器(如libx264)。
- 基本命令行編碼:使用ffmpeg命令進行轉碼,設置視頻編碼器、CRF、預設等。
- API編碼流程(針對開發者):
a. 注冊組件(舊版本可能需要,新版本可能自動處理)
b. 初始化上下文和輸出格式
c. 查找并打開編碼器
d. 配置編碼參數(分辨率、幀率、碼率等)
e. 處理輸入幀(讀取、轉換格式)
f. 編碼循環(發送幀,接收包)
g. 時間戳處理和時間基轉換
h. 寫入輸出文件
i. 清理資源 - 常見參數說明:CRF、preset、profile、tune等。
- 錯誤處理和調試:處理權限問題、編碼器缺失、內存管理等。
?
?
一、命令行工具操作指南
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. 核心步驟
- 初始化上下文
avformat_alloc_output_context2(&fmt_ctx, NULL, NULL, output_file);
- 查找編碼器
AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264);AVCodecContext *codec_ctx = avcodec_alloc_context3(codec);
- 配置編碼參數
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;
- 打開編碼器
avcodec_open2(codec_ctx, codec, NULL);
- 編碼循環
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); // 寫入封裝層}}
- 收尾處理
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模式:動態碼率(平衡質量與體積)
-
編碼預設(Preset)
-preset ultrafast
:編碼速度最快,壓縮率最低-preset veryslow
:編碼速度最慢,壓縮率最高
-
Profile與Level
ffmpeg -i input.mp4 -profile:v high -level 4.1 # 支持高級特性(如B幀)[[21]]
三、常見問題解決
-
找不到編碼器
- 安裝擴展庫:如
libx264
(H.264)、libvpx
(VP9) - 編譯FFmpeg時啟用:
./configure --enable-libx264
- 安裝擴展庫:如
-
時間戳錯誤
- 轉換時間基:
av_packet_rescale_ts(pkt, codec_ctx->time_base, stream->time_base)
- 轉換時間基:
-
內存泄漏
- 確保釋放資源:
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推送直播視頻源到服務器的工具