FFmpeg 視頻處理入門教程

FFmpeg 視頻處理入門教程

轉自:https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

作者: 阮一峰

日期: 2020年1月14日

FFmpeg 是視頻處理最常用的開源軟件。

它功能強大,用途廣泛,大量用于視頻網站和商業軟件(比如 Youtube 和 iTunes),也是許多音頻和視頻格式的標準編碼/解碼實現。

在這里插入圖片描述

FFmpeg 本身是一個龐大的項目,包含許多組件和庫文件,最常用的是它的命令行工具。本文介紹 FFmpeg 命令行如何處理視頻,比桌面視頻處理軟件更簡潔高效。

如果你還沒安裝,可以根據官方文檔 先完成安裝。

一、概念

介紹 FFmpeg 用法之前,需要了解一些視頻處理的基本概念。

1.1 容器

視頻文件本身其實是一個容器(container),里面包括了視頻和音頻,也可能有字幕等其他內容。

常見的容器格式有以下幾種。一般來說,視頻文件的后綴名反映了它的容器格式。

  • MP4
  • MKV
  • WebM
  • AVI

下面的命令查看 FFmpeg 支持的容器。

$ ffmpeg -formats

1.2 編碼格式

視頻和音頻都需要經過編碼,才能保存成文件。不同的編碼格式(CODEC),有不同的壓縮率,會導致文件大小和清晰度的差異。

常用的視頻編碼格式如下。

  • H.262
  • H.264
  • H.265

上面的編碼格式都是有版權的,但是可以免費使用。此外,還有幾種無版權的視頻編碼格式。

  • VP8
  • VP9
  • AV1

常用的音頻編碼格式如下。

  • MP3
  • AAC

上面所有這些都是有損的編碼格式,編碼后會損失一些細節,以換取壓縮后較小的文件體積。無損的編碼格式壓縮出來的文件體積較大,這里就不介紹了。

下面的命令可以查看 FFmpeg 支持的編碼格式,視頻編碼和音頻編碼都在內。

$ ffmpeg -codecs

1.3 編碼器

編碼器(encoders)是實現某種編碼格式的庫文件。只有安裝了某種格式的編碼器,才能實現該格式視頻/音頻的編碼和解碼。

以下是一些 FFmpeg 內置的視頻編碼器。

  • libx264:最流行的開源 H.264 編碼器
  • NVENC:基于 NVIDIA GPU 的 H.264 編碼器
  • libx265:開源的 HEVC 編碼器
  • libvpx:谷歌的 VP8 和 VP9 編碼器
  • libaom:AV1 編碼器

音頻編碼器如下。

  • libfdk-aac
  • aac

下面的命令可以查看 FFmpeg 已安裝的編碼器。

$ ffmpeg -encoders

二、FFmpeg 的使用格式

FFmpeg 的命令行參數非常多,可以分成五個部分。

$ ffmpeg {1} {2} -i {3} {4} {5}

上面命令中,五個部分的參數依次如下。

  1. 全局參數
  2. 輸入文件參數
  3. 輸入文件
  4. 輸出文件參數
  5. 輸出文件

參數太多的時候,為了便于查看,ffmpeg 命令可以寫成多行。

$ ffmpeg \
[全局參數] \
[輸入文件參數] \
-i [輸入文件] \
[輸出文件參數] \
[輸出文件]

下面是一個例子。

$ ffmpeg \
-y \ # 全局參數
-c:a libfdk_aac -c:v libx264 \ # 輸入文件參數
-i input.mp4 \ # 輸入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 輸出文件參數
output.webm # 輸出文件

上面的命令將 mp4 文件轉成 webm 文件,這兩個都是容器格式。輸入的 mp4 文件的音頻編碼格式是 aac,視頻編碼格式是 H.264;輸出的 webm 文件的視頻編碼格式是 VP9,音頻格式是 Vorbis。

如果不指明編碼格式,FFmpeg 會自己判斷輸入文件的編碼。因此,上面的命令可以簡單寫成下面的樣子。

$ ffmpeg -i input.avi output.mp4

三、常用命令行參數

