天天看點

FFmpeg學習(二)FFmpeg指令學習一:FFmpeg音視訊處理流程二:FFmpeg指令基本分類

一:FFmpeg音視訊處理流程

案例:

二:FFmpeg指令基本分類

官方網站:https://ffmpeg.org/documentation.html

官方文檔:https://ffmpeg.org/ffmpeg.html

(一)基本資訊查詢指令

詳細見:https://www.jianshu.com/p/a6e711cd3f8d

(二) 錄制指令

1.mac下面的指令

ffmpeg -f avfoundation -i 1 -r 30 out.yuv       #注釋:使用avfoundation以30幀的頻率進行錄屏輸出為out.yuv檔案      
-f : 指定使用avfoundation采集資料,設定輸出裝置
-i :指定從哪采集資料,它是一個檔案索引号,在MAC上,1代表桌面
-r : 指定幀率      

錄制音頻:https://www.jianshu.com/p/e63c063987b6

2.其他裝置下:https://blog.csdn.net/shaosunrise/article/details/81068080

3.基于2中測試linux使用指令

(1)檢視裝置

ffmpeg -devices -hide_banner        

注:-hide_banner 所有FFmpeg工具通常都會顯示版權聲明、建構選項和庫版本(如下圖所示)。此選項可用于禁止列印此資訊。

(2)錄制視訊(使用裝置中x11grab)

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4      

上面的參數,指的是從螢幕的左上角(x=100, y=200)的位置,錄制分辨率為1024×768的視訊。

-i :0.0+100,200 其中:0.0是X11服務的顯示螢幕号,與DISPLAY環境變量相同:

DISPLAY=:0.0
在Linux/Unix類作業系統上, DISPLAY用來設定将圖形顯示到何處. 
直接登陸圖形界面或者登陸指令行界面後使用startx啟動圖形, DISPLAY環境變量将自動設定為:0.0, 此時可以打開終端, 輸出圖形程式的名稱(比如xclock)來啟動程式, 圖形将顯示在本地視窗上, 在終端上輸入printenv檢視目前環境變量, 輸出結果中有如下内容:
DISPLAY 環境變量格式如下host:NumA.NumB,
host:指Xserver所在的主機主機名或者ip位址, 圖形将顯示在這一機器上, 可以是啟動了圖形界面的Linux/Unix機器, 也可以是安裝了Exceed, X-Deep/32等Windows平台運作的Xserver的Windows機器. 
    如果Host為空, 則表示Xserver運作于本機, 并且圖形程式(Xclient)使用unix socket方式連接配接到Xserver,而不是TCP方式. 
使用TCP方式連接配接時, NumA為連接配接的端口減去6000的值, 如果NumA為0, 則表示連接配接到6000端口; 使用unix socket方式連接配接時則表示連接配接的unix socket的路徑, 如果為0, 則表示連接配接到/tmp/.X11-unix/X0 . 
NumB則幾乎總是0.      

100是抓取時的x偏移量,200是y偏移量。

ffplay v-out.mp4   #讀取視訊      

(3)基于(2)使用ALSA同時錄制聲音:https://blog.csdn.net/rong11417/article/details/102880549

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv      

ALSA (Advanced Linux Sound Architecture)裝置(這裡作為輸入裝置)。

要在配置過程中啟用這個輸入裝置,您需要在系統上安裝libasound。該裝置允許從ALSA裝置(裝置存在)捕獲。要捕獲的裝置名稱必須是ALSA(card identifier)卡辨別符。ALSA辨別符具有文法:

hw:CARD[,DEV[,SUBDEV]]     #其中DEV和SUBDEV元件是可選的。這三個參數(順序:CARD、DEV、SUBDEV)指定卡号或辨別符、裝置号和子裝置号(-1表示任意)。      

要檢視系統目前識别的cards清單,請檢查檔案/proc/asound/cards和/proc/asound/devices.

或者使用以下指令顯示詳細資訊:

aplay -l
arecord -l      

