FFmpeg常用命令


前言

FFmpeg一般使用官方打包好的命令行程序, 也可以使用源碼集成到自己的程序中,這種方式要求更高.這篇文章主要收錄命令行下的使用方法

使用方式

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

ffmpeg -i [輸入文件名] [參數選項] -f [格式] [輸出文件]

參數選項:

先總結一下經常使用的參數

-an: 去掉音頻 
-vn: 去掉視頻 
-acodec: 設定音頻的編碼器,未設定時則使用與輸入流相同的編解碼器。音頻解復用在一般后面加copy表示拷貝 
-vcodec: 設定視頻的編碼器,未設定時則使用與輸入流相同的編解碼器,視頻解復用一般后面加copy表示拷貝 
–f: 輸出格式(視頻轉碼)
-bf: B幀數目控制 
-g: 關鍵幀間隔控制(視頻跳轉需要關鍵幀)
-s: 設定畫面的寬和高,分辨率控制(352*278)
-i:  設定輸入流
-ss: 指定開始時間(0:0:05)
-t: 指定持續時間(0:05)
-b: 設定視頻流量,默認是200Kbit/s
-aspect: 設定畫面的比例
-ar: 設定音頻采樣率
-ac: 設定聲音的Channel數
-r: 提取圖像頻率(用於視頻截圖)
-c:v:  輸出視頻格式
-c:a:  輸出音頻格式
-y:  輸出時覆蓋輸出目錄已存在的同名文件

使用方式

不精確裁剪視頻

# -ss 指定從什么時間開始
# -t 指定需要截取多長時間
# -i 指定輸入文件
ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4

精確時間裁剪視頻

  1. 全部幀都轉換為關鍵幀, 將所有的幀的編碼方式轉為幀內編碼
#舊版本
ffmpeg -i output.mp4 -sameq -intra keyoutput.mp4
 
#新版本
ffmpeg -i output.mp4 -strict -2  -qscale 0 -intra keyoutput.mp4

  1. 再開始裁剪視頻
ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4

合並視頻

//截取從頭開始的30s
ffmpeg -ss 00:00:00 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split.mp4
//截取從30s開始的30s
ffmpeg -ss 00:00:30 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split1.mp4
//進行視頻的合並
ffmpeg -f concat -i list.txt -c copy concat.mp4

#list.txt
file ./split.mp4
file ./split1.mp4

往流媒體服務器推流

##有打印
ffmpeg -re -i 1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://ip:port/rtmplive/home
 
ffmpeg -re -stream_loop -1 -loglevel quiet -i 1.flv -vcodec copy -f flv rtmp://ip:port/live/test

修改視頻幀率

// 強制把輸出視頻文件幀率改為 24 fps:-r 幀率
ffmpeg -i input.avi -r 24 output.avi   

壓縮視頻

// 改碼率. 這里的700k可以依照個人要求改. 越大,最后視頻就越清晰.
ffmpeg -i ./map.mp4 -b:v 700k map1.mp4 

MP4 轉 m3u8 hls ts片段

MP4 轉 ts

ffmpeg -i ./水車.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb ./水車.ts

ts 轉 m3u8

// -segment_time 設定 hls 片段時長,這里設定的3s
// sh-%d.ts 是輸出的ts片段的名稱

ffmpeg -i ./水車.ts -c copy -map 0 -f segment -segment_list ./水車.m3u8 -segment_time 3 sh-%d.ts

MP4 直接轉 m3u8

mp4 直接轉 m3u8 比較慢,沒有把 mp4 先轉成 ts,然后再切割 ts效率高

// -hls_time 設定 hls 片段時長,這里設定的 6s
ffmpeg -i ./水車.mp4 -c:v libx264 -hls_time 6 -hls_list_size 0 -c:a aac -strict -2 -f hls ./index.m3u8

合並視頻和音頻

使用的條件是:視頻文件中沒有音頻

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

video.mp4,audio.wav分別是要合並的視頻和音頻,output.mp4是合並后輸出的音視頻文件。

合並視頻和音頻

用audio音頻替換video中的音頻

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4

混合兩個視頻的畫面和音頻

ffmpeg -i video.mp4 -i ./aideo.mp4 -c:v copy -c:a copy output.mp4

參考教程

  1. ffmpeg工具參數中文詳細解釋
  2. 雷霄驊 - [總結]FFMPEG視音頻編解碼零基礎學習方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM