日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php视频转码hls,GitHub - wanglimeng/ffmpeg-demo: 使用 ffmpeg 实现视频转码。

發(fā)布時(shí)間:2023/12/16 php 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php视频转码hls,GitHub - wanglimeng/ffmpeg-demo: 使用 ffmpeg 实现视频转码。 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

視頻轉(zhuǎn)碼示例

該 demo 的主要目的是為了學(xué)習(xí)如何使用 ffmpeg 實(shí)現(xiàn)視頻轉(zhuǎn)碼。

視頻轉(zhuǎn)碼程序 transcode.php 文件具備以下功能:

獲取視頻信息;

提取字幕;

將視頻轉(zhuǎn)碼成不同清晰度的 MP4 文件(視頻編碼 H.264,音頻編碼 AAC);

提高視頻音量;

轉(zhuǎn)換成 HLS 格式即 M3U8 + TS 的播放列表;

生成縮略圖和預(yù)覽圖;

生成劇照;

項(xiàng)目結(jié)構(gòu)

.

├── movie

│?? ├── 0

│?? │?? ├── example.mp4 # 測(cè)試視頻1

│?? │?? ├── hls # m3u8 和 ts 的存放目錄

│?? │?? ├── image_group # 預(yù)覽圖

│?? │?? ├── mp4 # 不同清晰度的 mp4 文件

│?? │?? ├── stage_photo # 劇照

│?? │?? ├── subtitle # 字幕

│?? │?? └── thumb.jpg # 縮略圖

│?? └── 1

│?? ├── example.mp4 # 測(cè)試視頻2

│?? ├── hls

│?? ├── image_group

│?? ├── mp4

│?? ├── stage_photo

│?? ├── subtitle

│?? └── thumb.jpg

├── movie_info_example.json # 獲取視頻信息的輸出示例

├── movie_info.php # 獲取視頻信息腳本

├── README.md

├── transcode0.log # 測(cè)試視頻0的執(zhí)行日志

├── transcode1.log # 測(cè)試視頻1的執(zhí)行日志

└── transcode.php # 視頻轉(zhuǎn)碼腳本

項(xiàng)目依賴

PHP 5+

注:本項(xiàng)目測(cè)試時(shí)使用的 ffmpeg 是 2.8.15 版本。

ffmpeg 在 Ubuntu 的安裝方法:

sudo apt-get install ffmpeg

轉(zhuǎn)碼步驟說(shuō)明

1. 獲取視頻信息

ffprobe -v quiet -print_format json -show_streams -show_format /www/web/ffmpeg-demo/movie/0/example.mp4

參數(shù)說(shuō)明:

print_format:輸出格式,這里設(shè)置為 json 輸出;

show_streams:顯示 streams 信息;

show_format:顯示封裝格式信息;

2. 從原視頻提取字幕文件

ffmpeg -v quiet -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/example.mkv -map 0:3 -y /www/web/ffmpeg-demo/movie/subtitle/subtitle_3.srt

ffmpeg -v quiet -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/example.mkv -map 0:4 -y /www/web/ffmpeg-demo/movie/subtitle/subtitle_4.srt

ffmpeg -v quiet -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/example.mkv -map 0:5 -y /www/web/ffmpeg-demo/movie/subtitle/subtitle_5.srt

ffmpeg -v quiet -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/example.mkv -map 0:6 -y /www/web/ffmpeg-demo/movie/subtitle/subtitle_6.srt

說(shuō)明:由于本倉(cāng)庫(kù)中的兩個(gè) example.mp4 都沒(méi)有字幕,所以這條命令對(duì)于它們都是無(wú)效的,讀者可自行下載帶字幕的視頻測(cè)試。

3. 將視頻轉(zhuǎn)碼成不同的清晰度

ffmpeg -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/0/example.mp4 -sn -dn \

-t 102.981000 -map 0:0 -vsync 1 -c:v libx264 -b:v 552k -r 15 -s 640x360 -aspect 640:360 -map 0:1 -c:a aac -strict -2 -b:a 48k -ar 44100 -ac 1 -qdiff 4 -qcomp 0.6 -subq 9 -preset slower -me_range 32 -coder ac -me_method umh -pix_fmt yuv420p -keyint_min 15 -refs 4 -bf 4 -movflags +faststart -y /www/web/ffmpeg-demo/movie/0/mp4/1.mp4 \

-t 102.981000 -map 0:0 -vsync 1 -c:v libx264 -b:v 828k -r 15 -s 1024x576 -aspect 1024:576 -map 0:1 -c:a aac -strict -2 -b:a 72k -ar 44100 -ac 1 -qdiff 4 -qcomp 0.6 -subq 9 -preset slower -me_range 32 -coder ac -me_method umh -pix_fmt yuv420p -keyint_min 15 -refs 3 -bf 3 -movflags +faststart -y /www/web/ffmpeg-demo/movie/0/mp4/2.mp4 \

-t 102.981000 -map 0:0 -vsync 1 -c:v libx264 -b:v 1072k -r 20 -s 1280x720 -aspect 1280:720 -map 0:1 -c:a aac -strict -2 -b:a 128k -ar 44100 -ac 2 -qdiff 4 -qcomp 0.6 -subq 9 -preset slower -me_range 32 -coder ac -me_method umh -pix_fmt yuv420p -keyint_min 20 -refs 3 -bf 2 -movflags +faststart -y /www/web/ffmpeg-demo/movie/0/mp4/3.mp4 \

-t 102.981000 -map 0:0 -vsync 1 -c:v libx264 -b:v 2208k -r 25 -s 1920x1080 -aspect 1920:1080 -map 0:1 -c:a aac -strict -2 -b:a 384k -ar 44100 -qdiff 4 -qcomp 0.6 -subq 9 -preset slower -me_range 32 -coder ac -me_method umh -pix_fmt yuv420p -keyint_min 25 -refs 3 -bf 2 -movflags +faststart -y /www/web/ffmpeg-demo/movie/0/mp4/4.mp4

參數(shù)說(shuō)明:

-vsync:用于控制改變幀率時(shí),丟幀的方法;

-c:v:設(shè)置視頻編碼器

-b:v:設(shè)置視頻碼率

-r:設(shè)置幀率

-s:設(shè)置分辨率

-aspect: 設(shè)置畫面比例

-c:a:設(shè)置音頻編碼器

-b:a:設(shè)置音頻碼率

-ar:設(shè)置音頻采樣率

-t:設(shè)置輸出文件播放時(shí)長(zhǎng)

-map:映射碼流,如果后面的參數(shù)是視頻,就是視頻碼流;如果后面的參數(shù)是音頻,就是音頻碼流

-ac:設(shè)置音頻聲道數(shù)

-y:默認(rèn)覆蓋輸出文件

-qdiff:編碼質(zhì)量差(根據(jù)經(jīng)驗(yàn)調(diào))

-qcomp:量化曲線壓縮參數(shù)(根據(jù)經(jīng)驗(yàn)調(diào))

-subq:Sub-pixel 運(yùn)動(dòng)估算方法

-preset:編碼預(yù)設(shè)值(根據(jù)經(jīng)驗(yàn)調(diào))

-me_range:運(yùn)動(dòng)搜索最大范圍(根據(jù)經(jīng)驗(yàn)調(diào))

-coder:設(shè)置熵編碼器

-me_method:設(shè)置運(yùn)動(dòng)估算方法

-refs:設(shè)置運(yùn)動(dòng)補(bǔ)償?shù)膮⒖紟瑪?shù)量

-bf:設(shè)置非 B 幀之間的最大 B 幀數(shù)量

-movflags faststart:將頭信息挪到文件頭

清晰度劃分

清晰度

標(biāo)識(shí)ID

編碼器

幀率

總碼率

音頻碼率

聲道數(shù)

標(biāo)清

1

gpu>cpu

15

640

600

48

1

高清

2

gpu>cpu

15

1024

900

72

1

超清

3

gpu>cpu

20

1280

1200

128

2

1080P

4

cpu

25

1920

2400

192*聲道數(shù)

與片源文件一樣

4K

5

cpu

25

3940

6000

256*聲道數(shù)

與片源文件一樣

原畫

100

動(dòng)態(tài)

動(dòng)態(tài)

動(dòng)態(tài)

動(dòng)態(tài)

動(dòng)態(tài)

動(dòng)態(tài)

說(shuō)明:原畫是為了轉(zhuǎn)碼后的視頻播放時(shí)清晰度跟原視頻更接近而設(shè)。

因?yàn)橛行┮曨l的寬度在 640-1024、1024-1280 等之間,這些視頻如果被轉(zhuǎn)成低清晰度,效果將沒(méi)有那么好。