例如,要使用ffmpeg從卡id為0的ALSA裝置捕獲,可以運作指令:

ffmpeg -f alsa -i hw:0 alsaout.wav      
-ac[:stream_specifier] channels (input/output,per-stream)      

設定音頻通道數。對于輸出流,預設設定為輸入音頻通道的數量。對于輸入流,此選項僅對音頻抓取裝置和原始demuxers有意義,并映射到相應的demuxer選項。

(三)分解與複用 

1.檔案格式轉換

ffmpeg -i gfxm.mp4 -vcodec copy -acodec copy out.flv   #音視訊編碼處理方式都是copy,不改變      
ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
  Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Output #0, flv, to 'out.flv':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.74.100
  Stream #0:0(und): Video: h264 (High) ([7][0][0][0] / 0x0007), yuv420p, 864x486 [SAR 1:1 DAR 16:9], q=2-31, 679 kb/s, 25 fps, 25 tbr, 1k tbn, 12800 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz, stereo, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=    0 fps=0.0 q=-1.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=  frame= 3024 fps=0.0 q=-1.0 Lsize=   11128kB time=00:02:01.06 bitrate= 753.0kbits/s speed=3.03e+03x    
video:10028kB audio:954kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.330767%      

轉換時産生的參數

ffplay out.flv      
ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, flv, from 'out.flv':=    0KB vq=    0KB sq=    0B f=0/0   
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.74.100
  Duration: 00:02:01.17, start: 0.057000, bitrate: 752 kb/s
  Stream #0:0: Video: h264 (High), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
  Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 64 kb/s
  11.07 A-V:  0.036 fd=   0 aq=   10KB vq=   18KB sq=    0B f=0/0       

播放時産生參數

2.抽取視訊

ffmpeg -i input_file -vcodec copy -an output_file_video     #-an表示不需要音頻資料

ffmpeg -i gfxm.mp4 -vcodec copy -an out.h264  #注意:字尾需要對應視訊/音頻編碼      
ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, h264, from 'out.h264':   0KB vq=    0KB sq=    0B f=0/0   
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: h264 (High), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 1200k tbn, 50 tbc
    nan M-V:    nan fd=   1 aq=    0KB vq=   64KB sq=    0B f=0/0      

ffplay out.h264

3.抽取音頻

ffmpeg -i input_file -vcodec copy -vn output_file_audio     #-vn表示不需要視訊資料

ffmpeg -i gfxm.mp4 -acodec copy -vn out.aac   #注意:字尾需要對應視訊/音頻編碼      
ffplay version N-101559-ga1cd419 Copyright (c) 2003-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
[aac @ 0x7fbf5c0009c0] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'out.aac':
  Duration: 00:03:02.33, bitrate: 44 kb/s
  Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 44 kb/s
   5.99 M-A:  0.000 fd=   0 aq=    8KB vq=    0KB sq=    0B f=0/0       

ffplay out.aac

(四)處理原始資料指令

補充:音視訊開發基礎概述 - PCM、YUV、H264、常用軟體介紹

1.提取YUV資料(對于視訊的裸資料而言,用得更多的是 YUV 資料格式,其中 “Y” 表示明亮度(Luminance 或 Luma),即灰階值;而 “U” 和 “V” 表示的則是色度(Chrominance 或 Chroma),作用是描述影像色彩及飽和度,指定像素的顔色。)

-c:v 表示對v(視訊)進行c(編碼)

-pix_fmt 指定了視訊的像素格式

ffmpeg -i gfxm.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv   #注意:-pix_fmt是指定輸出的資料編碼(可以與原來的視訊編碼不一緻,但是會出現視訊亂碼等系列問題)      
ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
  Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press [q] to stop, [?] for help
Output #0, rawvideo, to 'out.yuv':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.74.100
  Stream #0:0(und): Video: rawvideo (I420 / 0x30323449), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 125971 kb/s, 25 fps, 25 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.132.100 rawvideo
