FFMPEG常用命令-格式轉換-持續更新中


---恢復內容開始---

ffmpeg是一個強大的工具,在工作中各種格式轉換,編碼,提取視頻中的幀需要用到,記錄下工作中常用的一些ffmpeg命令,持續更新中...

 

將輸入的infile視頻文件通過avc編碼成h264的視頻流

ffmpeg -i infile.mp4 -an -vcodec libx264 -crf 23 outfile.h264

-i  input file     -an   disable audio    -vcodec 指定編碼類型  -crf  采用cf的編碼方式並設定level為23(CRF和QP的區別詳見另一篇博文

 

將輸入的handshake視頻文件轉碼成dest1視頻文件

ffmpeg -i handshake.avi -c:v libx264 -preset slow -qp 37 -c:a copy dest1.mp4

-i input file    -c:v  和-codec:v以及-vcodec是一個意思,設置video的codec方式    

-preset 設置一些編碼參數,有很多level

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium – default preset
  • slow
  • slower
  • veryslow
  • placebo(一般不用)

可以省略,默認是"medium",越慢質量越高

-qp 設置固定的量化參數  -c:a  等同於-acodec和-codec:a 設置audio的codec方式是copy

 

將一個文件夾的所有視頻每隔一定幀數提取出圖片

for %%i in (*.mov) do (
ffmpeg -i %%i -vf "select=not(mod(n\,50))" -vsync vfr  "%%~ni_%%03d.bmp"
)

for %%i in (*.mov) 遍歷文件夾中所有mov為后綴的文件

-i   input video    -vf  等同於-filter:v 具體信息參見ffmpeg官方文檔  select選擇哪些輸入幀會輸出,這邊選擇的是所有整除50的需要輸出  第0,50,100...    -vsync    設置視頻的同步方式  這里的vfr是指傳timestamp,如果兩幀相同的timestamp需要丟掉            最后"%%~ni_%%03d.bmp"是指輸出的bmp的名字是輸入的video的名字后面加上001 002 003等

 

從一個input raw 視頻中抽取出每一幀

ffmpeg -f rawvideo -framerate 25 -s 1280x720 -pixel_format yuv420p -i in.yuv -c copy -f segment -segment_time 0.01 frames%d.yuv

-f 指定輸入的format為rawvideo  -framerate設置幀率    -s 設置輸入視頻的分辨率   -pixel_format設置輸入視頻的格式     -i  輸入的raw視頻   -c 設置輸入到輸出的codec方式,這里為copy,不需要編解碼     -f   指定輸出格式,把輸入的video分成好多個小段,只要后面設置的segment_time(0.01)比一幀的時間短(這里是1/25=0.04),就會把一幀分成一段,然后存入到yuv中

 

---恢復內容結束---

ffmpeg是一個強大的工具,在工作者各種格式轉換,編碼,提取視頻中的幀需要用到,記錄下工作中常用的一些ffmpeg命令,持續更新中...

 

將輸入的infile視頻文件通過avc編碼成h264的視頻流

ffmpeg -i infile.mp4 -an -vcodec libx264 -crf 23 outfile.h264

-i  input file     -an   disable audio    -vcodec 指定編碼類型  -crf  采用cf的編碼方式並設定level為23(CRF和QP的區別詳見另一篇博文

 

將輸入的handshake視頻文件轉碼成dest1視頻文件

ffmpeg -i handshake.avi -c:v libx264 -preset slow -qp 37 -c:a copy dest1.mp4

-i input file    -c:v  和-codec:v以及-vcodec是一個意思,設置video的codec方式    

-preset 設置一些編碼參數,有很多level

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium – default preset
  • slow
  • slower
  • veryslow
  • placebo(一般不用)

可以省略,默認是"medium",越慢質量越高

-qp 設置固定的量化參數  -c:a  等同於-acodec和-codec:a 設置audio的codec方式是copy

 

將一個文件夾的所有視頻每隔一定幀數提取出圖片

for %%i in (*.mov) do (
ffmpeg -i %%i -vf "select=not(mod(n\,50))" -vsync vfr  "%%~ni_%%03d.bmp"
)

for %%i in (*.mov) 遍歷文件夾中所有mov為后綴的文件

-i   input video    -vf  等同於-filter:v 具體信息參見ffmpeg官方文檔  select選擇哪些輸入幀會輸出,這邊選擇的是所有整除50的需要輸出  第0,50,100...    -vsync    設置視頻的同步方式  這里的vfr是指傳timestamp,如果兩幀相同的timestamp需要丟掉            最后"%%~ni_%%03d.bmp"是指輸出的bmp的名字是輸入的video的名字后面加上001 002 003等

 

從一個input raw 視頻中抽取出每一幀

ffmpeg -f rawvideo -framerate 25 -s 1280x720 -pixel_format yuv420p -i in.yuv -c copy -f segment -segment_time 0.01 frames%d.yuv

-f 指定輸入的format為rawvideo  -framerate設置幀率    -s 設置輸入視頻的分辨率   -pixel_format設置輸入視頻的格式     -i  輸入的raw視頻   -c 設置輸入到輸出的codec方式,這里為copy,不需要編解碼     -f   指定輸出格式,把輸入的video分成好多個小段,只要后面設置的segment_time(0.01)比一幀的時間短(這里是1/25=0.04),就會把一幀分成一段,然后存入到yuv中

 

 利用ffmpeg計算ssim/psnr

ffmpeg -s 1920x1080 -i F1.yuv  -s 1920x1080  -i F2.yuv   -lavfi
"ssim="stats_file=stats_ssim.log";[0:v][1:v]"psnr="stats_psnr.log"
-f null -

F1.yuv為需要計算ssim的視頻 F2.yuv為參考視頻 -s設置分辨率  -i設置input視頻ffmpeg-filters.html

-lavfi是跟-filter_complex一個意思,設置濾波器,ffmpeg支持的filter有很多種類型,在下載的ffmpeg的包里面有一個叫做ffmpeg-filters.htm的網頁就是講的支持的各種filter, 詳見 https://ffmpeg.org/ffmpeg-filters.html 

ssim是其中支持的一個filter,在使用ssim的時候,要求輸入的兩個video要有相同的format resolution,而且幀數要一樣

每一幀都會算一個ssim的值 。stats_file是將結果存在指定的文件stats_ssim.log中

[0:v][1:v]指的是第一個視頻的video和第二個視頻的video

 


免責聲明!

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



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