最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

FFmpeg基礎(chǔ)入門

2023-05-22 21:56 作者:金臺悟道  | 我要投稿


FFMPEG簡介

FFmpeg的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的“FF”代表“Fast Forward”,F(xiàn)Fmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計算機程序。可以輕易地實現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換。

FFmpeg的用戶有Google,F(xiàn)acebook,Youtube,優(yōu)酷,愛奇藝,土豆等。


基礎(chǔ)知識

1.容器/文件(Conainer/File):即特定格式的多媒體文件,比如mp4、flv、mkv等。

2.媒體流(Stream):表示時間軸上的一段連續(xù)數(shù)據(jù),如一段聲音數(shù)據(jù)、一段視頻數(shù)據(jù)或一段字幕數(shù)據(jù),可以是壓縮的,也可以是非壓縮的,壓縮的數(shù)據(jù)需要關(guān)聯(lián)特定的編解碼器。

3.數(shù)據(jù)幀/數(shù)據(jù)包(Frame/Packet):通常,一個媒體流是由大量的數(shù)據(jù)幀組成的,對于壓縮數(shù)據(jù),幀對應(yīng)著編解碼器的最小處理單元,分屬于不同媒體流的數(shù)據(jù)幀交錯存儲于容器之中。

一般情況下:

Frame對應(yīng)壓縮前的數(shù)據(jù),Packet對應(yīng)壓縮后的數(shù)據(jù)。

4.編解碼器(Codec):以幀為單位實現(xiàn)壓縮數(shù)據(jù)和原始數(shù)據(jù)之間的相互轉(zhuǎn)換的

5.復(fù)用(mux):把不同的流按照某種容器的規(guī)則放入容器,這種行為叫做復(fù)用(mux)

6.解復(fù)用(mux):把不同的流從某種容器中解析出來,這種行為叫做解復(fù)用(demux)

7. 碼率和幀率是視頻文件的最重要的基本特征,對于他們的特有設(shè)置會決定視頻質(zhì)量。如果我們知道碼率和時長那么可以很容易計算出輸出文件的大小。

8.幀率:幀率也叫幀頻率,幀率是視頻文件中每一秒的幀數(shù),肉眼想看到連續(xù)移動圖像至少需要15幀。

9.碼率:比特率(也叫碼率,數(shù)據(jù)率)是一個確定整體視頻/音頻質(zhì)量的參數(shù),秒為單位處理的位數(shù),碼率和視頻質(zhì)量成正比,在視頻文件中中比特率用bps來表達。

FFMPEG命令行環(huán)境搭建

1. 到ffmpeg官方下載已經(jīng)編譯好的Windows shared庫;

2. 將執(zhí)行文件ffmpeg.exe ffplay.exe ffprobe.exe拷貝到C:\Windows目錄;

3. 將相應(yīng)的動態(tài)庫拷貝到C:\Windows\SysWOW64目錄;

注:WOW64 (Windows-on-Windows 64-bit)

4. 在命令行窗口輸入ffmpeg -version 查看版本,以卻確定環(huán)境是否搭建成功。

FFMPEG如何查詢命令幫助文檔

ffmpeg/ffplay/ffprobe區(qū)別

ffmpeg:

Hyper fast Audio and Video encoder

超快音視頻編碼器(類似愛剪輯)

ffplay:

Simple media player簡單媒體播放器

ffprobe:

Simple multimedia streams analyzer

簡單多媒體流分析器


所有信息:ffprobe -h

usage:

ffprobe [OPTIONS] [INPUT_FILE]

ffmpeg/ffplay/ffprobe部分參數(shù)通用,部分參數(shù)不通用,在使用時需要注意。

ffmpeg命令查看幫助文檔

ffplay命令查看幫助文檔

所有信息:ffplay -h

usage:

ffplay [options] input_file

ffmpeg音視頻處理流程

ffmpeg命令分類查詢

ffplay播放控制

ffplay命令選項

ffplay命令播放媒體

播放本地文件

ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4

