FFMPEG常用命令持續(xù)更新

這里通過(guò)軟件MediaInfo來(lái)查看視頻信息。其中黃色為幀數(shù),紅色為比特率


基本用法:

  • 1除來(lái)上面我們通過(guò)軟件來(lái)查看視頻信息之外,我們還可以使用ffmpeg命令查看
ffmpeg -i vid.mp4
image.png
  • 2 拆分視頻為多張圖片
ffmpeg -i vid.mp4 frame%03d.png   //%d也可以。支持的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI


03的%表示有三位,不夠三位前面補(bǔ)充0,運(yùn)行上面這行代碼,該視頻一共生成了329張圖片

image.png

我們可以手動(dòng)指定每秒生成的圖片數(shù)量

ffmpeg -i vid.mp4 frame%03d.png -r 20

這行命令表示每秒生成20張圖片。我們還可以把生成的這些圖片重新整合成視頻。

ffmpeg -i frame%3d.png out.mp4
image.png
image.png

但是這樣生成的視頻,是沒(méi)有聲音的。但是之前的橫屏播放,現(xiàn)在變成了豎屏播放。

  • 3從視頻中提取音頻文件保存為mp3
ffmpeg -i vid.mp4 -f mp3 outaudio.mp3
image.png

但是生成的mp3時(shí)長(zhǎng)超過(guò)了視頻時(shí)長(zhǎng)。

ffmpeg -i vid.mp4 -f mp3 -ar 44100 -ac 2 -ab 192 outaudio2.mp3

指定采樣率44100,通道2立體聲,碼率192kbps

ffmpeg -i xiaguangcheng.mp4 -b:a 128k dest1.mp3   //mp3與原視頻時(shí)長(zhǎng)相等
ffmpeg -i xiaguangcheng.mp4 -f mp3 dest2.mp3   //mp3為原視頻時(shí)長(zhǎng)的兩倍
ffmpeg -i xiaguangcheng.mp4 -f mp3 -ar 44100 -ac 2 -ab 128 xia2.mp3   //mp3為原視頻時(shí)長(zhǎng)的兩倍
ffmpeg -i mothin.mkv -vn -ar 44100 -ac 2 -ab 128 -f mp3 xia3.mp3

  • 4將聲音和無(wú)聲視頻 合并為有聲視頻
ffmpeg -i outaudio2.mp3 -i out.mp4 outav.mp4

經(jīng)過(guò)這樣的一翻轉(zhuǎn)化之后,視頻大小降低了不少


image.png
  • 5視頻封裝格式轉(zhuǎn)換

如果只是封裝格式的簡(jiǎn)單轉(zhuǎn)換,那么直接輸出就可以

ffmpeg -i vid.mp4 vid.mkv

將mkv轉(zhuǎn)碼為mp4

ffmpeg -i vid.mkv -vcodec copy -acodec copy vid1.mp4

-vcodec copy 和 -acodec copy 表示所使用的視頻和音頻編碼格式,為原樣拷貝。

  • 6對(duì)視頻切片操作
ffmpeg -i vid.mp4 -ss 00:00:03 -t 5 vid2.mp4

表示從vid.mp4的第三秒開(kāi)始切割,長(zhǎng)度為5秒,然后將切割出來(lái)的視頻生成vid2.mp4.
這個(gè)操作還可以用來(lái)提供切片文件索引給h5用來(lái)做hls直播源。

ffmpeg -i vid.mp4 -strict -2 -c:v libx264 -c:a aac -f hls test.m3u8

主要把視頻源切成若干個(gè).ts格式的視頻片段然后生成一個(gè).m3u8的切片文件索引提供給html5的video做hls直播源

  • 7加減速視頻
ffmpeg -i vid.mp4 -vf "setpts=0.5*PTS" vid3.mp4

但是發(fā)現(xiàn)這樣的加速只是將視頻畫(huà)面加速了,但是視頻聲音并沒(méi)有加速,因此本來(lái)14秒的視頻,現(xiàn)在7秒就播放玩了,但是還有7秒?yún)s在播放原來(lái)最后7秒的聲音。

ffmpeg -i vid.mp4 -vf "setpts=2.0*PTS" vid4.mp4

這個(gè)是減速視頻

  • 8截取指定視頻時(shí)間圖片
ffmpeg -i vid.mp4 -y -f image2 -t 0.001 -ss 10 -s 1920x1080 haha.png

-f 指定格式
-t 延長(zhǎng)時(shí)間
-ss 開(kāi)始時(shí)間單位為秒
-s 生成圖片規(guī)格

image.png
  • 9 轉(zhuǎn)換為gif
ffmpeg -i vid.mp4 -vframes 5 -y -f gif out5.gif

這里是將視頻的前5幀轉(zhuǎn)換為gif


out5.gif

將視頻轉(zhuǎn)換為gif

ffmpeg -ss 00:00:00.000 -i vid.mp4 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 out6.gif

