(强大的ffmpeg)如何下载并转化网络M3U8文件为mp4文件-CarlZeng

背景

本文将的是如何在苹果MAC电脑下,将网络地址的M3U8文件(URL地址)转化为方便播放的MP4文件。

  1. 什么是M3U8文件?先去搜索下
  2. 怎么下载ffmpeg,怎么使用? 也可以参考下:如何使用youtube-dl下载Youtube上面的音视频,油管视频
  3. Support SOCKS5 proxies #3373

步骤(方案一)

  1. 使用浏览器查看获取M3U8文件的地址
    (插件如:Firefox的 Bulk Media Downloader, Video DownloadHelper
    Chrome的Media Download Helper)

  2. 打开Terminal

    1.   
      1
      2
      3
      ffmpeg -i "http://host/视频地址/file.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4

      #请更换参数中的 URL地址 和 末尾要保存的mp4文件名(已测试可用)。
  3. 如果该网络的URL地址需要Proxy才能访问,需要用到-http_proxy 参数。

    1. 实例演示,假设已存在本机http proxy信息如下(很实用,因为即便已下载.m3u8文件,而其中所指向的具体视频分段地址还是需要proxy才能访问)
    1
    ffmpeg -http_proxy "http://127.0.0.1:7890" -i "http://host/folder/file.m3u8" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file1.mp4

下载循环录播资源

下载循环录播专为单mp4文件,
长期实践的发现ffmpeg用来下载直播流也是666
比如, 实际的命令就像这样:
ffmpeg -http_proxy “http://127.0.0.1:7890“ -i “https://hls.vdtuzv.com/videos2/77e1a56ec7cb38182c7df417d22f0b9a/77e1a56ec7cb38182c7df417d22f0b9a.m3u8?auth_key=1699418332-654b10dc8a7a2-0-498db8173470eb197016a656ac0ec821&v=2“ -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file1108.mp4

很多m3u8, 地址的加密方案是在url参数中增加auth_key;而且这个auth_key是会变更的。
这样维护源文件就简单了,放到特定地网盘(比如说)以后,由专门的软件负责循环直播这些mp4资源,其实就是录播,走实时的IPTV流量一样的原理。这样不暴露源文件的原始url链接,访问速度快(因为是分段式在内存下载),又能统计和分析视频的访问量等信息。
ffmpeg可以拼接这些分段式的.ts文件,最终转化成单个mp4文件。

步骤(方案二)

这个方案假设m3u8内容可以本机直接访问的情况下,We can use VLC to convert easily, File > Convert / Stream:

  1. Drop media here
  2. Choose Profile
  3. Choose Destination

20231006实测吐槽:尽量别用这第二个方案(的MAC版下VLC来保存短视频),因为会无限循环提示是否重写或者保留原有的文件。

相关内容


ffmpeg 提取视频截图

视频自动截图工具, 按特定的时间间隔, 自动截取监控画面
自动 制作成小视频, 或者自动生成 一堆截图照片

ffmpeg快速获取视频截图

1
2
# 均匀抽帧: -r 指定每秒抽取图片的数量, 1 frame/sec 表示: 每秒1帧截图
ffmpeg -i 1浙大城市学院大瓜.mp4 -r 0.125 -q:v 2 -f image2 ./%08d.jpg

均匀抽帧

如果想要指定时间点抽帧

1
ffmpeg -i aaa.mp4 -ss 00:00:01 -vframes 1 ./%08d.jpg

视频流抽帧

  • rtsp流抽帧。参数说明:
    • -y :如果提示文件已经存在,自动执行y,对已存在文件进行覆盖;
    • -f image2:以图片格式保存;
    • -r 1:帧数,每秒截取一帧,-r 1/5 表示每5秒抽取一帧;
    • img%03d.jpg 格式化命名,会生成img001.jpg, img002.jpg
1
ffmpeg -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/1 img%03d.jpg
  • rtsp流抽帧,tcp协议推流需要加上: -rtsp_transport tcp
1
ffmpeg -rtsp_transport tcp -i "rtsp://dxcs:cs123456@200.36.43.131:554/Streaming/Channels/1001" -y -f image2 -r 1/5 img%03d.jpg