frame=    1 fps=0.0 q=-0.0 size=     512kB time=00:00:00.04 bitrate=104857.6kbitframe=  763 fps=0.0 q=-0.0 size=  469248kB time=00:00:30.52 bitrate=125952.8kbitframe= 1213 fps=1194 q=-0.0 size=  745984kB time=00:00:48.52 bitrate=125950.1kbiframe= 1484 fps=974 q=-0.0 size=  912640kB time=00:00:59.36 bitrate=125949.2kbitframe= 1643 fps=812 q=-0.0 size= 1010432kB time=00:01:05.72 bitrate=125950.4kbitframe= 1761 fps=503 q=-0.0 size= 1083136kB time=00:01:10.44 bitrate=125966.1kbitframe= 2018 fps=504 q=-0.0 size= 1241088kB time=00:01:20.72 bitrate=125953.8kbitframe= 2183 fps=483 q=-0.0 size= 1342720kB time=00:01:27.32 bitrate=125968.4kbitframe= 2313 fps=461 q=-0.0 size= 1422592kB time=00:01:32.52 bitrate=125960.6kbitframe= 2435 fps=441 q=-0.0 size= 1497600kB time=00:01:37.40 bitrate=125958.3kbitframe= 2554 fps=424 q=-0.0 size= 1570816kB time=00:01:42.16 bitrate=125960.5kbitframe= 2680 fps=411 q=-0.0 size= 1648384kB time=00:01:47.20 bitrate=125966.1kbitframe= 2807 fps=399 q=-0.0 size= 1726464kB time=00:01:52.28 bitrate=125963.6kbitframe= 2935 fps=390 q=-0.0 size= 1805056kB time=00:01:57.40 bitrate=125954.2kbitframe= 3024 fps=384 q=-0.0 Lsize= 1860044kB time=00:02:00.96 bitrate=125971.2kbits/s speed=15.4x    
video:1860044kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%      

提取産生參數

由于資料被變為原始資料,是以播放時要指定像素大小,否則出現以下問題:

ffplay out.yuv -s 864x486    #大小通過提取原始資料時産生的參數擷取(在input中)      

2.提取PCM資料(通常音頻的裸資料格式為脈沖編碼調制(Pulse-code modulation,PCM)資料)

ffmpeg -i gfxm.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm   #-ar 采樣率  -ac 雙聲道  -f PCM資料存儲格式 s有符号 16位 le小端存儲      
ffmpeg version N-101559-ga1cd419 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609
  configuration: --enable-shared --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264 --enable-libx265 --enable-debug --disable-optimizations --enable-pthreads --enable-shared
  libavutil      56. 68.100 / 56. 68.100
  libavcodec     58.132.100 / 58.132.100
  libavformat    58. 74.100 / 58. 74.100
  libavdevice    58. 12.100 / 58. 12.100
  libavfilter     7.109.100 /  7.109.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
  Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:1 -> #0:0 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
Output #0, s16le, to 'out.pcm':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.74.100
  Stream #0:0(und): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.132.100 pcm_s16le
size=   20860kB time=00:02:01.06 bitrate=1411.5kbits/s speed= 623x    
video:0kB audio:20860kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%      

提取PCM産生的資料

注意:對于PCM播放時,我們要制定ar,ac,f參數

ffplay out.pcm -ac 44100 -ac 2 -f s16le      

(五)濾鏡指令

主要的濾鏡操作:畫中畫 視訊的裁剪 音頻倍速 水印的添加和删除

1.擷取音視訊檔案--->進行解封裝(擷取音頻和視訊資料)--->獲得編碼過的資料包--->對資料進行解壓縮--->擷取解碼後的資料
2.擷取解碼後的資料--->對資料進行過濾--->對資料進行重新編碼
3.擷取編碼後的資料---->進行音視訊混合封裝--->輸出      
ffmpeg -i gfxm.mp4 -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4      
-i  指定多媒體檔案
-vf  使用視訊濾鏡
crop 對視訊進行裁剪操作
in_w  輸入的視訊寬度
in_h  輸入的視訊高度
-c:v  對視訊進行編碼 格式為libx264(視訊編碼器)
-c:a  對音頻進行編碼 格式為copy,直接拷貝,不做多處理      