3.1 提高視頻音量

有些視頻的音量比較低,需要通過(guò)轉(zhuǎn)碼提高音量,以下是獲取音量信息的命令,提高音量的命令請(qǐng)查看源代碼。

ffmpeg -i /www/web/ffmpeg-demo/movie/0/example.mp4 -map 0:a -q:a 0 -af volumedetect -f null null

參數(shù)說(shuō)明:

-q:a:設(shè)置音頻質(zhì)量,0 為原始音頻質(zhì)量

-af:音頻濾鏡

-f:指定輸出格式

4. 轉(zhuǎn)換成 HLS 格式

ffmpeg -i /www/web/ffmpeg-demo/movie/0/mp4/1.mp4 -map 0 -c copy -bsf h264_mp4toannexb -f segment -segment_list /www/web/ffmpeg-demo/movie/0/hls/1.m3u8 -segment_time 10 -y /www/web/ffmpeg-demo/movie/0/hls/1_%05d.ts

ffmpeg -i /www/web/ffmpeg-demo/movie/0/mp4/2.mp4 -map 0 -c copy -bsf h264_mp4toannexb -f segment -segment_list /www/web/ffmpeg-demo/movie/0/hls/2.m3u8 -segment_time 10 -y /www/web/ffmpeg-demo/movie/0/hls/2_%05d.ts

ffmpeg -i /www/web/ffmpeg-demo/movie/0/mp4/3.mp4 -map 0 -c copy -bsf h264_mp4toannexb -f segment -segment_list /www/web/ffmpeg-demo/movie/0/hls/3.m3u8 -segment_time 10 -y /www/web/ffmpeg-demo/movie/0/hls/3_%05d.ts

ffmpeg -i /www/web/ffmpeg-demo/movie/0/mp4/4.mp4 -map 0 -c copy -bsf h264_mp4toannexb -f segment -segment_list /www/web/ffmpeg-demo/movie/0/hls/4.m3u8 -segment_time 10 -y /www/web/ffmpeg-demo/movie/0/hls/4_%05d.ts

5. 生成縮略圖、預(yù)覽圖

ffmpeg -analyzeduration 100000000 -i /www/web/ffmpeg-demo/movie/0/mp4/1.mp4 \

-vsync 0 -ss 51.4905 -frames:v 1 -s 220x123 -f image2 -y /www/web/ffmpeg-demo/movie/0/thumb.jpg \

-vsync 1 -vf 'fps=1/2,scale=160:90,tile=6x5' -f image2 -y /www/web/ffmpeg-demo/movie/0/image_group/%d.jpg

參數(shù)說(shuō)明:

fps=1/2 2 每隔 2 秒截取一張圖片;

scale=160:90 每張小圖的長(zhǎng)為 160,寬為 90;

tile=6x5 每張預(yù)覽圖每列放 6 張小圖、每行放 5 張小圖;

6. 生成劇照

ffmpeg -analyzeduration 100000000 -ss 10 -i /www/web/ffmpeg-demo/movie/0/mp4/4.mp4 -map 0:v -t 82 -vf 'fps=fps=1/2.74616' -f image2 -y /www/web/ffmpeg-demo/movie/0/stage_photo/%03d.jpg

參數(shù)說(shuō)明:

-ss 10 從第 10 開(kāi)始截圖;

-t 82 截圖的視頻時(shí)長(zhǎng)為 82 秒;

最后

以上是使用 CPU 進(jìn)行轉(zhuǎn)碼,若需要加速應(yīng)該使用 GPU 進(jìn)行轉(zhuǎn)碼,此時(shí)的轉(zhuǎn)碼命令需要做一些修改,這部分讀者可以查閱相關(guān)文檔自行完成。

另外,以上例子僅僅是為了展示 ffmpeg 的基本用法,很多命令的參數(shù)需要根據(jù)自己的業(yè)務(wù)場(chǎng)景進(jìn)行調(diào)整,讀者務(wù)必注意。

播放轉(zhuǎn)碼后的 M3U8 文件,可參考 player 目錄的示例。

參考文獻(xiàn)

總結(jié)

以上是生活随笔為你收集整理的php视频转码hls,GitHub - wanglimeng/ffmpeg-demo: 使用 ffmpeg 实现视频转码。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。