FFmpeg 常用的命令行參數如下。

  • -c:指定編碼器
  • -c copy:直接復制,不經過重新編碼(這樣比較快)
  • -c:v:指定視頻編碼器
  • -c:a:指定音頻編碼器
  • -i:指定輸入文件
  • -an:去除音頻流
  • -vn: 去除視頻流
  • -preset:指定輸出的視頻質量,會影響文件的生成速度,有以下幾個可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
  • -y:不經過確認,輸出時直接覆蓋同名文件。

四、常見用法

下面介紹 FFmpeg 幾種常見用法。

4.1 查看文件信息

查看視頻文件的元信息,比如編碼格式和比特率,可以只使用-i參數。

$ ffmpeg -i input.mp4

上面命令會輸出很多冗余信息,加上-hide_banner參數,可以只顯示元信息。

$ ffmpeg -i input.mp4 -hide_banner

4.2 轉換編碼格式

轉換編碼格式(transcoding)指的是, 將視頻文件從一種編碼轉成另一種編碼。比如轉成 H.264 編碼,一般使用編碼器libx264,所以只需指定輸出文件的視頻編碼器即可。

$ ffmpeg -i [input.file] -c:v libx264 output.mp4

下面是轉成 H.265 編碼的寫法。

$ ffmpeg -i [input.file] -c:v libx265 output.mp4

4.3 轉換容器格式

轉換容器格式(transmuxing)指的是,將視頻文件從一種容器轉到另一種容器。下面是 mp4 轉 webm 的寫法。

$ ffmpeg -i input.mp4 -c copy output.webm

上面例子中,只是轉一下容器,內部的編碼格式不變,所以使用-c copy指定直接拷貝,不經過轉碼,這樣比較快。

4.4 調整碼率

調整碼率(transrating)指的是,改變編碼的比特率,一般用來將視頻文件的體積變小。下面的例子指定碼率最小為964K,最大為3856K,緩沖區大小為 2000K。

$ ffmpeg \
-i input.mp4 \
-minrate 964K -maxrate 3856K -bufsize 2000K \
output.mp4

4.5 改變分辨率(transsizing)

下面是改變視頻分辨率(transsizing)的例子,從 1080p 轉為 480p 。

$ ffmpeg \
-i input.mp4 \
-vf scale=480:-1 \
output.mp4

4.6 提取音頻

有時,需要從視頻里面提取音頻(demuxing),可以像下面這樣寫。

$ ffmpeg \
-i input.mp4 \
-vn -c:a copy \
output.aac

上面例子中,-vn表示去掉視頻,-c:a copy表示不改變音頻編碼,直接拷貝。

4.7 添加音軌

添加音軌(muxing)指的是,將外部音頻加入視頻,比如添加背景音樂或旁白。

$ ffmpeg \
-i input.aac -i input.mp4 \
output.mp4

上面例子中,有音頻和視頻兩個輸入文件,FFmpeg 會將它們合成為一個文件。

4.8 截圖

下面的例子是從指定時間開始,連續對1秒鐘的視頻進行截圖。

$ ffmpeg \
-y \
-i input.mp4 \
-ss 00:01:24 -t 00:00:01 \
output_%3d.jpg

如果只需要截一張圖,可以指定只截取一幀。

$ ffmpeg \
-ss 01:23:45 \
-i input \
-vframes 1 -q:v 2 \
output.jpg

上面例子中,-vframes 1指定只截取一幀,-q:v 2表示輸出的圖片質量,一般是1到5之間(1 為質量最高)。

4.9 裁剪

裁剪(cutting)指的是,截取原始視頻里面的一個片段,輸出為一個新視頻。可以指定開始時間(start)和持續時間(duration),也可以指定結束時間(end)。

$ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]
$ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]

下面是實際的例子。

$ ffmpeg -ss 00:01:50 -i [input] -t 10.5 -c copy [output]
$ ffmpeg -ss 2.5 -i [input] -to 10 -c copy [output]

上面例子中,-c copy表示不改變音頻和視頻的編碼格式,直接拷貝,這樣會快很多。

4.10 為音頻添加封面