注意:crop的參數格式為w:h:x:y, w、h為輸出視訊的寬和高, x、y标記輸入視訊中的某點,将該點作為基準點,向右下進行裁剪得到輸出視訊。 如果x y不寫的話,預設居中剪切

(六)音視訊裁剪

ffmpeg -i gfxm.mp4 -ss 00:01:00 -t 10 out.ts      
-ss 視訊的開始時間 00:00:00 時:分:秒
-t 時間長度 機關s      
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'gfxm.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Multimedia Cloud Transcode (cloud.baidu.com)
  Duration: 00:02:01.11, start: 0.000000, bitrate: 746 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 864x486 [SAR 1:1 DAR 16:9], 679 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 64 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> mpeg2video (native))
  Stream #0:1 -> #0:1 (aac (native) -> mp2 (native))
Press [q] to stop, [?] for help
Output #0, mpegts, to 'out.ts':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.74.100
  Stream #0:0(und): Video: mpeg2video (Main), yuv420p(progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.132.100 mpeg2video
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: mp2, 44100 Hz, stereo, s16, 384 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.132.100 mp2
frame=    1 fps=0.0 q=0.0 size=       0kB time=00:00:00.35 bitrate=   0.0kbits/sframe=  250 fps=172 q=31.0 Lsize=    1255kB time=00:00:09.96 bitrate=1031.3kbits/s speed=6.85x    
video:684kB audio:469kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 8.798692%      

裁剪指令産生的資料

-f contat 告訴ffmpeg對後面的檔案拼接
-i inputs.txt 參數是檔案(檔案内部是要合并的音視訊檔案)      

注意:需要檔案片段為.ts檔案,否則不被允許合并(認為不安全)

ffmpeg -f concat -i input.txt out2.flv      

(七)圖檔/視訊互轉指令

ffmpeg -i out.ts -r 1 -f image2 image-%3d.jpeg      
-i 指定要輸入的多媒體檔案
-r 指定轉換圖檔的頻率 1 每秒轉出1張圖檔
-f 指定要轉出的圖檔格式 image2
image-%3d.jpeg 指定每次輸出的圖檔名稱      
Input #0, mpegts, from 'out.ts':
  Duration: 00:00:10.01, start: 1.429089, bitrate: 1026 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
  Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, progressive), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 49152 vbv_delay: N/A
  Stream #0:1[0x101](und): Audio: mp2 ([3][0][0][0] / 0x0003), 44100 Hz, stereo, fltp, 384 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x2233d00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'image-%3d.jpeg':
  Metadata:
    encoder         : Lavf58.74.100
  Stream #0:0: Video: mjpeg, yuvj420p(pc, progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 1 fps, 1 tbn
    Metadata:
      encoder         : Lavc58.132.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=    9 fps=0.0 q=1.6 size=N/A time=00:00:09.00 bitrate=N/A dup=0 drop=180 sframe=   12 fps=0.0 q=1.6 Lsize=N/A time=00:00:12.00 bitrate=N/A dup=0 drop=238 speed=18.2x    
video:374kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown      

轉換時産生的參數

ffmpeg -i image-%3d.jpeg out5.mp4   #可以通過-r指定每秒放的幀數      
Input #0, image2, from 'image-%3d.jpeg':
  Duration: 00:00:00.48, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 864x486 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x150ab40] using SAR=1/1
[libx264 @ 0x150ab40] using cpu capabilities: none!
[libx264 @ 0x150ab40] profile High, level 3.1, 4:2:0, 8-bit
[libx264 @ 0x150ab40] 264 - core 161 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'out5.mp4':
  Metadata:
    encoder         : Lavf58.74.100
  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuvj420p(pc, bt470bg/unknown/unknown, progressive), 864x486 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc58.132.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=    1 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A speed=N/Aframe=   12 fps=0.0 q=-1.0 Lsize=     136kB time=00:00:00.36 bitrate=3088.8kbits/s speed=0.488x    
