視頻處理工具 FFmpeg 常用實例詳解

2020年12月31日23:55:04 娛樂 1462


FFmpeg 是一個專業的多媒體框架,能夠解碼、編碼、轉碼、復用、解復用、流式傳輸、過濾和播放幾乎所有格式的媒體文件。 其核心就是 FFmpeg 程序本身,是一個基於命令行的視頻和音頻處理工具,多用於視頻轉碼基礎編輯(修剪和合併)、視頻縮放後期效果製作等場景。 這裡通過一些示例簡單地介紹下 ffmpeg 命令的基本使用。

視頻處理工具 FFmpeg 常用實例詳解 - 天天要聞

一、獲取詳細信息

ffmpeg -i <inputfile> -hide_banner 其中 -hide_banner 選項用於在輸出文件的詳細信息時省略 ffmpeg 的版本信息和編譯選項等。

$ ffmpeg -i bbb.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'bbb.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    creation_time   : 2013-12-17T16:40:26.000000Z
    title           : Big Buck Bunny, Sunflower version
    artist          : Blender Foundation 2008, Janus Bager Kristensen 2013
    comment         : Creative Commons Attribution 3.0 - http://bbb3d.renderfarming.net
    genre           : Animation
    composer        : Sacha Goedegebure
  Duration: 00:10:34.53, start: 0.000000, bitrate: 8487 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 3840x2160 [SAR 1:1 DAR 16:9], 8002 kb/s, 60 fps, 60 tbr, 60k tbn, 120 tbc (default)
    Metadata:
      creation_time   : 2013-12-17T16:40:26.000000Z
      handler_name    : GPAC ISO Video Handler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2013-12-17T16:40:28.000000Z
      handler_name    : GPAC ISO Audio Handler
    Stream #0:2(und): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 320 kb/s (default)
    Metadata:
      creation_time   : 2013-12-17T16:40:28.000000Z
      handler_name    : GPAC ISO Audio Handler
    Side data:
      audio service type: main
At least one output file must be specified

二、格式轉換

ffmpeg -i <inputfile> <outputfile>

FFmpeg 是一個強大的音頻和視頻格式轉換器,幾乎支持當前所有常用的格式,如: $ ffmpeg -i input.avi output.mp4

或者經常需要用到的,將視頻文件轉為 GIF 動圖: $ ffmpeg -i input.mp4 output.gif

如果在格式轉換時需要保留源視頻的質量,可以添加上 -qscale 0 選項(-qscale 的值越低,輸出視頻的質量越高): $ ffmpeg -i input.webm -qscale 0 output.mp4

可以使用 -formats 選項列出 ffmpeg 命令支持的所有格式(很長很長的一個列表。。。):

$ ffmpeg -formats -hide_banner
File formats:
 D. = Demuxing supported
 .E = Muxing supported
 --
 D  3dostr          3DO STR
  E 3g2             3GP2 (3GPP2 file format)
  E 3gp             3GP (3GPP file format)
 D  4xm             4X Technologies
  E a64             a64 - video for Commodore 64
 D  aa              Audible AA format files
 D  aac             raw ADTS AAC (Advanced Audio Coding)
 DE ac3             raw AC-3
 D  acm             Interplay ACM
 D  act             ACT Voice file format
 D  adf             Artworx Data Format
 D  adp             ADP
 D  ads             Sony PS2 ADS
  E adts            ADTS AAC (Advanced Audio Coding)
 DE adx             CRI ADX
 D  aea             MD STUDIO audio
 D  afc             AFC
 DE aiff            Audio IFF
 D  aix             CRI AIX
 DE alaw            PCM A-law
 D  alias_pix       Alias/Wavefront PIX image
 DE amr             3GPP AMR
 D  amrnb           raw AMR-NB
 D  amrwb           raw AMR-WB
 D  anm             Deluxe Paint Animation
 D  apc             CRYO APC
 D  ape             Monkey's Audio
...

三、指定編碼

可以通過 -c 選項手動指定輸出文件的編碼,如: $ ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv 其中 -c:v 用於指定視頻編碼,-c:a 指定音頻編碼

PS:視頻文件的後綴如 mp4、mkv、avi 等只是表示用來裝載媒體流的「容器」類型,而編碼時使用的編碼方式則另需指定。 當然很多時候 ffmpeg 會根據輸出文件的後綴自行選擇默認的編碼方式,無需手動指定。

只改變視頻或者音頻流的編碼

可以在指定編碼時,只改變視頻或者音頻編碼中的一項,另一項則保持原來的格式: $ ffmpeg -i input.webm -c:v copy -c:a flac output.mkv -c:v copy 表示複製輸入文件中的視頻流到輸出文件,不重新進行編碼

只改變文件後綴

即輸入文件中的視頻流和音頻流同時複製到輸出文件,只改變文件後綴: $ ffmpeg -i input.webm -c:av copy output.mkv

編碼列表

查看 FFmpeg 支持的所有音視頻編碼格式(又一個很長的列表。。。):