有些視頻網站只允許上傳視頻文件。如果要上傳音頻文件,必須為音頻添加封面,將其轉為視頻,然后上傳。

下面命令可以將音頻文件,轉為帶封面的視頻文件。

$ ffmpeg \
-loop 1 \
-i cover.jpg -i input.mp3 \
-c:v libx264 -c:a aac -b:a 192k -shortest \
output.mp4

上面命令中,有兩個輸入文件,一個是封面圖片cover.jpg,另一個是音頻文件input.mp3-loop 1參數表示圖片無限循環,-shortest參數表示音頻文件結束,輸出視頻就結束。

五、參考鏈接

  • FFmpeg libav tutorial
  • Digital video introduction
  • FFmpeg encoding and editing course
  • Making Slideshows w/FFMpeg
  • The Complete Guide for Using ffmpeg in Linux
  • Adding subtitles to your videos the easy way

(完)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532444.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

checkbox wpf 改變框的大小_【論文閱讀】傾斜目標范圍框(標注)的終極方案

前言最常用的斜框標注方式是在正框的基礎上加一個旋轉角度θ,其代數表示為(x_c,y_c,w,h,θ),其中(x_c,y_c )表示范圍框中心點坐標,(w,h)表示范圍框的寬和高[1,2,7]。對于該標注方式,如果將w和h的值互換,再將θ加上或者…

徹底理解BP之手寫BP圖像分類你也行

徹底理解BP之手寫BP圖像分類你也行 轉自:https://zhuanlan.zhihu.com/p/397963213 第一節:用矩陣的視角,看懂BP的網絡圖 1.1、什么是BP反向傳播算法 BP(Back Propagation)誤差反向傳播算法,使用反向傳播算法的多層感知器又稱為B…

h5頁面禁止復制_H5移動端頁面禁止復制技巧