video:135kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.725236%
[libx264 @ 0x150ab40] frame I:1     Avg QP:22.28  size: 15313
[libx264 @ 0x150ab40] frame P:8     Avg QP:24.22  size: 12224
[libx264 @ 0x150ab40] frame B:3     Avg QP:25.58  size:  8081
[libx264 @ 0x150ab40] consecutive B-frames: 50.0% 50.0%  0.0%  0.0%
[libx264 @ 0x150ab40] mb I  I16..4: 42.0% 53.4%  4.6%
[libx264 @ 0x150ab40] mb P  I16..4: 27.2% 43.4%  3.9%  P16..4:  3.6%  0.8%  0.3%  0.0%  0.0%    skip:20.9%
[libx264 @ 0x150ab40] mb B  I16..4:  6.0% 15.0%  2.1%  B16..8: 17.2%  5.9%  1.5%  direct: 5.7%  skip:46.5%  L0:44.3% L1:52.4% BI: 3.3%
[libx264 @ 0x150ab40] 8x8 transform intra:58.2% inter:84.8%
[libx264 @ 0x150ab40] coded y,uvDC,uvAC intra: 49.6% 74.3% 16.7% inter: 12.2% 17.9% 2.3%
[libx264 @ 0x150ab40] i16 v,h,dc,p: 36% 44% 17%  3%
[libx264 @ 0x150ab40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 22% 37%  4%  3%  3%  4%  4%  6%
[libx264 @ 0x150ab40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 29% 17%  5%  6%  6%  7%  5%  4%
[libx264 @ 0x150ab40] i8c dc,h,v,p: 35% 35% 25%  5%
[libx264 @ 0x150ab40] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x150ab40] ref P L0: 52.1% 14.7% 22.6% 10.6%
[libx264 @ 0x150ab40] ref B L0: 89.2% 10.8%
[libx264 @ 0x150ab40] kb/s:2289.13      

轉換時産生的參數

(八)直播相關指令

直播推流:
-re 這個選項會将輸入的讀取速度降低到輸入的本地幀速率(即原本是音視訊同步)。它對于實時輸出(例如直播流)很有用。
-i 指定要推流出去的資料
-c 指定編碼方式(注意:是同時對音視訊處理)
-f 要推出的檔案格式
rtmp://.... 是伺服器位址 其他用戶端從伺服器中拉流

直播拉流:
-i 指定rtmp伺服器位址
-c 音視訊編碼方式
儲存為dump.flv      

最全最常用的RTMP、RTSP、HTTP協定流常用直播流位址

測試拉流:

CCTV1高清:http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8

ffplay http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8      
ffmpeg -i http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8 -c copy dump.flv   #拉流一段時間使用ctrl+C停止   ---  最好檔案格式一緻dump.m3u8      
ffplay dump.flv      

(一)常見問題---推流失敗

主要原因是時間戳問題!!!

在ffmpeg内部是按照最快的優先級,将音頻與視訊分開,用最快的方式擷取!導緻原本同步的音視訊随着FFmpeg内部機制的改變,導緻音視訊不同步。導緻出現上面的問題(比如本來應該播放音頻時,無法找到對應的音頻)

解決方法:

-re 這個選項會将輸入的讀取速度降低到輸入的本地幀速率(即是按照音視訊同步的速率播放)。它對于實時輸出(例如直播流)很有用。      

(二)常見問題---清晰度不高(推流)

-f flv會将MP4音頻和視訊重新進行編碼,進行重新編碼時可能造成損失!!!造成視訊品質降低      

解決方法:要麼避免不同格式的轉換,要麼使用下面方案!!

-c copy 告訴我們從一個多媒體檔案中讀取音頻和視訊時,不要進行視訊重新編碼,此時流媒體伺服器還是擷取原來的資料,是以播放的時候還是原來的音頻和視訊!!      

清晰度會高,但是丢包不會避免!!