程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

ffmpeg 入門_python入門筆記

編輯:Python

大家好,又見面了,我是你們的朋友全棧君。

寫在前面

最近在讀《FFmpeg從入門到精通》這本書,結合著雷神的博客,學習音視頻的知識~ 在學習的過程中,也記錄了一些摘要。因為是邊看邊記的,所以一些要點在看到後面的時候,需要反過來整理前面的。我用有道雲筆記寫的markdown沒法加圖片,所以就先把這部分發了出來。後續會針對內容和排版一步步的優化,如果你被這凌亂的內容辣到了眼睛,請諒解哈哈哈~

2019.06.18

第一章 FFmpeg簡介 第二章 FFmpeg工具使用基礎


簡介

書中開頭用幾個實例操作,讓讀著對FFmpeg的操作有一個直觀的認識。例如以下的幾個方法:

縱向鏡像反轉一半
ffmpeg -i 1.jpg -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip];[main][flip] overlay=0:H/2" 2.jpg

上面操作的含義:將圖片分為main和tmp兩部分,截取tmp的上半部分,反轉,合並時位置在下半部分

原圖

效果圖

ffmpeg -i input.mp4 output.avi -> ffmpeg -i input.mp4 -f avi out.dat

ffmpeg的主要工作流程

1 解封裝 Demuxing 2 解碼 Decoding 3 編碼 Encoding 4 封裝 Muxing

其中需要經過六個步驟

1 讀取輸入源 2 進行音視頻的解封裝 (調用libavformat中的接口實現) 3 解碼每一幀音視頻數據 (調用libavcodec中的接口實現) 3.5 轉換參數 4 編碼每一幀音視頻數據(調用libavcodec中的接口實現) 5 進行音視頻重新封裝(調用libavformat中的接口實現) 6 輸出到目標

除了ffmpeg(提供轉碼、轉封裝等功能),還有ffplay(負責播放相關)和ffprobe(多媒體分析器)

ffprobe -show_streams 1.mp4
ffmpeg常用命令
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
ffmpeg的查詢
ffmpeg -decoders (類似:ffmpeg --encoders)

Decoders: V… = Video A… = Audio S… = Subtitle .F… = Frame-level multithreading …S… = Slice-level multithreading …X… = Codec is experimental …B. = Supports draw_horiz_band …D = Supports direct rendering method 1 V…D 012v Uncompressed 4:2:2 10-bit V…D 4xm 4X Movie V…D 8bps QuickTime 8BPS video V…D aasc Autodesk RLE V…D aic Apple Intermediate Codec V…D alias_pix Alias/Wavefront PIX image V…D amv AMV Video V…D anm Deluxe Paint Animation V…D ansi ASCII/ANSI art VF…D apng APNG (Animated Portable Network Graphics) image

第一列包含6個字段,第一個字段用來表示此編碼器為音頻、視頻還是字幕,第二個字段表示幀級別的多線程支持,第三個字段表示段級別的多線程,第四個字段表示該編碼器為實驗版本,第五個字段表示draw horiz band模式支持,第六個字段表示直接渲染模式支持 第二列是編碼格式 第三列是編碼格式的詳細說明

ffmpeg -filters (濾鏡)

… acrossfade AA->A Cross fade two input audio streams. T… adelay A->A Delay one or more audio channels. … aecho A->A Add echoing to the audio. … aeval A->A Filter audio signal according to a specified expression. T… afade A->A Fade in/out input audio. … aformat A->A Convert the input audio to one of the specified formats. … ainterleave N->A Temporally interleave audio inputs. … allpass A->A Apply a two-pole all-pass filter. … amerge N->A Merge two or more audio streams into a single multi-channel stream. … amix N->A Audio mixing. … anull A->A Pass the source unchanged to the output. T… apad A->A Pad audio with silence. … aperms A->A Set permissions for the output audio frame. … aphaser A->A Add a phasing effect to the audio. … aresample A->A Resample audio data. … areverse A->A Reverse an audio clip. … aselect A->N Select audio frames to pass in output. … asendcmd A->A Send commands to filters. … asetnsamples A->A Set the number of samples for each output audio frames. … asetpts A->A Set PTS for the output audio frame. … asetrate A->A Change the sample rate without altering the data. … asettb A->A Set timebase for the audio output link. … ashowinfo A->A Show textual information for each audio frame. … asplit A->N Pass on the audio input to N audio outputs. … astats A->A Show time domain statistics about audio frames. … astreamsync AA->AA Copy two streams of audio data in a configurable order. … asyncts A->A Sync audio data to timestamps …C atempo A->A Adjust audio tempo. … atrim A->A Pick one continuous section from the input, drop the rest. … azmq A->A Receive commands through ZMQ and broker them to filters. … bandpass A->A Apply a two-pole Butterworth band-pass filter. … bandreject A->A Apply a two-pole Butterworth band-reject filter. … bass A->A Boost or cut lower frequencies. … biquad A->A Apply a biquad IIR filter with the given coefficients. … bs2b A->A Bauer stereo-to-binaural filter. … channelmap A->A Remap audio channels. … channelsplit A->N Split audio into per-channel streams. … chorus A->A Add a chorus effect to the audio. … compand A->A Compress or expand audio dynamic range. T… dcshift A->A Apply a DC shift to the audio. … dynaudnorm A->A Dynamic Audio Normalizer. … earwax A->A Widen the stereo image. … ebur128 A->N EBU R128 scanner. … equalizer A->A Apply two-pole peaking equalization (EQ) filter. … flanger A->A Apply a flanging effect to the audio. … highpass A->A Apply a high-pass filter with 3dB point frequency. … join N->A Join multiple audio streams into multi-channel output. …C ladspa N->A Apply LADSPA effect. … lowpass A->A Apply a low-pass filter with 3dB point frequency. … pan A->A Remix channels with coefficients (panning). … replaygain A->A ReplayGain scanner. … resample A->A Audio resampling and conversion. … sidechaincompress AA->A Sidechain compressor. … silencedetect A->A Detect silence. … silenceremove A->A Remove silence. … treble A->A Boost or cut upper frequencies. T.C volume A->A Change input volume.

