需要进行简单的音视频编程,如果不是特别熟悉C/C++,那么JavaCV应该是比较好的选择,下面记录一下使用JavaCV 视频切片(MPEG-TS)(HLS)的方法。
注意:存放HLS切片的目录必须存在(不会自动创建)
1. 代码实现
通过recorder.setOption进行HLS切片配置:
public class Sample36 { public static void main(String[] args) throws Exception { FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("E:\\lpl.mp4"); grabber.start(); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("E:\\hls\\index.m3u8", grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels()); recorder.setFormat("hls"); recorder.setOption("hls_time", "10"); recorder.setOption("hls_playlist_type", "vod"); recorder.setOption("hls_list_size", "0"); recorder.setOption("hls_segment_filename", "E:\\hls\\video_%04d.ts"); recorder.start(grabber.getFormatContext()); AVPacket packet = null; while ((packet = grabber.grabPacket()) != null) { recorder.recordPacket(packet); avcodec.av_packet_unref(packet); } recorder.close(); grabber.close(); } }
2. 效果展示
视频切片后会生成m3u8索引文件和TS切片视频:
3. 日志打印
下面是切片打印的日志:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\lpl.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.45.100 Duration: 00:13:08.00, start: 0.046000, bitrate: 899 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 2560x1600 [SAR 1:1 DAR 8:5], 823 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s (default) Metadata: handler_name : SoundHandler [hls @ 000000002483b5c0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. [hls @ 000000002483b5c0] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead. Output #0, hls, to 'E:\hls\index.m3u8': Metadata: encoder : Lavf58.45.100 Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 2560x1600 [SAR 1:1 DAR 8:5], q=2-31, 823 kb/s, 30 fps, 90k tbn, 30 tbc Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 64 kb/s [hls @ 000000002483b5c0] Opening 'E:\hls\video_0000.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0001.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0002.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0003.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0004.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0005.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0006.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0007.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0008.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0009.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0010.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0011.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0012.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0013.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0014.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0015.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0016.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0017.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0018.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0019.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0020.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0021.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0022.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0023.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0024.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0025.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0026.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0027.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0028.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0029.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0030.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0031.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0032.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0033.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0034.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0035.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0036.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0037.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0038.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0039.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0040.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0041.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0042.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0043.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0044.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0045.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0046.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0047.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0048.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0049.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0050.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0051.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0052.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0053.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0054.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0055.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0056.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0057.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0058.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0059.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0060.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0061.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0062.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0063.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0064.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0065.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0066.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0067.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0068.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0069.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0070.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0071.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0072.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0073.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0074.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0075.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0076.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0077.ts' for writing [hls @ 000000002483b5c0] Opening 'E:\hls\video_0078.ts' for writing
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)