$ ffmpeg -codecs -hide_banner
Codecs:
 D..... = Decoding supported
 .E.... = Encoding supported
 ..V... = Video codec
 ..A... = Audio codec
 ..S... = Subtitle codec
 ...I.. = Intra frame-only codec
 ....L. = Lossy compression
 .....S = Lossless compression
 -------
 ...
 DEV.L. flv1                 FLV / Sorenson Spark / Sorenson H.263 (Flash Video) (decoders: flv ) (encoders: flv )
 D.V..S fmvc                 FM Screen Capture Codec
 D.VI.S fraps                Fraps
 D.VI.S frwu                 Forward Uncompressed
 D.V.L. g2m                  Go2Meeting
 D.V.L. gdv                  Gremlin Digital Video
 DEV..S gif                  GIF (Graphics Interchange Format)
 DEV.L. h261                 H.261
 DEV.L. h263                 H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2
 D.V.L. h263i                Intel H.263
 DEV.L. h263p                H.263+ / H.263-1998 / H.263 version 2
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv h264_cuvid ) (encoders: libx264 libx264rgb h264_amf h264_nvenc h264_qsv nvenc nvenc_h264 )
 DEVIL. hap                  Vidvox Hap
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv hevc_cuvid ) (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )
...

四、視頻壓縮

編碼與比特率

有些時候,基於磁盤空間和網絡傳輸的考慮,需要對視頻文件進行壓縮處理。其中一種方法就是改變視頻的比特率。 在某些情況下,比特率的適當縮減對視頻的觀看效果並不會產生太大的影響(人眼察覺的範圍內)。 當然編碼的選擇也會對輸出文件的大小產生一定的影響,示例如下:

$ ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv -b:v 用於指定視頻的比特率。

幀率

另一種方式就是改變視頻文件的幀率,也就是人們常常提到的FPS

$ ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv -r 30 選項用於指定輸出視頻的幀率為 30 FPS。

分辨率

視頻的分辨率也會影響文件的大小,可以使用 -s 選項指定輸出文件的分辨率。當然,視頻的畫幅大小也會產生相應的變化:

$ ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv 或 $ ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv

五、提取音頻

通過格式轉換,FFmpeg 可以直接將視頻文件轉為音頻文件,只需要指定輸出文件的格式為 .mp3 或 .ogg 等。如: $ ffmpeg -i input.mp4 output.mp3

同時,也可以在轉換時指定音頻的格式選項: $ ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3

其中: -vn :指定輸出文件中禁用視頻 -ar :指定輸出文件中音頻的採樣率 -ac:指定音頻的通道數 -ab:指定音頻的比特率 -f:指定輸出文件的格式

六、常用實用命令集錦

調整分辨率

將某視頻文件的分辨率改為 1280x720: $ ffmpeg -i input.mp4 -filter:v scale=1280:720 output.mp4 或者: $ ffmpeg -i input.mp4 -s 1280x720 output.mp4

壓縮視頻文件

$ ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4

也可以添加如下選項同時對音頻流進行壓縮: -c:a aac -strict -2 -b:a 128k

移除音頻

$ ffmpeg -i input.mp4 -an output.mp4 -an 選項表示在輸出文件中禁用音頻

提取圖片

$ ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png

其中各選項的含義: -r :設置幀率,即每秒有多少幀畫面被提取到圖片中。默認為 25 -f :指定輸出的格式。本例中為圖片(image2) -image-%2d.png :指定提取出的圖片的命名方式。本例中最終的命名為 image-01.png、image-02.png 等。如使用 image-%3d.png ,則最終的命名為 image-001.png、imag-002.png 等

裁剪視頻

即截取指定範圍內的視頻畫面,裁切掉多餘的部分: $ ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

