ffmpeg 視頻處理常用命令

ffmpeg命令的一般結構如下,需要注意的是全局選項影響所有輸入和輸出:

    常用命令選項

    -y 覆蓋視頻

    -n 不覆蓋視頻

    -i 輸入

    -t 時間

    -vf 音頻濾鏡

    -af 視頻濾鏡

    -r 指定幀率(幀速率是編碼成視頻文件的每秒幀數)

    -f 指定格式

 

1.視頻格式轉換

    ffmpeg -i video.flv video.mp4

    指定編碼器轉換格式

    ffmpeg -i video.flv -c:v libx264 -c:a libfaac video.mp4

2.音視頻的提取和合並

    從視頻中提取aac

    ffmpeg -i video.mp4 -vn -acodec copy output.aac

    從視頻中提取h264

    ffmpeg -i video.mp4 -vcodec copy -an output.h264

    提取視頻

    ffmpeg -i test.mp4 -vcodec copy -an test2.mp4(使用流拷貝速度很快)

    ffmpeg -i test.mp4 -an test2.mp4(效果同上,但是需要編碼解碼速度比較慢)

    -an  禁用音頻

    -vcodec copy  拷貝視頻流

    提取音頻爲mp3

    ffmpeg -i test.mp4 -vn -acodec copy testaac

     ffmpeg -i test.mp4 -vn test.mp3

    -vn  禁用視頻流

    關掉視頻原聲與mp3音樂合成新的視頻

    ffmpeg -i scenery.mp4 -i music.mp3 -map 0:v -vcodec copy -map 1:a -acodec copy video_music.mp4

3.截取視頻

    截取視頻的 5-25秒

    -ss 開始時間

    -t截取時間

    ffmpeg -i test.mp4 -ss 5 -t 20 t.mp4

4.視頻分片

    把視頻切爲每10秒一段

    ffmpeg -i test.mp4 -c copy -map 0 -f segment -segment_time 10 video/part-%d.mp4

5.調整視頻分辨率

    1.通過 –s改變視頻寬高

    ffmpeg -i video3.mp4 -s 320*240 s.mp4

    2.通過scale濾鏡進行縮放

    ffmpeg -i video3.mp4  -vf scale=320:240 scale.mp4

6.視頻裁剪

    Crop = w:h:x:y 寬度:高度:x:y(x,y如果不寫則從中心裁剪)

    ffmpeg -i video.mp4 -vf crop=iw/2:ih:0:0 crop.mp4

7.視頻填充

    填充視頻意味着向視頻幀添加額外的區域以包含額外的內容。當輸入應在具有不同寬高比的顯示器上播放時, 通常需要填充視頻

    ffmpeg -i test.jpg -vf pad=2*iw:2*ih:30:30 framed_photo.jpg

8.視頻與圖片的轉換

    視頻轉爲圖片

    img2爲圖片的存儲目錄,img-%3d.jpg命名規則

    -r幀率 -f格式

    ffmpeg -i scenery.mp4 -r 2 -f image2 img2/img-%3d.jpg

    將圖片轉換爲視頻

    ffmpeg -f image2 -i img/img2%4d.jpg -r 25 video_img.mp4

   視頻生成GIFffmpeg -i video.mp4 -pix_fmt rgb24 video.gif

    定時截圖

    ffmpeg -i video.mp4 -ss 00:00:7.43 -vframes 1 out.png

    每秒生成一個張圖片

    ffmpeg -i scenery.mp4 -vf fps=1 out%03d.png

    每分鐘生成一張圖片

    ffmpeg -i scenery.mp4 -vf fps=1/60 out%03d.png

    每個I幀生成一張圖片

    ffmpeg -i scenery.mp4 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png

9.水印處理 添加水印一般使用 overlay

    文字水印

    x:離左上角的橫座標

    y: 離左上角的縱座標

    x=0:y=0  左上角

    x=0:y=h-th 左下角

    x=w-tw:y=0 右上角

    x=w-tw:y=h-th 右下角

    生成滾動文字例子

    ffmpeg -y -i video.mp4  -vf      drawtext=“fontfile=fonts/Medium.ttf:text=‘hello’:x=90+t*20:y=55:fontcolor=#ffffff:fontsize=25” drawtext.mp4

    橫向滾動 x+t*n   從左往右滾動,n越大滾動越快

    x-t*n    從右邊到左邊滾動

    垂直滾動 y+t*n

    在視頻右上角添加一個gif圖片

    http://ffmpeg.org/ffmpeg-all.html#toc-gif-1

    //-ignore_loop 0 使gif循環播放

    //=shortest=1使視頻結束播放

    ffmpeg -i tc.mp4 -ignore_loop 0  -i cat.gif -filter_complex "overlay=x=W-w:y=0:shortest=1”  test.mp4

    跑馬燈效果

    分析:如果時間大於0,那麼就開始從子內容的寬度的x-w位置開始,然後每一幀n計數,幀數n除以(背景W+子內容背景w)求餘數+1設置為x坐標,即可循環

    ffmpeg -i video2.mp4 -i logo.png -filter_complex "[1:v]scale=50*50[logo];[0:v]scale=200*200[bg];[bg][logo]overlay=x='if(gte(t,0),-w+(mod(n,W+w))+5,NAN)':y=0” output.mp4

    //問題,調節不了水印移動速度

    添加彈幕效果

    在視頻中同時加入多個文字和多個圖片,使用到多個濾鏡就需要使用濾鏡鏈,而指定輸入輸出標籤就形成濾鏡鏈圖

    ffmpeg -i video.mp4 -i logo.png -i logo1.png -filter_complex  "[1:v]scale=30:30[img1];[2:v]scale=30:30[img2];[0:v][img1]overlay=(main_w-overlay_w)/2+t*100:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0",drawtext="fontfile=fonts/Medium.ttf:text='hello':fontcolor=white:fontsize=50:x='if(between(t,2,10),150,NAN)':y=120" -y output.mp4

    解析:

    1.[0:v]指定流 ,0表示第0個文件,v表示操作對象裏的視頻信息。

    2.[img1]是對scale濾鏡的處理結果命名標記標籤,[0:v][img1]表示將scale縮略處理後的圖片覆蓋到第0個文件即視頻上,類似這個包含鏈接輸入輸出標記如[img1]的就組成濾鏡鏈圖filtergraphs

    3.由於使用overlay添加圖片水印,使用drawtext添加文字水印,這個兩個濾鏡間使用逗號,分割開來,組成一個濾鏡鏈

    4.overlay中t*100,表示從x軸以100的速度移動

    5.x='if(between(t,2,10),150,NAN)’表示在2,10秒的區間顯示字幕。if(條件,條件爲true時的值,條件爲false時的值)

11.視頻圖片的旋轉

    把圖片旋轉45度放到視頻中心

     ffmpeg -i scenery.mp4 -i logo.png  -filter_complex "[1:v]rotate='45*PI/180:ow=hypot(iw,ih):oh=ow:c=none'[rotate];[0:v][rotate]overlay=(W-w)/2:(H-h)/2" rotate.mp4 -y

    解析

    c=none這樣就不會出現黑色背景

    ow=hypot(iw,ih):hypot(x, y) 計算斜邊(直角三角形最長邊)等效於sqrt(xx + yy),如果不設置ow,oh則旋轉之後溢出邊框部分之間被裁剪掉了

    在旋轉角度中加入t參數即可實現隨着時間而旋轉  rotate='2*PI*t

    ffmpeg -i scenery.mp4 -filter_complex  "rotate='2*PI*t:ow=min(iw,ih)/sqrt(2):oh=ow:c=none’” test.mp4

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章