Django入門之開發(fā)環(huán)境搭建1.1
2553
2025-04-01
本篇博客要落地的場景是使用 python + ffmpeg 實現(xiàn)將 mp4 文件轉(zhuǎn)換為 m3u8 格式視頻。
為了更好的結(jié)合二者,我們先學(xué)習(xí)一下 ffmpeg 如何使用。
ffmpeg
打開其下載頁面進行下載,下載按鈕選擇 windows builds from gyan.dev ,在新打開的頁面中,在參考下述鏈接。
解壓下載文件,將 bin 目錄配置到環(huán)境變量中,例如橡皮擦本地的地址為:
F:\ffmpeg_full\bin
然后在控制臺中運行如下命令,查看是否配置成功。
C:\Users\Administrator>ffmpeg -version ffmpeg version 2022-01-03-git-68d0a7e446-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
運用 ffmpeg
先看一下 ffmpeg 相關(guān)參數(shù)信息:
ffmpeg 1 2 -i 3 4 5
全局參數(shù);
輸入文件參數(shù);
輸入文件;
輸出文件參數(shù);
輸出文件。
常用命令行參數(shù),這些內(nèi)容還是參考雷神的文檔最佳。
最簡單的轉(zhuǎn)換
ffmpeg -i input.avi output.mp4
如果解析過程中出現(xiàn)如下BUG,一般情況下是視頻本身的問題。
[h264 @ 0x58c8900] Error splitting the input into NAL units.
截取視頻的前5s(通過代碼邏輯,也可以截取視頻前10%)
ffmpeg -ss 00:00:15 -t 00:00:05 -i 輸入視頻.mp4 -vcodec copy -acodec copy 輸出視頻.mp4
-ss:開始切割時間;
-t:結(jié)束切割時間;
-vcodec copy:強制使用 codec 編解碼方式,如果用copy表示原始編解碼數(shù)據(jù)必須被拷貝(轉(zhuǎn)雷神描述),可以簡寫為 -c:v copy;
-acodec copy:同上,可以簡寫為 -c:a copy
如果單純的想要查看視頻信息,使用如下命令即可
ffmpeg -i 輸入視頻.mp4
視頻文件直接屬性可查看相關(guān)參數(shù)。
數(shù)據(jù)速率就是視頻碼率;
總比特率是視頻碼率加上音頻碼率;
降低碼率
使用如下命令可以降低碼率,間接的降低文件大小。
ffmpeg -i 輸入文件.mp4 -b:v 500k -bufsize 500k 輸出文件.mp4
碼率的計算參考下述公式
bitrate(碼率) = file_size(文件大小) / duration(時長),單位是 `kb/s`
例如一個 100M的文件,時長為10分鐘,那么碼率是
biterate = 100Mbit/600s = 100*1024*1024*8bit/600s ≈ 1390kbps
音頻的碼率一般是 128kbps ,上述值包含音頻的碼率,減去 128 之后就是視頻的總碼率了
上述命令中參數(shù)相關(guān)含義是:
-b:v:控制平均碼率;
-bufsize:用于設(shè)置碼率控制緩沖器的大小,減少波動。
修改視頻分辨率
將輸入的 1920x1080 縮小到 960x540 輸出
ffmpeg -i 輸入視頻.mp4 -vf scale=960:540 輸出視頻.mp4
如果 540 不寫,寫成 -1 ,即 scale=960:-1 ,ffmpeg會保持原始的寬高比。
截取視頻圖像
ffmpeg -i 輸入視頻.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-r:每間隔幾秒抓取一幀;
-q:v:存儲jpeg的圖像質(zhì)量,2是高質(zhì)量
也可以依據(jù)時間進行截取
ffmpeg -i 輸入視頻.mp4 -ss 00:00:00 -t 1 -r 1 -q:v 2 -f image2 pic-%03d.jpeg
-ss:開始時間
-t :共要多少時間
上述命令表示從視頻起點,間隔1秒,獲取一幀作為圖片。
還可以使用如下命令進行截取
ffmpeg -i 輸入視頻.mp4 -y -f image2 -t 0.001 -s 960x540 a.jpg
還可以用關(guān)鍵幀去獲取
ffmpeg -i 輸入視頻.mp4 -y -f image2 -frames 1 a.jpg ffmpeg -i 輸入視頻.mp4 -vf "scale=iw/2:ih/2" b.png
ffmpeg 轉(zhuǎn)換 mp4 為 m3u8 文件
ffmpeg -i 輸入視頻 -profile:v baseline -level 3.0 -start_number 0 -hls_time 60 -hls_list_size 10 -f hls demo1.m3u8
-start_number number:設(shè)置播放列表中最先播放的索引號,默認 0;
-hls_time seconds:設(shè)置段長度,單位秒,默認為2;
-hls_list_size size:設(shè)置播放列表中字段最大數(shù)。如果為0,則包含所有分段,默認為5;
-profile:v baseline -level 3.0:H.264畫質(zhì)級別控制,本部分知識可以另行學(xué)習(xí);
由于上述命令轉(zhuǎn)碼之后,生成的文件名如下所示,所以需要修改視頻切片的名稱生成規(guī)則,新增如下參數(shù) -hls_segment_filename video%07d.ts 。
完整命令如下所示:
ffmpeg -i 輸入視頻 -profile:v baseline -level 3.0 -start_number 0 -hls_time 60 -hls_segment_filename video%07d.ts -f hls demo1.m3u8
最終轉(zhuǎn)換成高清與標清的 m3u8 命令如下:
ffmpeg -i 輸入視頻.mp4 -codec:a aac -async 2 -ar 44100 -codec:v libx264 -hls_time 20 -hls_list_size 0 -threads 2 -max_muxing_queue_size 9999 -y demo.m3u8
其中重要的參數(shù)有:
-threads 0 自動選擇最大線程數(shù);
-max_muxing_queue_size 1024:緩存大小;
-ar freq: 設(shè)置音頻采樣率。
轉(zhuǎn)碼成標清
ffmpeg -i 輸入視頻.mp4 -codec:v libx264 -b:v 256k -maxrate 256k -bufsize 256k -bt 512k -hls_time 20 -hls_list_size 0 -threads 2 -max_muxing_queue_size 9999 -y demo2.m3u8
Python 視頻 視頻轉(zhuǎn)碼
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。