前言:業務需要,需要對整個頁面禁止彈出復制菜單。在禁止的頁面中加入以下css樣式定義* {-webkit-touch-callout:none;/*系統默認菜單被禁用*/-webkit-user-select:none;/*webkit瀏覽器*/-khtml-user-select:none;/*早起瀏覽器*/-moz-user-select:none;/*…

梯度下降法和牛頓法計算開根號

梯度下降法和牛頓法計算開根號 本文將介紹如何不調包,只能使用加減乘除法實現對根號x的求解。主要介紹梯度下降和牛頓法者兩種方法,并給出 C 實現。 梯度下降法 思路/步驟 轉化問題,將 x\sqrt{x}x? 的求解轉化為最小化目標函數&#xff…

匯博工業機器人碼垛機怎么寫_全自動碼垛機器人在企業生產中的地位越來越重要...

全自動碼垛機器人在企業生產中的地位越來越重要在智能化的各種全自動生產線中,全自動碼垛機器人成了全自動生產線的重要機械設備,在各種生產中發揮著不可忽視的作用。全自動碼垛機器人主要用于生產線上的包裝過程中,不僅能夠提高企業的生產率…

kmeans手寫實現與sklearn接口

kmeans手寫實現與sklearn接口 kmeans簡介 K 均值聚類是最基礎的一種聚類方法。它是一種迭代求解的聚類分析算法。 kmeans的迭代步驟 給各個簇中心 μ1,…,μc\mu_1,\dots,\mu_cμ1?,…,μc? 以適當的初值; 更新樣本 x1,…,xnx_1,\dots,x_nx1?,…,xn? 對應的…

小說中場景的功能_《流浪地球》:從小說到電影

2019年春節賀歲檔冒出一匹黑馬:國產科幻片《流浪地球》大年初一上映后口碑、票房雙豐收:截至9日下午,票房已破15億,并獲得9.2的高評分。著名導演詹姆斯卡梅隆通過社交媒體對我國春節期間上映的科幻影片《流浪地球》發出的祝愿&…

線性回歸與邏輯回歸及其實現

線性回歸與邏輯回歸及其實現 回歸與分類 預測值定性分析,即離散變量預測時,稱之為分類;預測值定量分析,即連續變量預測時,稱之為回歸。 如預測一張圖片是貓還是狗,是分類問題;預測明年的房價…

hbase 頁面訪問_HBase

HBase 特點 海量存儲 Hbase 適合存儲 PB 級別的海量數據,在 PB 級別的數據以及采用廉價 PC 存儲的情況下,能在幾十到百毫秒內返回數據。這與 Hbase 的極易擴展性息息相關。正式因為 Hbase 良好的擴展性,才為海量數據的存儲提供了便利。 2&…

深入理解L1、L2正則化

深入理解L1、L2正則化 轉自:【面試看這篇就夠了】L1、L2正則化理解 一、概述 正則化(Regularization)是機器學習中一種常用的技術,其主要目的是控制模型復雜度,減小過擬合。正則化技術已經成為模型訓練中的常用技術&a…

rk3128屏幕占空比參數設置_瑞芯微RK3128芯片怎么樣 性能全面解讀

最近,筆者聽說一款搭載瑞芯微RK3128芯片方案的盒子問市了,打聽了一下才知道還真有其事,這款上市的RK3128盒子叫做開博爾M1,報價229元,這個價位在如今的四核網絡機頂盒市場可謂是不多見,但是這款芯片的性能怎…

機器學習中的概率模型

機器學習中的概率模型 轉自:https://zhuanlan.zhihu.com/p/164551678 機器學習中的概率模型 概率論,包括它的延伸-信息論,以及隨機過程,在機器學習中有重要的作用。它們被廣泛用于建立預測函數,目標函數,以…

訪問云服務器儲存的mp4_訪問云服務器儲存的mp4

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服務器 ECS(Elastic Compute Service)是一…

先驗、后驗、似然

先驗、后驗、似然 先驗分布、后驗分布和似然函數 本節轉自:先驗分布、后驗分布、似然估計這幾個概念是什么意思,它們之間的關系是什么? 通俗解釋 先驗分布:根據一般的經驗認為隨機變量應該滿足的分布。先驗分布是你瞎猜參數服從啥…

max std value 宏_Rust Macro/宏 新手指南

Rust語言最強大的一個特點就是可以創建和利用宏/Macro。不過創建 Rust宏看起來挺復雜,常常令剛接觸Rust的開發者心生畏懼。這片文章 的目的就是幫助你理解Rust Macro的基本運作原理,學習如何創建自己的 Rust宏。相關鏈接:在線學編程 - 匯智網…

高斯分布及其極大似然估計

高斯分布及其極大似然估計 高斯分布 一維高斯分布 一維高斯分布的概率密度函數為: N(μ,σ2)12πσexp?(?(x?μ)22σ2)N(\mu,\sigma^2)\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) N(μ,σ2)2π?σ1?exp(?2σ2(x?μ)2?) 多維高斯分布…

農林資金 大數據審計案例_大數據審計:現狀與發展

大數據審計:現狀與發展【摘要】傳統手工環境下,審計人員常用的審計方法包括檢查法、觀察法、重新計算法、外部調查法、分析法、鑒定法等。隨著信息技術的發展,被審計單位的運行越來越依賴于信息化環境。信息化環境下審計工作發生了巨大的變化…

商標45類分類表明細表_2019版注冊商標分類表,商標注冊45類范圍明細

注冊商標的時候都是要確定具體的產品或服務的,目前我國商標分類是用《類似商品和服務區分表–基于尼斯分類第十一版》2019年版這本分類書。這本分類表也是全球通用的分類表,商標分類總共有45個類別,1-34類是產品類、35-45類是服務類。這45個大…

高維高斯分布基礎

高維高斯分布基礎 多位高斯分布的幾何理解 多維高斯分布表達式為: p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e?12(x?μ)TΣ?1(x?μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21?…

angularjs sill 創建項目_開源項目——博客項目MyBlogs.Core,基于.NET 5

個人博客站項目源碼,高性能低占用的博客系統,這也許是我個人目前寫過的性能最高的web項目了 。目前日均處理請求數80-120w次,同時在線活躍用戶數30-100人,數據量累計已達到100多萬條,數據庫Redis網站主程序同時運行在一…