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

娛樂分類資訊推薦

別人說好 才是真好——當外國青年導演記錄中國司法 - 天天要聞

別人說好 才是真好——當外國青年導演記錄中國司法

點擊上方京法網事獲取北京法院官方資訊2024年暑夏,北京酷熱難耐。來自英國、美國、意大利、印度、馬達加斯加、印尼、湯加等七國共11位世界各地的青年導演來到北京,參與由北京師範大學主辦的 2024“看中國˙外國青年影像計劃”活動。炎熱的天氣沒有阻擋他們探尋的腳步,他們帶着異國的感官、別樣的視角觀察並記錄這個東方...
清明檔3.78億收官,《哪吒2》仍在票房榜前三 - 天天要聞

清明檔3.78億收官,《哪吒2》仍在票房榜前三

據燈塔專業版數據,2025年清明檔(4月4日-4月6日)以總票房3.78億元收官,觀影人次超928萬,場次141.3萬次。儘管檔期上映影片多達16部,類型涵蓋現實、懸疑、動畫、犯罪等多元題材,但新片整體表現乏力,頭部影片未能拉動市場熱度,對比去年同檔期票房高達8.42億元、《你想活出怎樣的人生》和《哥斯拉大戰金剛2》雙片齊發力...
面對面丨女兒追憶父親黃旭華:我都退休了,他還沒退 - 天天要聞

面對面丨女兒追憶父親黃旭華:我都退休了,他還沒退

在大女兒黃燕妮眼中,父親黃旭華生前永遠都是兩點一線的生活。身為中國第一代核潛艇工程總設計師,他把自己的一生都奉獻給了中國的核潛艇事業。黃燕妮:每天早上起來以後,下來先打太極拳,打完了以後再上去吃早飯,吃完早飯直接奔辦公室了。黃燕妮:他90多歲還沒退休,我都退休了,他還沒退。他每天還在這裡上半天班,整理...
16年過去了,那個說要幫傅彪養兒子的葛優,履行承諾了嗎 - 天天要聞

16年過去了,那個說要幫傅彪養兒子的葛優,履行承諾了嗎

文:小貓喵喵2005年,傅彪因為肝癌永遠的離開了我們,傅彪離去的那一天娛樂圈震動,他的葬禮上很多如今的大咖都曾經露面。這場由馮小剛主持,張國立擔任悼詞念誦人,娛樂圈大咖雲集的追悼會堪稱是頂級配置,但身為主角的傅彪卻永遠看不到這一切了。
27年後,“柳飄飄”又一次重回台前,這次她直接成為人生贏家! - 天天要聞

27年後,“柳飄飄”又一次重回台前,這次她直接成為人生贏家!

文|火火如果說港娛要是做一個黃金電影時期最反感的女演員排名,張柏芝一定名列前茅。同樣,如果要做一個黃金電影時期演技最好的女演員,張柏芝也一定名列前茅。那年,小皮鞋、學生裝、麻花辮組成了“柳飄飄”在《喜劇之王》里的第一次出鏡,也捧紅了年僅18
從“秋雅女神”到新生代打女,她活成了演藝圈最硬核的女神 - 天天要聞

從“秋雅女神”到新生代打女,她活成了演藝圈最硬核的女神

由王寶強主演的現實主義生活流罪案劇《棋士》近期終於上線。劇中,王智飾演的妻子高淑華一角給許多觀眾留下深刻印象。她與圍棋老師崔業飾演一對夫妻,剛開場,兩人就面臨著婚姻的僵局,情感破裂、處於離婚的邊緣。然而,隨着崔業人生境遇的變化,妻子高淑華和他的關係也發生了微妙的變化。劇中,高淑華出場總是身着職業裝,...