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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/16 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php视频转码hls,GitHub - wanglimeng/ffmpeg-demo: 使用 ffmpeg 实现视频转码。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視頻轉碼示例

該 demo 的主要目的是為了學習如何使用 ffmpeg 實現視頻轉碼。

視頻轉碼程序 transcode.php 文件具備以下功能:

獲取視頻信息;

提取字幕;

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

提高視頻音量;

轉換成 HLS 格式即 M3U8 + TS 的播放列表;

生成縮略圖和預覽圖;

生成劇照;

項目結構

.

├── movie

│?? ├── 0

│?? │?? ├── example.mp4 # 測試視頻1

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

│?? │?? ├── image_group # 預覽圖

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

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

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

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

│?? └── 1

│?? ├── example.mp4 # 測試視頻2

│?? ├── hls

│?? ├── image_group

│?? ├── mp4

│?? ├── stage_photo

│?? ├── subtitle

│?? └── thumb.jpg

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

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

├── README.md

├── transcode0.log # 測試視頻0的執行日志

├── transcode1.log # 測試視頻1的執行日志

└── transcode.php # 視頻轉碼腳本

項目依賴

PHP 5+

注:本項目測試時使用的 ffmpeg 是 2.8.15 版本。

ffmpeg 在 Ubuntu 的安裝方法:

sudo apt-get install ffmpeg

轉碼步驟說明

1. 獲取視頻信息

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

參數說明:

print_format:輸出格式,這里設置為 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

說明:由于本倉庫中的兩個 example.mp4 都沒有字幕,所以這條命令對于它們都是無效的,讀者可自行下載帶字幕的視頻測試。

3. 將視頻轉碼成不同的清晰度

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

參數說明:

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

-c:v:設置視頻編碼器

-b:v:設置視頻碼率

-r:設置幀率

-s:設置分辨率

-aspect: 設置畫面比例

-c:a:設置音頻編碼器

-b:a:設置音頻碼率

-ar:設置音頻采樣率

-t:設置輸出文件播放時長

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

-ac:設置音頻聲道數

-y:默認覆蓋輸出文件

-qdiff:編碼質量差(根據經驗調)

-qcomp:量化曲線壓縮參數(根據經驗調)

-subq:Sub-pixel 運動估算方法

-preset:編碼預設值(根據經驗調)

-me_range:運動搜索最大范圍(根據經驗調)

-coder:設置熵編碼器

-me_method:設置運動估算方法

-refs:設置運動補償的參考幀數量

-bf:設置非 B 幀之間的最大 B 幀數量

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

清晰度劃分

清晰度

標識ID

編碼器

幀率

總碼率

音頻碼率

聲道數

標清

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*聲道數

與片源文件一樣

4K

5

cpu

25

3940

6000

256*聲道數

與片源文件一樣

原畫

100

動態

動態

動態

動態

動態

動態

說明:原畫是為了轉碼后的視頻播放時清晰度跟原視頻更接近而設。

因為有些視頻的寬度在 640-1024、1024-1280 等之間,這些視頻如果被轉成低清晰度,效果將沒有那么好。

3.1 提高視頻音量

有些視頻的音量比較低,需要通過轉碼提高音量,以下是獲取音量信息的命令,提高音量的命令請查看源代碼。

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

參數說明:

-q:a:設置音頻質量,0 為原始音頻質量

-af:音頻濾鏡

-f:指定輸出格式

4. 轉換成 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. 生成縮略圖、預覽圖

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

參數說明:

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

scale=160:90 每張小圖的長為 160,寬為 90;

tile=6x5 每張預覽圖每列放 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

參數說明:

-ss 10 從第 10 開始截圖;

-t 82 截圖的視頻時長為 82 秒;

最后

以上是使用 CPU 進行轉碼,若需要加速應該使用 GPU 進行轉碼,此時的轉碼命令需要做一些修改,這部分讀者可以查閱相關文檔自行完成。

另外,以上例子僅僅是為了展示 ffmpeg 的基本用法,很多命令的參數需要根據自己的業務場景進行調整,讀者務必注意。

播放轉碼后的 M3U8 文件,可參考 player 目錄的示例。

參考文獻

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。