官網https://ffmpeg.org/download.html
並加入到環境變量
ffmpeg -v ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers built with Apple clang version 14.0.3 (clang-1403.0.22.14.1)
顯示版本號即為成功
在瀏覽器端, 按F12 進入界面查看網絡請求,過濾m3u8
的信息,查找Preview 的內容, 點擊視頻, 找到直播回放, 點開, 向後拖拽一下進度條如果沒有內容,刷新一下,這個請求在在視頻加載前訪問,可能沒有記錄上
第一步,看看header
是來自哪裡的機房
第二步, Ctrl + A 全選Preview 的內容
類似下面這樣:
#EXTM3U#EXT-X-VERSION:3#EXT-X-MEDIA-SEQUENCE:1#EXT-X-TARGETDURATION:35#EXTINF:33.000,xxx/1.ts?auth_key=xxx …
保存為aa.bj.m3u8
, 在python 腳本的同級目錄下,注意,中間的bj,有可能是不一樣的, sz 表示深圳,bj 表示北京
然後執行腳本python3 a.py
即可。會建立一個快取資料夾,支援斷點續傳,下載完成後自動刪除
不能使用參數-mac-crf
,壓縮視頻,需要更換編碼器指令
示範版本,和自動化腳本有所不同
import requests, os, re, time# sz 表示深圳,bj 表示北京,base_url = "https://dtliving-sz.dingtalk.com/live_hp/"def get_url(): url_list = [] with open("aa. m3u8", "r") as f: s = f.readlines() for i in s: if re.match(r".*?ts.*?", i): url_list.append(base_url + i) return url_listdef download(): urls = get_url() for i, url in enumerate(urls): with open(f"{i + 1}.ts", "wb") as f: response = requests.get(url[: -1]) # 去掉換行符號print(i, "ok") # time.sleep(1)# 整合檔名, 方便FFmpeg合併def parse_filename(): base_path = os.getcwd() urls = get_url() with open ("file.txt", "w+") as f: for i in range(1, 1 + len(urls)): path = f"file '{base_path}/{i}.ts'n" print( path) f.write(path)if __name__ == "__main__": download() print("download finished...") parse_filename()
如果成功會下載一系列的二进制
文件, 1.ts, 2.ts, 3.ts, ...
錯誤的話,則是xml
格式內容的檔案,開啟會顯示錯誤訊息。
解決方法,看是不是base_url
沒有匹配,sz 和bj 搞錯了
ffmpeg -f concat -safe 0 -i file.txt -c copy a.mp4
相信合併完後覺的文件太大,可以在用ffmpeg
進行再壓縮,或者用h256/hevc
重新編碼,可以獲得更小的體積文件
推薦用permute 軟體壓縮
使用更有效率的視訊編碼格式是一種常用的方法,可以透過使用壓縮率更高的視訊編碼格式來減少視訊檔案的體積。以下是使用FFmpeg 將影片轉換為H.265 編碼格式的範例:
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
上述指令將輸入視訊input.mp4 轉換為H.265 編碼格式,並將結果儲存為output.mp4 檔案。其中,-c:v 選項表示視訊編碼器,libx265 表示使用x265 編碼器,-crf 選項表示視訊質量,28 表示目標視訊質量,數值越小視訊品質越高,檔案體積越大。
測試,1.3g 的影片壓縮為231m 大小,但是速度太慢了speed=0.8 ,3 小時的影片壓縮花了我4 個小時,尋找其他方法
hevc_videotoolbox 不如libx265,但速度很快,在我m1 MacBook air 13 上,
像大多數硬體加速編碼器一樣,hevc_videtoolbox 的效率不如libx265。因此,與libx265 相比,您可能需要給它一個明顯更高的位元率才能匹配同等的品質。這可能會破壞從H.264 重新編碼到HEVC/H.265 的目的。
官網https://trac.ffmpeg.org/wiki/HWAccelIntro#VideoToolbox
# VideoToolbox [¶](https://trac.ffmpeg.org/wiki/HWAccelIntro#VideoToolbox "链接到这一节") [VideoToolbox](https://developer.apple.com/documentation/videotoolbox) is the macOS framework for video decoding and encoding. The following codecs are supported: - Decoding: H.263, H.264, HEVC, MPEG-1, MPEG-2, MPEG-4 Part 2, ProRes - Encoding: H.264, HEVC, ProRes To use H.264/HEVC hardware encoding in macOS, just use the encoder `-c:v h264_videotoolbox` or `-c:v hevc_videotoolbox` for H.264 or HEVC respectively. Check `ffmpeg -h encoder=...` to see encoder options. VideoToolbox supports two types of rate control: - Bitrate-based using `-b:v` - Constant quality with `-q:v`. Note that the scale is 1-100, with 1 being the lowest and 100 the highest. Constant quality mode is only available for Apple Silicon and from ffmpeg 4.4 and higher.
開啟GPU 加速3 ,並指定視訊編碼器進行編碼。要注意的是VideoToolbox 不支援CRF,因此必須透過-b:v
指定碼率。
Codec AVOption crf (Select the quality for constant quality mode) has not been used for any stream. The most likely reason is either wrong type (eg a video option with no video streams) or that wrong or private oplev not actually used for any stream.
測試預設選項大概快了10 倍
ffmpeg video -i input.mp4 -c:v hevc_videotoolbox output.mp4
frame=126360 fps=114 q=-0.0 Lsize= 413400kB time=02:55:29.95 bitrate= 321.6kbits/s dup=663 drop=0 speed=9.51x video:315854kB audio:93814kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.910847%
和之前的相比大概快了10 倍,文件大小從800m 到400m ,但是壓縮率下降了,我再多測試幾個文件
macOS 中對應h264 的編碼有libx264 和h264_videotoolbox ,兩個速度差不多,但是libx264 cpu 佔用率高,轉碼後的檔案體積也小,聽說播放影片的解碼要求也會高一點
經過我測試發現,錄播檔案可是使用h264 編碼,h265 編碼在4k,運動鏡頭多的情況下優勢明顯,釘釘直播回放只有12 幀和1080p 畫質,不需要上h265,而且我學習的錄播還是ppt 居多,很少運動鏡頭。
推薦以下指示:
find ./ -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libx264 -crf 30 -c:a aac "${0%%.mp4}-hevc.mp4"' {} ;
代碼部分來源https://blog.51cto.com/u_15366127/6084937 ↩
使用ffmpeg 縮小影片體積的幾種方式https://juejin.cn/post/7222575963564654648 ↩
FMPEG 硬體加速https://blog.xm.mk/posts/1a3h/ ↩