壓縮視頻之前,,我們要了解原視頻的詳細(xì)信息,,利用MediaInfo可以查看視頻的詳細(xì)信息; 也可運行 ffmpeg -i video.mp4 -hide_banner 視頻尺寸:指的就是視頻的分辨率,,常見的分辨率有4096*2304,1920*1080,720*576等,。 視頻編碼:視頻編碼方式就是指通過特定的壓縮技術(shù),,將某個視頻格式的文件轉(zhuǎn)換成另一種視頻格式文件的方式。視頻編碼格式常見到的有:MPEG-2 TS,、Divx,、Xvid、H.264,、WMV-HD和VC-1,。 音頻編碼:音頻編碼方式指通過特定的壓縮技術(shù)對音頻數(shù)據(jù)進行處理的方法。 幀率:幀率(即視頻更新率)是用于測量顯示幀數(shù)的量度,。測量單位為“每秒顯示幀數(shù)”(Frame Per Second,,F(xiàn)PS,幀率)或“赫茲”,,單位用FPS用來描述視頻每秒播放多少幀,,而單位用赫茲用來描述顯示器的畫面每秒更新多少次。 一般幀率越高,,視頻畫面越流暢,。 比特率:指每秒傳送的比特(bit)數(shù),即每秒傳輸?shù)奈募笮?。比特率?guī)定使用“比特每秒”(bit/s 或 bps)為單位,。比特率越高,每秒傳送的數(shù)據(jù)越大,。 采樣率:采樣率的單位是Hz,,表示每秒采樣的次數(shù)。單位時間內(nèi)取樣率越大,,精度就越高,,處理過的視頻文件就越接近沒有處理過的視頻文件。 碼率:碼率就是數(shù)據(jù)傳輸時單位時間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒,。碼率與體積成正比:碼率越大,,體積越大;碼率越小,,體積越小,。由于文件體積與取樣率是成正比的,所以幾乎所有的編碼格式都想用最低的碼率達(dá)到最少的失真,,“碼率”就是失真度,,碼率越高越清晰,反之則畫面粗糙而且馬賽克多,。 視頻部分的位深度:用于指定圖像中的每個像素可以使用的顏色信息數(shù)量,,用“位即bit”為單位。 音頻部分的位深度:單個聲道的采樣數(shù)據(jù)大小 可選視頻編碼方案 1. MP4封裝:H264視頻編碼+AAC音頻編碼(最通用) 2. WebM封裝: VP8視頻編碼+Vorbis音頻編碼(Google為了避開專利開發(fā),,無明顯優(yōu)勢) 3. OGG封裝: Theora視頻編碼 +Vorvis音頻編碼(完全開源的編碼方式,,無專利,,HTML5可用) 音頻轉(zhuǎn)碼 例子 flac轉(zhuǎn)mp3
一般來說音頻影響不大,,重點說視頻壓縮: 壓縮用到的參數(shù): -i 輸入文件的路徑或者url; -s 設(shè)置輸出文件的分辨率,wxh,; -b:v 輸出文件的碼率,,一般500k左右即可,人眼看不到明顯的閃爍,,這個是與視頻大小最直接相關(guān)的,; ffmpeg -i target.m4v -b:v 400k -s 960x540 dst.mp4 將一個叫target.m4v的視頻轉(zhuǎn)換成mp4格式,設(shè)置輸出視頻的分辨率為960x540,,碼率為400k,。 這就是最基本的用法了,這個軟件是非常強大的,,視頻頻也是可以轉(zhuǎn)換,,剪切、截圖的,,音頻也一樣,,而且還可以分離音視頻,。 壓縮完成之后,,視頻大小變?yōu)樵瓉淼?/4,而且還是很清楚,!比市面上成品的壓縮軟件強太多?。?!
如下圖所示,越往左支持的選項越少,,質(zhì)量越低 實時通信領(lǐng)域采用baseline 流媒體領(lǐng)域 使用 main 超清視頻 使用high -level:v 對編碼器配置的限制,,如下表 一般情況下1080P及以下視頻選用4.1即可 -crf Constant Rate Factor 恒定速率因子模式,每一幀的畫面都按照要求的視頻質(zhì)量計算需要的比特數(shù),,畫質(zhì)均衡,,但是無法控制碼率,也無法控制最終生成文件的大小,。 適用于對于畫質(zhì)有要求,,文件大小沒有要求的情況,范圍0-51,,默認(rèn)值就是23,,數(shù)字越小質(zhì)量越高
碼率控制模式 fmmpeg支持3種碼率控制模式 1. 體積最大 一般不使用這種模式,,除非你想無損壓制視頻 無損壓制視頻的例子(快速編碼)
無損壓制視頻的例子(高壓縮比) ffmpeg -i input -vcodec libx264 -preset veryslow -qp 0 output.mkv 嘗試了用這種無損壓縮方式壓縮dvd鏡像中提取的vob文件,發(fā)現(xiàn)這種方式壓制出來的文件體積竟然是原來的兩倍,。所以說還是使用crf 18,,這樣就比較接近無損了。 2. -crf 恒定速率因子模式,,相當(dāng)于浮動值的qp模式,,會給每個畫面不同的量化值,比如說把人眼不敏感的部分碼率調(diào)低。一般壓制視頻使用這個選項,。但是不懂不推薦亂設(shè)置,,讓軟件自動配置即可 值的范圍是0-51,默認(rèn)值是23,,通常認(rèn)為crf值18壓制出來的視頻視覺上是無損的,。18-23之間的變化不明顯。 3. -b 固定目標(biāo)碼率模式,,當(dāng)上傳視頻網(wǎng)站有碼率限制時,,可以使用這個選項。但是不推薦,。crf也可以獲得合適的體積和畫質(zhì),。沒必要 使用上面3個選項壓制,都是單遍編碼,,最好加上-preset veryslow 選項,,這樣軟件對參數(shù)的控制會更精準(zhǔn) 比特率模式 VBR 動態(tài)比特率,ffmpeg默認(rèn)采用,,簡單的內(nèi)容少給碼率,,復(fù)雜內(nèi)容多給碼率。 ABR 平均比特率,,網(wǎng)絡(luò)視頻會采用這一格式,,因為VBR碼率變化太大,不適用網(wǎng)絡(luò)傳輸 CBR 恒定比特率,, 通常沒有人使用 輸入 其余還有-maxrate -minrate 選項,,設(shè)置這兩個選項就能達(dá)到ABR的效果 合并,,提取視頻提取視頻流,假設(shè)我們提取mp4視頻中的視頻流
-an選項是 audio no 也就是忽略音頻 提取音頻
同理 -vn 即忽略音頻 如果提取多個音軌的視頻: 比如我們用ffprobe看到如下 提取第二條 只需加上-map 0:3 合并音視頻
瞬間就能完成合并,因為音頻和視頻都是現(xiàn)成的,,不用重新編碼 -c 就是 -codec的簡寫 截取,、連接音視頻截取音視頻
-ss 設(shè)置起始時間位移 -to 設(shè)置結(jié)束時間位移 也可以使用下面的方式
-t 設(shè)置截取時長 還有-sseof 選項 是以媒體末尾作為起點,可以配合-t截取末尾多少秒 看下面2條命令
調(diào)換-ss和-i的位置對結(jié)果的影響,? -ss在前面會調(diào)用關(guān)鍵幀技術(shù),,可能導(dǎo)致截取的時間并不準(zhǔn)確
我們可以加上 -copyts選項,,作用是保留時間戳,,這樣就能正確截取了。 合并音視頻方法一
當(dāng)合并的幾個視頻參數(shù)一致時,,很快就合并完成了,。 合并不同參數(shù)的視頻,操作會比較麻煩,。 方法二上面的方法其實相當(dāng)于把兩個文件直接拼在一起,,適用于mp2之類的視頻,,如果是flv連接處會有卡頓現(xiàn)象
下面的方法,先在一個txt文本中把要拼接的文件列出來,。
這條命令只要是相同格式的視頻均可以拼接
可以使用開源軟件Avidemux,,圖形化界面,操作方便 截圖,、水印,、動圖截圖
-vframe 指定截取的幀 加水印
制作GIF動圖
錄屏
默認(rèn)錄屏參數(shù)是下面這樣的 清晰度相當(dāng)不錯,,字符都很清楚,但是沒有聲音 -f 格式化 gdigrab 是ffmpeg的一個組件,,用來捕獲視頻,。 在windows系統(tǒng)中,ffmpeg自帶的就是和默認(rèn)使用的gdigrab,,只能錄制屏幕,,不能錄制聲音 直播推薦使用OBS Studio,開源免費,,功能強大 直播推流
作者:泥之天空 鏈接:https://www.jianshu.com/p/fa857f004409 來源:簡書 著作權(quán)歸作者所有,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處,。 詳細(xì)參數(shù): Print help / information / capabilities: -h -- print basic options -h long -- print more options -h full -- print all options (including all format and codec specific options, very long) -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter See man ffmpeg for detailed description of the options. -L show license -h topic show help -? topic show help -help topic show help --help topic show help -version show version -buildconf show build configuration -formats show available formats -muxers show available muxers -demuxers show available demuxers -devices show available devices -codecs show available codecs -decoders show available decoders -encoders show available encoders -bsfs show available bit stream filters -protocols show available protocols -filters show available filters -pix_fmts show available pixel formats -layouts show standard channel layouts -sample_fmts show available audio sample formats -colors show available color names -sources device list sources of the input device -sinks device list sinks of the output device -hwaccels show available HW acceleration methods Global options (affect whole program instead of just one file: -loglevel loglevel set logging level -v loglevel set logging level -report generate a report -max_alloc bytes set maximum size of a single allocated block -y overwrite output files -n never overwrite output files -ignore_unknown Ignore unknown stream types -filter_threads number of non-complex filter threads -filter_complex_threads number of threads for -filter_complex -stats print progress report during encoding -max_error_rate maximum error rate ratio of errors (0.0: no errors, 1.0: 100% e rrors) above which ffmpeg returns an error instead of success. -bits_per_raw_sample number set the number of bits per raw sample -vol volume change audio volume (256=normal) Per-file main options: -f fmt force format -c codec codec name -codec codec codec name -pre preset preset name -map_metadata outfile[,metadata]:infile[,metadata] set metadata information of outfile from infile -t duration record or transcode "duration" seconds of audio/video -to time_stop record or transcode stop time -fs limit_size set the limit file size in bytes -ss time_off set the start time offset -sseof time_off set the start time offset relative to EOF -seek_timestamp enable/disable seeking by timestamp with -ss -timestamp time set the recording timestamp ('now' to set the current time) -metadata string=string add metadata -program title=string:st=number... add program with specified streams -target type specify target file type ("vcd", "svcd", "dvd", "dv" or "dv5 0" with optional prefixes "pal-", "ntsc-" or "film-") -apad audio pad -frames number set the number of frames to output -filter filter_graph set stream filtergraph -filter_script filename read stream filtergraph description from a file -reinit_filter reinit filtergraph on input parameter changes -discard discard -disposition disposition Video options: -vframes number set the number of video frames to output -r rate set frame rate (Hz value, fraction or abbreviation) -s size set frame size (WxH or abbreviation) -aspect aspect set aspect ratio (4:3, 16:9 or 1.3333, 1.7777) -bits_per_raw_sample number set the number of bits per raw sample -vn disable video -vcodec codec force video codec ('copy' to copy stream) -timecode hh:mm:ss[:;.]ff set initial TimeCode value. -pass n select the pass number (1 to 3) -vf filter_graph set video filters -ab bitrate audio bitrate (please use -b:a) -b bitrate video bitrate (please use -b:v) -dn disable data Audio options: -aframes number set the number of audio frames to output -aq quality set audio quality (codec-specific) -ar rate set audio sampling rate (in Hz) -ac channels set number of audio channels -an disable audio -acodec codec force audio codec ('copy' to copy stream) -vol volume change audio volume (256=normal) -af filter_graph set audio filters Subtitle options: -s size set frame size (WxH or abbreviation) -sn disable subtitle -scodec codec force subtitle codec ('copy' to copy stream) -stag fourcc/tag force subtitle tag/fourcc -fix_sub_duration fix subtitles duration -canvas_size size set canvas size (WxH or abbreviation) -spre preset set the subtitle options to the indicated preset ———————————————— 版權(quán)聲明:本文為CSDN博主「SHUIPING_YANG」的原創(chuàng)文章,,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明,。 原文鏈接:https://blog.csdn.net/zhezhebie/java/article/details/79263492 https://segmentfault.com/a/1190000002502526
其實還有-b 1024k這樣的參數(shù),,但是我發(fā)現(xiàn)-crf設(shè)置上后-b就不管用了,。根據(jù)我自己的簡單嘗試,壓制5D2拍攝的一段18秒1920x1080的視頻(下午自然光,、圖像簡單,、大面積白墻、只有一扇黑門)crf和壓出來的文件大小關(guān)系如下: crf 文件大小 16 54M 18 39M 20 25M 22 17M 24 11M 26 7.3M 28 5.0M 30 3.6M 32 2.7M 默認(rèn) 14M(crf為23) 又比較了一下crf在20,、28,、32時的視頻質(zhì)量,,發(fā)現(xiàn)32還是能看出質(zhì)量下降的,,20的確非常精細(xì),,但28跟20之間的差別并不是那么大,crf值設(shè)置在26-28之間比較好,。如果對尺寸有要求,,什么都不設(shè),用默認(rèn)的也行(可能是31),。 另外,,關(guān)于preset,slow和fast只跟運行時間有關(guān),,slow跑的時間比fast長不少,,slow出來的mp4文件會小一些(12M),fast出來的文件會大一些(14M),,但視頻質(zhì)量的差距并不明顯,。 如果把原視頻尺寸從1920x1080縮小到960x540,則視頻尺寸變?yōu)榱耍?/p> crf 文件大小 16 11M 18 6.7M 20 4.4M 22 3.0M 24 2.1M 26 1.6M 28 1.3M 30 1.1M 32 893K 默認(rèn) 2.5M(crf為23) 綜上,,對質(zhì)量要求較高時,,選22以下;對尺寸要求非常高時,,選26(但質(zhì)量確實是會稍差一些),,否則選24的性價比比較高(或者默認(rèn)的23也行),如果對尺寸實在要求非常非常高,,那就28以上吧,。
|
|