(首先請原諒我的弟弟排版,盡力了。。)

第一列總共有三個字段,第一個字段是時間軸支持,第二個字段是分片線程處理支持,第三個字段是命令支持 第二列是濾鏡名 第三列是轉換方式,如音頻轉音頻,視頻轉視頻,創建音頻,創建視頻等 第四列是濾鏡作用說明

查看ffmpeg支持的具體某一種demuxer、muxer類型,可以通過ffmpeg -h查看該類型的詳細參數
ffmpeg -h muxer=flv

Muxer flv [FLV (Flash Video)]: Common extensions: flv. Mime type: video/x-flv. Default video codec: flv1. Default audio codec: mp3.

ffmpeg的封裝轉換 (參數 書P37)
ffmpeg的基本轉碼原理

ffmpeg工具的主要用途為編碼、解碼、轉碼以及媒體格式轉換。

ffmpeg -i 1.mp4 -vcodec mpeg4 -b:v 200k -r 15 -an output2.avi

以上命令中參數含義: 1.轉封裝格式從mp4轉為avi 2.視頻編碼從h264轉換為mpeg4格式 3.視頻碼率從原來的16278 kb/s轉換為200 kb/s 4.視頻幀率從原來的24.15 fps轉換為15 fps 5.轉碼後的文件不包括音頻(-an參數)

ffprobe常用命令

ffmpeg-多媒體處理工具 ffprobe-多媒體查看工具

ffprobe -show_packets 1.mp4
 ffprobe -show_format 1.mp4
ffprobe -show_frames 1.mp4

[FRAME] media_type=video 幀的類型 stream_index=0 幀所在的索引區域 key_frame=1 是否為關鍵幀 pkt_pts=0 Frame包的pts width=1080 幀顯示的寬度 height=2248 幀顯示的高度 pix_fmt=yuv420p 幀的圖像色彩格式 pict_type=I 幀類型 [/FRAME]

ffprobe -show_streams 1.mp4

[STREAM] index=0 流所在的索引區域 codec_name=h264 編碼名 codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 編碼全名 profile=Baseline 編碼的profile codec_type=video 編碼類型 codec_time_base=1/180000 編碼的時間戳計算基礎單位 codec_tag_string=avc1 編碼的標簽數據 coded_width=1088 圖像的寬度 coded_height=2256 has_b_frames=0 包含B幀的信息 pix_fmt=yuv420p 圖像顯示的色彩格式 r_frame_rate=145/6 實際幀率 avg_frame_rate=5000/207 平均幀率 time_base=1/90000 事件基數(用來進行timestamp計算) bit_rate=16278017 碼率 max_bit_rate=N/A 最大碼率 nb_frames=165 幀數 [/STREAM]

ffprobe默認使用key-value的格式輸出,可以通過-of xml(ini,json,csv,flat)來進行相應的格式輸出,例如:

ffprobe -of json -show_streams 1.mp4

-select_streams可以選擇值饞看音頻(a)、視頻(v)、字幕(s)信息

ffprobe -show_frames -select_streams v -of json 1.mp4
ffplay

可以作為播放器,也可以作為很多音視頻數據的圖形化分析工具,通過ffplay可以看到視頻圖像的運動估計方向、音頻數據的波形等

參數:

x 強制設置視頻顯示窗口的寬度 y s 設置視頻顯示的寬高 fs 強制全屏顯示 an 屏蔽音頻 vn 屏蔽視頻 sn 屏蔽字幕 ss 根據設置的秒進行定位拖動 t 設置播放視頻/音頻的長度 bytes 設置定位拖動的策略,0為不可拖動,1為可拖動,-1為自動 nodisp 關閉圖形化顯示窗口 f 強制使用設置的格式進行解析 window_title 設置顯示窗口的標題 af 設置音頻的濾鏡 codec 強制使用設置的codec進行解碼 autorotate 自動旋轉視頻

可視化分析工具

ffplay -showmode 1 1.mp3
ffplay -vismv pf 1.mp4 查看B幀和P幀的預測信息

pf P幀向前運動估計顯示 bf B幀向前運動估計顯示 bb B幀向後運動估計顯示

播放器如何解碼每個宏塊
ffplay -debug vis_mb_type 1.mp4

發布者:全棧程序員棧長,轉載請注明出處:https://javaforall.cn/124911.html原文鏈接:https://javaforall.cn


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved