공식 홈페이지 https://ffmpeg.org/download.html
환경 변수에 추가되었습니다.
ffmpeg -v ffmpeg 버전 6.0 Copyright (c) 2000-2023 FFmpeg 개발자는 Apple clang 버전 14.0.3(clang-1403.0.22.14.1)으로 구축했습니다.
버전 번호 표시는 성공을 나타냅니다.
브라우저 측에서 F12를 눌러 인터페이스로 들어가 네트워크 요청을 보고, m3u8
정보를 필터링하고, 미리보기 콘텐츠를 검색하고, 비디오를 클릭하고, 라이브 방송 재생을 찾아 클릭하고, 진행률 표시줄을 뒤로 드래그합니다. 콘텐츠를 새로 고치세요. 이 요청은 동영상이 로드되기 전에 액세스되었으므로 녹화되지 않을 수 있습니다.
첫 번째 단계는 header
나오는 컴퓨터실을 살펴보는 것입니다.
두 번째 단계에서는 Ctrl + A를 누르면 미리보기의 모든 내용이 선택됩니다.
다음과 같은 것 :
#EXTM3U#EXT-X-버전:3#EXT-X-미디어-시퀀스:1#EXT-X-대상 기간:35#EXTINF:33.000,xxx/1.ts?auth_key=xxx ...
Python 스크립트와 동일한 디렉토리에 aa.bj.m3u8
로 저장 하십시오. 중간에 있는 bj는 Shenzhen을 의미하고 bj는 베이징을 의미합니다.
그런 다음 python3 a.py
스크립트를 실행합니다. 다운로드 재개를 지원하는 캐시 폴더가 생성되며 다운로드가 완료된 후 자동으로 삭제됩니다.
-mac-crf
매개변수는 비디오를 압축하는 데 사용할 수 없으며 인코더 지침을 교체해야 합니다.
자동화 스크립트와 다른 데모 버전
가져오기 요청, 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 = 요청.get(url[: -1]) # 개행 문자 제거 print(i, "ok") # time.sleep(1)# FFmpeg 병합을 용이하게 하기 위해 파일 이름 통합 def pars_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( 경로) f.write(경로)if __name__ == "__main__": download() print("다운로드 완료...") parse_filename()
성공하면 일련의二进制
파일 1.ts, 2.ts, 3.ts, ...
이 다운로드됩니다.
틀리면 xml
형식의 내용을 가진 파일이며, 열면 오류 메시지가 출력됩니다.
해결 방법은 base_url
일치하지 않거나 sz와 bj가 잘못된지 확인하는 것입니다.
ffmpeg -f concat -safe 0 -i file.txt -c a.mp4 복사
병합 후 파일이 너무 크면 ffmpeg
사용하여 다시 압축하거나 h256/hevc
사용하여 다시 인코딩하여 더 작은 파일 크기를 얻을 수 있다고 생각합니다.
순열 소프트웨어 압축을 사용하는 것이 좋습니다
보다 효율적인 비디오 인코딩 형식을 사용하는 것은 압축률이 더 높은 비디오 인코딩 형식을 사용하여 비디오 파일 크기를 줄이는 일반적인 방법입니다. 다음은 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 사이즈로 압축했는데 속도가 너무 느립니다. 속도=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
통해 비트 전송률을 지정해야 합니다.
코덱 AVOption crf(일정 품질 모드를 위한 품질 선택)는 어떤 스트림에도 사용되지 않았습니다. 가장 가능성이 높은 이유는 잘못된 유형(예: 비디오 스트림이 없는 비디오 옵션)이거나 일부 인코더의 비공개 옵션이기 때문입니다. 실제로 어떤 스트림에도 사용되지 않습니다.
기본 옵션 테스트가 약 10배 더 빠릅니다.
ffmpeg video -i input.mp4 -c:v hevc_videotoolbox output.mp4
프레임=126360 fps=114 q=-0.0 Lsize= 413400kB 시간=02:55:29.95 비트 전송률= 321.6kbits/s dup=663 drop=0 속도=9.51x 비디오:315854kB 오디오:93814kB 자막:0kB 기타 스트림:0kB 글로벌 헤더:0kB 다중화 오버헤드: 0.910847%
전작보다 10배 정도 빨라졌고 파일 크기도 800m에서 400m로 늘어났지만 압축률은 몇 개 더 떨어졌다.
macOS에서 h264에 해당하는 인코딩에는 libx264와 h264_videotoolbox가 있는데, 두 가지 속도는 비슷하지만, libx264는 CPU 사용량이 많고, 트랜스코딩된 파일 크기도 작아서 동영상 재생에 필요한 디코딩 요구 사항이 더 높다고 들었습니다.
테스트 후 녹화 및 방송 파일은 h264 인코딩을 사용하는 것으로 나타났습니다. H265 인코딩은 4k 및 많은 스포츠 장면에서 확실한 이점을 제공합니다. DingTalk 라이브 재생은 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/ ↩