求助,m3u8视频文件获取MP4视频方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助,m3u8视频文件获取MP4视频方法相关的知识,希望对你有一定的参考价值。
如题:file:///E:/%E8%BF%85%E9%9B%B7%E4%B8%8B%E8%BD%BD/1695.html以上网页的视频。以下是这段视频的M3U8文件,使用文本打开后
M3U8的视频文件加入下载中,选择下载的格式(在下载框的下方),如AVI、MKV、MP4等,点击下载,待其下载完毕,用播放器播放即可,有些视频格式系统播放器无法兼容,... 参考技术AM3U8的链接后缀一般是.m3u8样式,如果是正确的M3U8地址可以使用FFmpeg GUI (MP4图形器)下载或者合并。
希望可以帮到您。
参考技术B 不是很懂这个东西尼!好像很难的样子!java 获取音频视频文件时长代码示例
目录
一、github源码地址
二、支持音频、视频文件格式
- 支持wav 、mp3、m4a、mov、mp4 格式文件
三、代码示例
-
pom.xml文件导入如下依赖包
<!-- mp3文件支持(如语音时长)--> <dependency> <groupId>org</groupId> <artifactId>jaudiotagger</artifactId> <version>2.0.1</version> </dependency> <!-- mp4文件支持(如语音时长)--> <dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.3.7</version> </dependency>
-
音频文件工具类
package com.xz.thread.day2; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.mp3.MP3AudioHeader; import org.jaudiotagger.audio.mp3.MP3File; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import java.io.File; /** * @description: * @author: xz * @create: 2022-08-21 */ public class AudioUtil /** * 获取语音文件播放时长(秒) 支持wav 格式 * @param filePath * @return */ public static Float getDuration(String filePath) try File destFile = new File(filePath); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(destFile); AudioFormat format = audioInputStream.getFormat(); long audioFileLength = destFile.length(); int frameSize = format.getFrameSize(); float frameRate = format.getFrameRate(); float durationInSeconds = (audioFileLength / (frameSize * frameRate)); return durationInSeconds; catch (Exception e) e.printStackTrace(); return 0f; /** * 获取mp3语音文件播放时长(秒) mp3 * @param filePath * @return */ public static Float getMp3Duration(String filePath) try File mp3File = new File(filePath); MP3File f = (MP3File) AudioFileIO.read(mp3File); MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader(); return Float.parseFloat(audioHeader.getTrackLength()+""); catch(Exception e) e.printStackTrace(); return 0f; /** * 获取mp3语音文件播放时长(秒) * @param mp3File * @return */ public static Float getMp3Duration(File mp3File) try //File mp3File = new File(filePath); MP3File f = (MP3File) AudioFileIO.read(mp3File); MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader(); return Float.parseFloat(audioHeader.getTrackLength()+""); catch(Exception e) e.printStackTrace(); return 0f; /** * 得到pcm文件的毫秒数 * * pcm文件音频时长计算 * 同图像bmp文件一样,pcm文件保存的是未压缩的音频信息。 16bits 编码是指,每次采样的音频信息用2个字节保存。可以对比下bmp文件用分别用2个字节保存RGB颜色的信息。 16000采样率 是指 1秒钟采样 16000次。常见的音频是44100HZ,即一秒采样44100次。 单声道: 只有一个声道。 * * 根据这些信息,我们可以计算: 1秒的16000采样率音频文件大小是 2*16000 = 32000字节 ,约为32K 1秒的8000采样率音频文件大小是 2*8000 = 16000字节 ,约为 16K * * 如果已知录音时长,可以根据文件的大小计算采样率是否正常。 * @param filePath * @return */ public static long getPCMDurationMilliSecond(String filePath) File file = new File(filePath); //得到多少秒 long second = file.length() / 32000 ; long milliSecond = Math.round((file.length() % 32000) / 32000.0 * 1000 ) ; return second * 1000 + milliSecond;
-
视频文件工具类
package com.xz.thread.day2; import com.coremedia.iso.IsoFile; import java.io.IOException; /** * @description: * @author: xz * @create: 2022-08-21 */ public class VideoUtil /** * 获取视频文件的播放长度(mp4、mov格式) * @param videoPath * @return 单位为毫秒 */ public static long getMp4Duration(String videoPath) throws IOException IsoFile isoFile = new IsoFile(videoPath); long lengthInSeconds = isoFile.getMovieBox().getMovieHeaderBox().getDuration() / isoFile.getMovieBox().getMovieHeaderBox().getTimescale(); return lengthInSeconds; /** * 得到语音或视频文件时长,单位秒 * @param filePath * @return * @throws IOException */ public static long getDuration(String filePath) throws IOException String format = getVideoFormat(filePath); long result = 0; if("wav".equals(format)) result = AudioUtil.getDuration(filePath).intValue(); else if("mp3".equals(format)) result = AudioUtil.getMp3Duration(filePath).intValue(); else if("m4a".equals(format)) result = VideoUtil.getMp4Duration(filePath); else if("mov".equals(format)) result = VideoUtil.getMp4Duration(filePath); else if("mp4".equals(format)) result = VideoUtil.getMp4Duration(filePath); return result; /** * 得到语音或视频文件时长,单位秒 * @param filePath * @return * @throws IOException */ public static long getDuration(String filePath,String format) throws IOException long result = 0; if("wav".equals(format)) result = AudioUtil.getDuration(filePath).intValue(); else if("mp3".equals(format)) result = AudioUtil.getMp3Duration(filePath).intValue(); else if("m4a".equals(format)) result = VideoUtil.getMp4Duration(filePath); else if("mov".equals(format)) result = VideoUtil.getMp4Duration(filePath); else if("mp4".equals(format)) result = VideoUtil.getMp4Duration(filePath); return result; /** * 得到文件格式 * @param path * @return */ public static String getVideoFormat(String path) return path.toLowerCase().substring(path.toLowerCase().lastIndexOf(".") + 1);
-
测试类
package com.xz.thread.day2; import cn.hutool.core.date.DateUtil; import java.io.IOException; /** * @description: * @author: xz * @create: 2022-08-21 */ public class VideoUtilTest public static void main(String[] args) //音频路径 //String path = "D:\\\\data\\\\audio.mp3" ; //视频路径 String path = "D:\\\\data\\\\video.mp4" ; long result = 0; try result = VideoUtil.getDuration(path); catch (IOException e) e.printStackTrace(); String time =DateUtil.secondToTime((int)result); System.out.println(time);
- 音频文件时长输出结果
- 视频文件时长输出结果
以上是关于求助,m3u8视频文件获取MP4视频方法的主要内容,如果未能解决你的问题,请参考以下文章