將輸入的文件從(-ss)設(shè)定的時(shí)間開(kāi)始以10幀頻率,輸出到320x240大小的 gif 中,時(shí)間長(zhǎng)度為-t 設(shè)定的參數(shù)。

out6.gif

也可以直接轉(zhuǎn),未壓縮

ffmpeg -i vid.mp4 vid.gif
  • 10 將圖片和聲音合并為mpeg4編碼方式分辨率為720p的avi文件
ffmpeg -i frame%3d.png -i silian.mp3 -s hd720 -vcodec mpeg4 out7.avi

這里有個(gè)問(wèn)題,為什么我并沒(méi)有設(shè)定合成視頻的幀數(shù),這些圖片還是會(huì)合成之前分離出這些圖片的那個(gè)視頻的時(shí)間長(zhǎng)度?

  • 11 設(shè)置輸出文件幀數(shù)
ffmpeg -i vid.mp4 -r 1 outv1.avi

將vid.mp4 以幀數(shù)為1輸出為outv1.avi。這樣我們?cè)谟^看outv1.avi的時(shí)候,就會(huì)發(fā)現(xiàn)每張圖會(huì)停頓一秒,直至播放結(jié)束。

ffmpeg -r 1 -i vid.mp4 -r 24 outav3.avi

vid.mp4中的每幀圖片都會(huì)在outav3.avi中播放一秒

  • 12 設(shè)置輸出文件編碼率
ffmpeg -i vid.mp4 -b:v 64k -bufsize 64k outav6.mp4

設(shè)置輸出文件編碼率 64 kbit/s

  • 13 添加水印
ffmpeg -i vid.mp4 -i icon.png -filter_complex overlay="(main_w/2)-(overlay_w/2):(main_h/2)-(overlay_h)/2" output222.mp4

在視頻的中間位置添加一個(gè)水印。

image.png
14 縮放視頻
ffmpeg -i test.mp4 -vf scale=-1:480 -acodec aac -vcodec h264 test1.mp4

其中vf參數(shù)用來(lái)指定視頻濾鏡,其中scale表示縮放,后面的數(shù)字表示縮放至-1:480px。寬度和高度只需要指定一個(gè)就可以了,這里指定了寬度為480,高度會(huì)根據(jù)原視頻的比例來(lái)計(jì)算。手機(jī)拍攝的視頻一般都是音頻為aac,視頻為h264編碼。另外音頻還有faac編碼。

15 錄制網(wǎng)絡(luò)視頻
ffmpeg -i https://kangaiweishi.com/test2.mp4 -vcodec copy xiaguangcheng.mp4

可以將視頻從“https://kangaiweishi.com/test2.mp4”這個(gè)網(wǎng)址里面copy下來(lái)。

image.png
16 分離視頻音頻
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an abc.mp4  //分離出來(lái)的abc.mp4是沒(méi)有聲音的
ffmpeg -i xiaguangcheng.mp4 -acodec copy -vn edf.aac  //分離出來(lái)edf.aac的音頻文件,但是播放不了
ffmpeg -i abc.mp4 -i edf.aac -vcodec copy -acodec copy xia.mp4 //這樣播放的話,有畫(huà)面也有聲音
17 視頻解復(fù)用 沒(méi)懂什么意思
ffmpeg -i xiaguangcheng.mp4 -vcodec copy -an -f m4v xia.264
18 視頻轉(zhuǎn)碼
ffmpeg -i xiaguangcheng.mp4 -vcodec h264  -s 352*278 -an -f m4v xia1.264

轉(zhuǎn)碼為碼流原始文件,還是沒(méi)懂

ffmpeg -i xiaguangcheng.mp4 -vcodec h264 -bf 0 -g 25 -s 352*278 -an -f m4v xia2.264  //-bf B幀數(shù)目控制,-g 關(guān)鍵幀間隔控制,-s 分辨率控制

轉(zhuǎn)碼為封裝文件

ffmpeg -i xiaguangcheng.avi -vcodec mpeg4 -vtag xvid -qsame xia_xvid.avi  //這行命令執(zhí)行不通過(guò)
19 ffmpeg 裁剪視頻尺寸

如果視頻為640x360的橫向視頻,我們要一個(gè)尺寸為360x360的正方形視頻,那么我們就可以將橫向視頻進(jìn)行裁剪。

ffmpeg -i xiaguangcheng.mp4 -strict -2 -vf crop=360:360:140:0 xiaxia.mp4
640x360.png
360x360.png

其中crop=width:height:x:y。因?yàn)橹徊眉魧挾?,所以y為0,不用動(dòng),x=(640-360)/2=140;

20 轉(zhuǎn)換視頻格式
ffmpeg -i xiaguangcheng.mp4 -c:v libx264 -crf 30  xia12.avi

-crf是控制轉(zhuǎn)碼后視頻的質(zhì)量,0-51,值越小視頻質(zhì)量越高文件越大。建議值在18-28之間。