最终的抽帧

1
2
ffmpeg -i "rtsp://admin:d***@192.168.6.211:554" -y -f image2 -r 1/180 /volume2/homes/13261977480/P
hotos/202410051%03d.jpg

ffmpeg图片转视频

规则图片名称转视频

参数说明:

​ -r 25 表示每秒播放25帧;

​ -b 200k 指定码率为200k;将img00001.jpg’, img00002.jpg’这种顺序排列的图片文件转制作为视频

1
2
ffmpeg -f image2 -i ./images/img%05d.jpg ./result.mp4
ffmpeg -f image2 -i './images/img%05d.jpg' -vcodec libx264 -r 25 -b 200k result.mp4

不规则图片名称转视频

参数说明:

​ -framerate 10:视频帧率;

​ -pattern_type glob:Glob pattern 模糊匹配;

​ -f image2pipe:图像管道,模糊匹配得到图片名称

1
2
ffmpeg -framerate 10 -pattern_type glob -i './images/*.jpg' out.mp4
cat ./images/*.jpg | ffmpeg -f image2pipe -i - output.mp4

其他思路:

摄像头 自动截图

SRS 自动截图

iina/iina The modern video player for macOS.

本章节感谢列表

ffmpeg快速获取视频截图

FFmpeg视频处理

tangramor/slidev

就可以在 dist 目录下将你的幻灯片生成静态HTML 文件

媒体资源地址嗅探及下载

功能包含:1、自动嗅探页面上的视频、音频资源,列出链接,并提供播放、复制和下载功能(提供 mp3、mp4 和 m3u8 资源下载);2、录屏;3、解除页面复制限制。

dplayer 地址嗅探

防嗅探防下载防合成的情况下, 如何获取dplayer视频的地址以及转化为原始MP4文件?

  1. 首先需要一个翻墙的环境, 确保m3u8的文件地址, 以及文件中的视频片段地址都可以被正常访问

  2. 探测M3U8地址

    1. M3U8的地址都已升级成为加密的需要带特定参数及参数值的m3u8地址, 比如: https://hls.vdtuzv.com/videos4/028060ef1e01c0c1d09d63b5e4b5ba47/028060ef1e01c0c1d09d63b5e4b5ba47.m3u8?auth_key=1727055066-66f0c4da21a64-0-9df27c832d72253d33e8b2418e03ecfd&v=3&time=0
  3. 获取了M3U地址以后, 利用ffmpeg的下载合成mp4命令, 即可将视频中播放的流媒体转化为普通的MP3/MP4等音频视频文件格式

    1. ffmpeg -i “https://视频地址/file.m3u8” -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 file.mp4
    2. 替换上方的”https://视频地址/file.m3u8”为具体详细的M3U8地址
    3. 替换上方的 file.mp4 为将要新建并保存的本地mp4文件名

可参考的浏览器插件列表

👇这些工具都有机会获取到m3u8的地址, 下载的话, 建议使用上方的ffmpeg命令

  1. Video DownloadHelper
  2. Greasy Fork 脚本: 媒体资源嗅探及下载(支持下载m3u8和mp4视频和音频)

运行ffmpeg日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
ffmpeg -i "https://hls.vdtuzv.com/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed.m3u8?auth_key=1727055064-66f0c4d854525-0-19bdf45efcfdccc49006b1ae87a8af53&v=3&time=0" -bsf:a aac_adtstoasc -vcodec copy -c copy -crf 50 1浙大城市学院大瓜.mp4
ffmpeg version 6.1 Copyright (c) 2000-2023 the FFmpeg developers
built with Apple clang version 14.0.0 (clang-1400.0.29.202)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/6.1_1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
[hls @ 0x15b104ec0] Skip ('#EXT-X-VERSION:3')
[hls @ 0x15b104ec0] Opening 'https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/crypt.key?auth_key=1727058303-58-0-e6da5d374c453e01f483ac9a35049ea0' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed0.ts?auth_key=1727058303-58-0-124758d9ee5524c3d795383a8a90f7d7' for reading
Input #0, hls, from 'https://hls.vdtuzv.com/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed.m3u8?auth_key=1727055064-66f0c4d854525-0-19bdf45efcfdccc49006b1ae87a8af53&v=3&time=0':
Duration: 00:02:03.63, start: 1.433333, bitrate: 0 kb/s
Program 0
Metadata:
variant_bitrate : 0
Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 720x1280, 30 fps, 30 tbr, 90k tbn
Metadata:
variant_bitrate : 0
Stream #0:1(eng): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp
Metadata:
variant_bitrate : 0
Multiple -c, -codec, -acodec, -vcodec, -scodec or -dcodec options specified for stream 0, only the last option '-c copy' will be used.
File '1浙大城市学院大瓜.mp4' already exists. Overwrite? [y/N] y
Output #0, mp4, to '1浙大城市学院大瓜.mp4':
Metadata:
encoder : Lavf60.16.100
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 720x1280, q=2-31, 30 fps, 30 tbr, 90k tbn
Metadata:
variant_bitrate : 0
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp
Metadata:
variant_bitrate : 0
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed1.ts?auth_key=1727058303-58-0-41b79bc888aa313b972101c99b0a679b' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed2.ts?auth_key=1727058303-58-0-964412ae06b2dce0bd1788d9d713322c' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed3.ts?auth_key=1727058303-58-0-449aa5a69f5c8fffdbc0b79855c32b1b' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed4.ts?auth_key=1727058303-58-0-130dd9772990e9debf830091184e138a' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed5.ts?auth_key=1727058303-58-0-07dc1c847332d3773fc8e7710dbbd33b' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed6.ts?auth_key=1727058303-58-0-b36359b4be63f2354af6767fe7fe35b7' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed7.ts?auth_key=1727058303-58-0-4356fac097b74f060f9423a75d4c277d' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed8.ts?auth_key=1727058303-58-0-a6a971e9b57f2a85818687bf31bc1858' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed9.ts?auth_key=1727058303-58-0-993c9227b63827cfe00f9e51f99d0379' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed10.ts?auth_key=1727058303-58-0-140d889e154c8c8c7c22880b5b60262a' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed11.ts?auth_key=1727058303-58-0-a769f7d58a27da6faa286ff574646ddf' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed12.ts?auth_key=1727058303-58-0-3e804d7600431519cdb22901ed6f178d' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed13.ts?auth_key=1727058303-58-0-ef8e99353240bf4a19bd3506b4a1a010' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed14.ts?auth_key=1727058303-58-0-2f1e444aec4ecd6b5b40937d29637f9a' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed15.ts?auth_key=1727058303-58-0-033aae2c7bedd974e89ebee3476853a1' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed16.ts?auth_key=1727058303-58-0-3b5747780bbac572279f1b93fe856338' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed17.ts?auth_key=1727058303-58-0-75cbc8f22e9fef85792c34eba842397b' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed18.ts?auth_key=1727058303-58-0-0b9aed99d397ac8d940d203e36849942' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed19.ts?auth_key=1727058303-58-0-31de7202a91110f6b1748c3f44d0452e' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed20.ts?auth_key=1727058303-58-0-ee0a4051cd313354b1b1e0d56939034d' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed21.ts?auth_key=1727058303-58-0-5e1dfa5e3bb4ba3f04ef7b1fe8493d8e' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed22.ts?auth_key=1727058303-58-0-bcbeb6ed18b6b6800f732c1b1d632d2a' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed23.ts?auth_key=1727058303-58-0-16b158dbcb96c79269de03db847650f5' for reading
[hls @ 0x15b104ec0] Opening 'crypto+https://tp6.chims.co/videos4/ec014ce7b0df4dc89e8c8e4e064700ed/ec014ce7b0df4dc89e8c8e4e064700ed24.ts?auth_key=1727058303-58-0-f7971cf39fbe8f6d4c06577d08f70ee7' for reading
[out#0/mp4 @ 0x15b206a00] video:30172kB audio:4790kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.348045%
size= 35085kB time=00:02:03.62 bitrate=2324.8kbits/s speed=29.5x

个性化需求沟通 扫客服加V加群: