視頻處理工具 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 常用實例詳解 - 天天要聞

娛樂分類資訊推薦

雙金王!孫穎莎激動落淚 - 天天要聞

雙金王!孫穎莎激動落淚

北京時間25日,2025年多哈世乒賽結束了女單決賽的爭奪,孫穎莎4:3戰勝隊友王曼昱奪得冠軍。這是國乒本屆比賽收穫的第二枚金牌,孫穎莎也實現了世乒賽女單兩連冠。資料圖:孫穎莎 圖片來源:國際乒聯(ITTF)社交媒體在守住各自半區後,孫穎莎和王曼昱如願會師決賽,幫助國乒提前鎖定冠軍。作為隊友,兩人也非常熟悉彼此。本...
這出大師劇在滬演出,講述第一代紅色印鈔人的故事 - 天天要聞

這出大師劇在滬演出,講述第一代紅色印鈔人的故事

5月23日晚,以1952-1954年在上海商學院任教的馮國樑先生為原型創作的話劇《我帶着第一套人民幣進上海》在奉賢區海之花青少年活動中心鯨魚劇場首演。據悉,該劇為上海市文教結合2025年大師系列校園劇創編巡演立項項目。《我帶着第一套人民幣進上海》是一部聚焦新中國金融攻堅戰的紅色題材戲劇,以新四軍印鈔員馮國樑的視角展...
「紅椅子」再現,《中國好聲音》「重生」?《亞洲新聲》對陣《歌手》,年輕新人能否撼動老牌音綜 - 天天要聞

「紅椅子」再現,《中國好聲音》「重生」?《亞洲新聲》對陣《歌手》,年輕新人能否撼動老牌音綜

每經記者:宋美璐 每經編輯:魏官紅在《歌手2025》上線僅兩期便引發「馬嘉祺揭榜」「林志炫淘汰」等熱議之際,愛奇藝新推出的音樂綜藝《亞洲新聲》於5月23日上線,悄然切入競爭最激烈的音綜(音樂類綜藝節目)競爭,並以「亞洲新聲收留心碎歌手觀眾」詞條登上微博熱搜。《亞洲新聲》聚焦年輕新人挖掘,被網友認為是《中國好...
范丞丞、楊超越、陳都靈等34名演員參加培訓班!增加稅法課學時,廣電總局邀律師講解實務案例 - 天天要聞

范丞丞、楊超越、陳都靈等34名演員參加培訓班!增加稅法課學時,廣電總局邀律師講解實務案例

2025年青年演員和經紀人培訓班(第二期)於5月18日至21日在京舉辦,國家廣播電視總局黨組成員、副局長劉建國出席開班式並授課。據新京報,白宇、陳都靈、春夏、范丞丞、井柏然、焦俊艷、楊超越、朱亞文等人參加了本次培訓班。本期培訓是廣電總局組織的總第6期青年演員和經紀人培訓班,也是廣電總局研修學院與北京廣電局合作...
「邁巴赫少爺」朱也天父親發文為其慶生:作為父親,我心中有愧 - 天天要聞

「邁巴赫少爺」朱也天父親發文為其慶生:作為父親,我心中有愧

5月25日,朱軍珉為兒子朱也天寫信,慶祝其19歲生日,也告知其銅的珍貴。信中,朱軍珉提到:「記得去年此時,你還在為高考奮戰。後來,你被稱作『邁巴赫少爺』,我既心疼又驕傲——心疼你承受那些無端非議,驕傲你以700分的成績考入北大,用實力回應了所有質疑。作為父親,我心中有愧。這些年忙於公司經營,錯過了你太多重要...