附錄基本概念

比特率,就是每秒鐘輸出多少kb的參數(shù)。800Kbps表示沒(méi)秒視頻占用100KB空間大小。

幀數(shù):?jiǎn)挝籪ps,每秒鐘播放的圖片數(shù)。30fps流暢,50fps已經(jīng)行云流水,60fps已經(jīng)滿足絕大多數(shù)要求。在同一視頻同一碼率情況下,幀數(shù)越大,畫(huà)質(zhì)越不好。因?yàn)槊繌埉?huà)面會(huì)分擔(dān)每秒有限的文件體積,如果畫(huà)面越多,那么每張畫(huà)面所能表現(xiàn)的內(nèi)容就越有限。

分辨率和編碼率的關(guān)系:同一碼率,分辨率越高,圖像馬賽克越多。

采樣率:?jiǎn)挝缓掌滺z。音頻文件一般使用的采樣率為44100Hz,這是經(jīng)過(guò)反復(fù)試驗(yàn)之后的結(jié)果。

MPEG格式   它的英文全稱為Moving Picture Expert Group,即運(yùn)動(dòng)圖像專家組格式,家里??吹腣CD、SVCD、DVD就是這種格式。MPEG文件格式是運(yùn)動(dòng)圖像壓縮算法的國(guó)際標(biāo)準(zhǔn),它采用了有損壓縮方法從而減少運(yùn)動(dòng)圖像中的冗余信息。MPEG的壓縮方法說(shuō)的更加深入一點(diǎn)就是保留相鄰兩幅畫(huà)面絕大多數(shù)相同的部分,而把后續(xù)圖像中和前面圖像有冗余的部分去除,從而達(dá)到壓縮的目的。目前MPEG格式有三個(gè)壓縮標(biāo)準(zhǔn),分別是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7與MPEG-21仍處在研發(fā)階段。   MPEG-1:制定于1992年,它是針對(duì)1.5Mbps以下數(shù)據(jù)傳輸率的數(shù)字存儲(chǔ)媒體運(yùn)動(dòng)圖像及其伴音編碼而設(shè)計(jì)的國(guó)際標(biāo)準(zhǔn)。也就是我們通常所見(jiàn)到的VCD制作格式。這種視頻格式的文件擴(kuò)展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盤(pán)中的.dat文件等。   MPEG-2:制定于1994年,設(shè)計(jì)目標(biāo)為高級(jí)工業(yè)標(biāo)準(zhǔn)的圖像質(zhì)量以及更高的傳輸率。這種格式主要應(yīng)用在DVD/SVCD的制作(壓縮)方面,同時(shí)在一些HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當(dāng)?shù)膽?yīng)用。這種視頻格式的文件擴(kuò)展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盤(pán)上的.vob文件等。   MPEG-4:制定于1998年,MPEG-4是為了播放流式媒體的高質(zhì)量視頻而專門(mén)設(shè)計(jì)的,它可利用很窄的帶度,通過(guò)幀重建技術(shù),壓縮和傳輸數(shù)據(jù),以求使用最少的數(shù)據(jù)獲得最佳的圖像質(zhì)量。MPEG-4最有吸引力的地方在于它能夠保存接近于DVD畫(huà)質(zhì)的小體積視頻文件。這種視頻格式的文件擴(kuò)展名包括.asf、.mov和DivX 、AVI等

RTSP協(xié)議支持實(shí)時(shí)播放,而Http協(xié)議則需要緩沖一定時(shí)間才能夠播放。
參考:FFmpeg開(kāi)發(fā)(一)常用處理視頻命令

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 如此強(qiáng)大的FFmpeg,能夠?qū)崿F(xiàn)視頻采集、視頻格式轉(zhuǎn)化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    sillen閱讀 5,477評(píng)論 2 45
  • 前言 如此強(qiáng)大的FFmpeg,能夠?qū)崿F(xiàn)視頻采集、視頻格式轉(zhuǎn)化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    騷之哈塞給閱讀 25,957評(píng)論 6 39
  • 前言 如此強(qiáng)大的FFmpeg,能夠?qū)崿F(xiàn)視頻采集、視頻格式轉(zhuǎn)化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    RichyLeo閱讀 17,668評(píng)論 1 22
  • 寫(xiě)在前面: 今天往移動(dòng)硬盤(pán)上拷電影的時(shí)候忽然遇見(jiàn)文件過(guò)大無(wú)法拷貝的問(wèn)題。因?yàn)橐粋€(gè)移動(dòng)硬盤(pán)如果分區(qū)為NTFS格式,那...
    vincentgemini閱讀 14,633評(píng)論 0 9
  • 0 概述 FFmpeg是一套領(lǐng)先的音視頻多媒體處理開(kāi)源框架,采用LGPL或GPL許可證。它提供了對(duì)音視頻的采集、編...
    但行耕者閱讀 7,218評(píng)論 0 19

友情鏈接更多精彩內(nèi)容