其中 crop=w:h:x:y 用於指定「裁剪框」的大小和位置。 w 表示裁剪部分的寬度(默認為源視頻的寬度 iw); h 表示裁剪部分的高度(默認為源視頻的高度 ih; x 表示 x 軸上裁剪的起始位置(最左邊為 0,默認為源視頻的中間位置); y 表示 y 軸上裁剪的起始位置(最頂部為 0,默認為源視頻的中間位置)。

改變視頻比例

視頻比例即視頻畫幅的長寬比,也就是通常所說的 4:3 和 16:9 等。 $ ffmpeg -i input.mp4 -aspect 16:9 output.mp4

設置音頻封面

即創建以一張靜止的圖片為畫面的視頻。

$ ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -shortest output.mp4 其中的選項和參數可以根據需求自行修改和省略。

截取視頻片段

$ ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 60 output.mp4 截取視頻中從第 50 秒開始,持續時間為一分鐘的視頻片段。

其中 -ss 用於指定視頻片段的開始時間; -t 指定視頻片段的持續時間,單位都為秒。

也可以使用如下方式: $ ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3

以上命令也適用於音頻文件。

視頻分割

$ ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4 將輸入的視頻文件分割為兩段,第一段為從最開始到第 30 秒;第二段為第 30 秒到視頻結束。 其中 -t 00:00:30 前面省略了 -ss 00:00:00; -ss 00:00:30 後面省略了 -t 剩餘時間。

有點類似於截取多個連續的視頻片段。

視頻合併

首先創建包含各媒體文件路徑列表的文本文件 join.txt :

file '~/myvideos/part1.mp4'
file '~/myvideos/part2.mp4'
file '~/myvideos/part3.mp4'

使用 -f concat 選項對多個視頻進行合併: $ ffmpeg -f concat -i join.txt -c copy output.mp4

添加字幕文件

$ ffmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4

改變視頻播放速度(音頻不受影響)

$ ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4

上述命令會加快視頻畫面的播放速度,音頻播放速度不變。

如果想放慢視頻畫面的切換速度,可以相應地將 setpts=0.5*PTS 中的 0.5 改為大於 1 的數值。

Padding

即寬銀幕視頻中上下的兩道「黑邊」,可以使用 FFmpeg 命令添加類似的效果: $ ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" output.mp4

該效果由 -vf 選項的 pad 參數指定,可以根據情況自行修改。

從圖片創建視頻

$ ffmpeg -framerate 1 -i img%02d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 把當前目錄下的多張圖片(名字為 img01.jpg、img02.jpg 的形式)組合為一個視頻文件,效果類似於自動播放的 PPT。 每秒切換一張圖片

$ ffmpeg -framerate 30 -i img%02d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4 也是將當前目錄下的多張圖片組合成一個完整的視頻,該視頻幀率為 30 FPS。 每幀切換一張圖片


需要更多音視頻、webrtc、ffmpeg視頻學習資料 文檔請後台私信【音視頻】獲取


視頻處理工具 FFmpeg 常用實例詳解 - 天天要聞


視頻處理工具 FFmpeg 常用實例詳解 - 天天要聞

娛樂分類資訊推薦

泰王登基7周年後宮齊亮相,3名90後新寵不敵蘇提達,貴妃詩妮娜現身角落 - 天天要聞

泰王登基7周年後宮齊亮相,3名90後新寵不敵蘇提達,貴妃詩妮娜現身角落

2026 年 5 月 2 日,泰國國王瑪哈・哇集拉隆功與蘇提達王后在曼谷大皇宮阿瑪林・維尼猜王座廳主持功德儀式,紀念加冕 7 周年,為王室先祖與逝者祈福。這場儀式既是王室對傳統的致敬,也暗藏着後宮權力格局的微妙博弈。當天的儀式現場等級森嚴,蘇提達王后身着黑色王室禮服,佩戴象徵皇家的黃色綬帶與多枚王室勳章,全程陪伴...
「益」起去撒野·大通湖篇丨湖闊藏清境,鳥舞水雲間 - 天天要聞

「益」起去撒野·大通湖篇丨湖闊藏清境,鳥舞水雲間

編者按:風暖景明,正是奔赴山野、擁抱自然的好時節。紅網益陽站推出《「益」起去撒野》系列長圖報道,把益陽的山水田園、湖光野趣盡收一圖。這裡有竹海清風、古道茶香,有洞庭浩渺、花海爛漫,更有藏在鄉野間的詩意與閑適。不必遠行,家門口便有好風景。願這一紙長圖,成為你的假期出遊嚮導,帶你走進自然,在益陽的清風曠...
教過100萬學生的她紮根閔行,站上「歌王」舞台 - 天天要聞

教過100萬學生的她紮根閔行,站上「歌王」舞台

兩次辭掉帶編製的穩定工作,幾次從頭再來,輾轉新疆、西安、北京、常州、上海,王悅始終沒有放下兩件事:去上海,繼續唱歌。多年後,她不僅把自己安頓在上海閔行,也把熱愛做成了事業——從科班聲樂教師到線上直播講師,累計服務學員超過100萬人。如今,正在備賽「聲動閔行·我是歌王」2026市民歌手爭霸賽的她,又一次站在...
鳳凰傳奇深圳演唱會在5月2日成功舉行!歌手曾毅發佈九宮格演出照 - 天天要聞

鳳凰傳奇深圳演唱會在5月2日成功舉行!歌手曾毅發佈九宮格演出照

鳳凰傳奇深圳演唱會在2026年5月2日這一天進行,延續了了4月24日到4月26日三天演唱會的高關注度。證明了優秀歌手的演唱會究竟有多受歡迎!​鳳凰傳奇歌手曾毅在社交平台發文,表達了自己最真實的演出感受!歌手曾毅這樣寫道:深圳第四場,想把所有的歡呼和掌聲都送給你們!謝謝!明天繼續!由此帶來歌迷對鳳凰傳奇深圳演唱會...
當前熱映電影口碑榜Top5:《寒戰1994》排在第二,你看過哪幾部? - 天天要聞

當前熱映電影口碑榜Top5:《寒戰1994》排在第二,你看過哪幾部?

Top5、《穿普拉達的女王2》主演:梅麗爾·斯特里普 / 安妮·海瑟薇 / 艾米莉·布朗特影片點評:整個片子雖然沒有特別出乎意料的情節,但好多時刻的救贖點都很打動我,比如米蘭達讓一直身居幕後的助理代替她上台發言,非常peace的一段發言,沒有緊張,沒有高光時刻,這段處理非常好。同時,這部續篇,從來不是對前作的簡單復...