ffplay buweishui.mp3

播放網(wǎng)絡(luò)流

ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc

強制解碼器

mpeg4解碼器:ffplay -vcodec mpeg4 test.mp4

h264解碼器:ffplay -vcodec h264 test.mp4

禁用音頻或視頻

禁用音頻:ffplay test.mp4 -an

禁用視頻:ffplay test.mp4 -vn

播放YUV數(shù)據(jù)

ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv

播放RGB數(shù)據(jù)

ffplay -pixel_format rgb24 -video_size 320x240 -i rgb24_320x240.rgb

ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i rgb24_320x240.rgb

播放PCM數(shù)據(jù)

ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

-ar set audio sampling rate (in Hz) (from 0 to INT_MAX) (default 0)

-ac set number of audio channels (from 0 to INT_MAX) (default 0)

ffplay簡單過濾器

視頻旋轉(zhuǎn)

ffplay -i test.mp4 -vf transpose=1

視頻反轉(zhuǎn)

ffplay test.mp4 -vf hflip

ffplay test.mp4 -vf vflip

視頻旋轉(zhuǎn)和反轉(zhuǎn)

ffplay test.mp4 -vf hflip,transpose=1

音頻變速播放

ffplay -i test.mp4 -af atempo=2

視頻變速播放

ffplay -i test.mp4 -vf setpts=PTS/2

音視頻同時變速

ffplay -i test.mp4 -vf setpts=PTS/2 -af atempo=2

ffmpeg命令參數(shù)說明

ffmpeg命令 提取音視頻數(shù)據(jù)

保留封裝格式

ffmpeg -i test.mp4 -acodec copy -vn audio.mp4

ffmpeg -i test.mp4 -vcodec copy -an video.mp4


提取視頻

保留編碼格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264

強制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test.h264


提取音頻

保留編碼格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac

強制格式:ffmpeg -i test.mp4 -acodec libmp3lame -vn test.mp3

ffmpeg命令提取像素格式和PCM數(shù)據(jù)

ffmpeg命令提取像素格式

提取YUV

提取3秒數(shù)據(jù),分辨率和源視頻一致

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv

提取3秒數(shù)據(jù),分辨率轉(zhuǎn)為320x240

ffmpeg -i test_1280x720.mp4 -t 3 -pix_fmt yuv420p -s 320x240 yuv420p_320x240.yuv

提取RGB

提取3秒數(shù)據(jù),分辨率轉(zhuǎn)為320x240

ffmpeg -i test.mp4 -t 3 -pix_fmt rgb24 -s 320x240 rgb24_320x240.rgb

RGB和YUV之間的轉(zhuǎn)換

ffmpeg -s 320x240 -pix_fmt yuv420p -i yuv420p_320x240.yuv -pix_fmt rgb24 rgb24_320x240_2.rgb

提取PCM

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav

ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm

ffmpeg -i test.mp4 -t 10 -vn -ar 48000 -ac 2 -f f32le 48000_2_f32le_2.pcm

ffmpeg命令轉(zhuǎn)封裝

ffmpeg命令轉(zhuǎn)封裝

保持編碼格式:

ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts

ffmpeg -i test.mp4 -codec copy test_copy2.ts

改變編碼格式:

ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv

修改幀率:

ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (錯誤命令)

ffmpeg -i test.mp4 -r 15 output2.mp4

修改視頻碼率:

ffmpeg -i test.mp4 -b 400k output_b.mkv (此時音頻也被重新編碼)

修改視頻碼率:

ffmpeg -i test.mp4 -b:v 400k output_bv.mkv

修改音頻碼率:

ffmpeg -i test.mp4 -b:a 192k output_ba.mp4

如果不想重新編碼video,需要加上-vcodec copy

修改音視頻碼率:

ffmpeg -i test.mp4 -b:v 400k -b:a 192k output_bva.mp4

修改視頻分辨率:

ffmpeg -i test.mp4 -s 480x270 output_480x270.mp4

修改音頻采樣率:

ffmpeg -i test.mp4 -ar 44100 output_44100hz.mp4

ffmpeg命令過濾器

生成測試文件

找三個不同的視頻每個視頻截取10秒內(nèi)容

ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4

ffmpeg -i 復(fù)仇者聯(lián)盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4

ffmpeg -i 紅海行動.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4

如果音視頻格式不統(tǒng)一則強制統(tǒng)一為 -vcodec libx264 -acodec aac

將上述1.mp4/2.mp4/3.mp4轉(zhuǎn)成ts格式

ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts

ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts

ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

轉(zhuǎn)成flv格式

ffmpeg -i 1.mp4 -codec copy 1.flv

ffmpeg -i 2.mp4 -codec copy 2.flv

ffmpeg -i 3.mp4 -codec copy 3.flv

分離某些封裝格式(例如MP4/FLV/MKV等)中的H.264的時候,需要首先寫入SPS和PPS,否則會導(dǎo)致分離出來的數(shù)據(jù)沒有SPS、PPS而無法播放。H.264碼流的SPS和PPS信息存儲在AVCodecContext結(jié)構(gòu)體的extradata中。需要使用ffmpeg中名稱為“h264_mp4toannexb”的bitstream filter處理

開始拼接文件

以MP4格式進行拼接

方法1:ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4

方法2:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4

以TS格式進行拼接

方法1:ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4

方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4

以FLV格式進行拼接

方法1:ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4

方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

方法1只適用部分封裝格式,比如TS

建議:

(1)使用方法2進行拼接

(2)轉(zhuǎn)成TS格式再進行拼接

測試不同編碼拼接

修改音頻編碼

ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4 結(jié)果第二段沒有聲音

修改音頻采樣率

ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4 第二段播放異常

修改視頻編碼格式

ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4

修改視頻分辨率

ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4

注意:

把每個視頻封裝格式也統(tǒng)一為ts,拼接輸出的時候再輸出你需要的封裝格式,比如MP4

視頻分辨率可以不同,但是編碼格式需要統(tǒng)一

音頻編碼格式需要統(tǒng)一,音頻參數(shù)(采樣率/聲道等)也需要統(tǒng)一

fmpeg命令圖片與視頻互轉(zhuǎn)

截取一張圖片

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.jpg

ffmpeg -i test.mp4 -y -f image2 -ss 00:00:02 -vframes 1 -s 640x360 test.bmp

-i 輸入

-y 覆蓋

-f 格式 image2 一種格式

-ss 起始值

-vframes 幀 如果大于1 那么 輸出加%03d test%03d.jpg

-s 格式大小size

轉(zhuǎn)換視頻為圖片(每幀一張圖):  

ffmpeg -i test.mp4 -t 5 -s 640x360 -r 15 frame%03d.jpg

圖片轉(zhuǎn)換為視頻:  

ffmpeg -f image2 -i frame%03d.jpg -r 25 video.mp4

從視頻中生成GIF圖片

ffmpeg -i test.mp4 -t 5 -r 1 image1.gif

ffmpeg -i test.mp4 -t 5 -r 25 -s 640x360 image2.gif

將 GIF 轉(zhuǎn)化為 視頻

ffmpeg -f gif -i image2.gif image2.mp4






發(fā)布于 2020-03-26 20:45


FFmpeg基礎(chǔ)入門的評論 (共 條)

分享到微博請遵守國家法律
儋州市| 洪泽县| 安多县| 政和县| 龙泉市| 乌审旗| 柘荣县| 赤峰市| 临洮县| 大关县| 泗水县| 望都县| 仁布县| 临颍县| 固安县| 汶川县| 江山市| 都安| 临武县| 乌拉特中旗| 砚山县| 泰州市| 万全县| 石台县| 伊宁县| 仙居县| 来安县| 石泉县| 通州市| 清新县| 凤山市| 将乐县| 洪雅县| 台南市| 滨海县| 江门市| 宣汉县| 泾川县| 吕梁市| 高安市| 黎城县|