ffmpeg常用方法
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
合并音视频的简单方法
从youtube拔下来的高清视频不带音频,视频和音频是分开,通过ffmpeg进行合并
1 | 去除视频原有声音 |
注: -i 输入要处理的视频文件路径
-an 不使用音频纪录
-vcodec 视频强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。
-acodec 音频强制使用codec编解码方式。如果用copy表示原始编解码数据必须被拷贝。
m3u8(ts) 合并为 MP4
远程文件
以优酷为例,f12,network 搜索.m3u8
1 | ffmpeg -i "./soft/ffmpeg/bin/ffmpeg.exe -i "https://valipl.cp31.ott.cibntv.net/6572E86C4674971FC06842811/0300090000631AB5A872945696B9167FC09D41-4CD7-4F34-B7EF-6F3848FAEE9F-11-19002.m3u8?ccode=0502&duration=10382&expire=18000&psid=acf24e1cec483c5e0ab5c18c9618f78641346&ups_client_netip=2001x470xcx7cxx2&ups_ts=1664697844&ups_userid=&utid=h1PnFptjbB0CAWp46ELD3fcH&vid=XNTg5OTg1OTkyNA%3D%3D&vkey=B56777484cee4bbb530a440822c040791&s=adac380a5e1d4a2f9380&eo=0&t=b5efbfeabc8d80e&cug=1&fms=a12b6356ee2fc783&tr=180&le=338a5a7f8e40b2c7389bf6f58a9c2595&ckt=5&m_onoff=0&rid=200000009EA308D5E433EBF10D7F75DD0BAA0D3502000000&type=mp4hd3v3&bc=2&dre=u37&si=73&dst=1&sm=1&operate_type=0" -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4" -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4 |
本地文件
1 | # 合并成 ts 文件 |
ffmpeg
1 | # 未验证 |
MP4 转 M3U8
M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。”M3U” 和 “M3U8” 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。
简单来说,m3u8是一个视频格式,就是将一个视频分成很多的小部分,这样方便视频的加载。
操作简单,但效率低
1 | ffmpeg -i input.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 2 -hls_time 15 output.m3u8 |
生成的效果是:
将 input.mp4 视频文件每 15 秒生成一个 ts 文件,最后生成一个 m3u8 文件,m3u8 文件是 ts 的索引文件。
我们直接用 VLC media player 等播放软件是可以直接打开 m3u8 文件,像播放 mp4 一样。
默认的每片长度为 2 秒,m3u8 文件中默认只保存最新的 5 条片的信息,导致最后播放的时候只能播最后的一小部分(直播的时候特别注意)。
-hls_time n 设置每片的长度,默认值为 2,单位为秒。
-hls_list_size n 设置播放列表保存的最多条目,设置为 0 会保存有所片信息,默认值为5。
-hls_wrap n 设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0。这个选项能够避免在磁盘上存储过多的 片,而且能够限制写入磁盘的最多的片的数量。
-hls_start_number n 设置播放列表中 sequence number 的值为 number,默认值为 0。
注意:播放列表的 sequence number 对每个 segment 来说都必须是唯一的,而且它不能和片的文件名(当使用 wrap 选项时,文件名有可能会重复使用)混淆。
效率优化版,提升效率
TS 文件是一种媒体的扩展名,它是日本高清摄像机拍摄下进行的封装格式。MPEG2-TS(Transport Stream“传输流”;又称TS、TP、MPEG-TS 或 M2T)是用于音效、图像与数据的通信协定,最早应用于DVD的实时传送节目。MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。
1 | # 视频整体转码ts |