使用ffmpeg可以从m4s音频和视频文件生成mp4文件,命令为

ffmpeg -i audio.m4s -i video.m4s -codec copy 1.mp4

java提供Process类来模拟执行命令行。
需要在项目资源路径下放置ffmpeg.exe

package com.client.util;import com.client.spider.w12.bilibili.core.Progress;
import com.client.spider.w12.bilibili.exception.FileUnexpectedEndException;import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/** 从m4s音频和视频文件生成mp4<br/>* 使用ffmpeg命令进行,命令为<br/>* ffmpeg -i audio.m4s -i video.m4s -codec copy 1.mp4<br/>* 需要在项目资源路径下放置ffmpeg.exe*/
public class TransCoding {/**如果文件存在,删除文件*/public static void deleteIfExist(String pathname){File file=new File(pathname);if(file.exists()){file.delete();}}public static boolean checkExist(String pathname){File file=new File(pathname);return file.exists();}//ffmpeg程序的位置private static String ffmpeg="\\ffmpeg.exe";;public void createMp4FromM4s(String audioPath,String videoPath,String output){if(!checkExist(audioPath)|| !checkExist(videoPath))throw new RuntimeException("输入文件不存在");deleteIfExist(output);System.out.println("生成文件中 "+output);String command=ffmpeg+" -i "+audioPath+" -i "+videoPath+" -codec copy "+output;exec(Arrays.asList(command.split(" ")));}public void createMp4FromM4sInNewThread(String audioPath,String videoPath,String output,Runnable additionTask){new Thread(()->{createMp4FromM4s(audioPath, videoPath, output);if(additionTask!=null)additionTask.run();}).start();}/*** 模拟命令行执行命令* @param command   命令* @return  true-成功 false-失败*/private boolean exec(List<String> command){ProcessBuilder processBuilder = new ProcessBuilder();processBuilder.command(command);try {processBuilder.redirectErrorStream(true);Process process = processBuilder.start();new StreamHandler(process.getInputStream()).start();process.waitFor();process.destroy();} catch (IOException e) {e.printStackTrace();return false;} catch (InterruptedException e) {e.printStackTrace();}return true;}//读取输出,防止阻塞static class StreamHandler extends Thread {private InputStream in;public StreamHandler(InputStream in) {this.in = in;}public void run() {try {BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line;while ((line = reader.readLine()) != null) {//System.out.println(Thread.currentThread().getName() + "\t" + line);}} catch (Exception e) {System.out.println(Thread.currentThread().getName() + "\t" + e.getMessage());}}}public static void main(String[] args) {String v="D:\\magnetCatcher\\test\\BV1HZ4y117zQ\\Video.m4s";String a="D:\\magnetCatcher\\test\\BV1HZ4y117zQ\\Audio.m4s";String o="D:\\magnetCatcher\\test\\BV1HZ4y117zQ\\Video.mp4";new TransCoding().createMp4FromM4s(a,v,o);}
}

经测试,该类可以转化B站的缓存视频。对于几十兆大小的视频,转化时间在秒级内。

将m4s文件转为mp4相关推荐

  1. 使用ffmpeg将m3u8文件转为mp4

    window环境使用ffmpeg将m3u8文件转为mp4 issue: 不存在 ffmpeg 去ffmpeg官网下载一个, 然后指派系统变量path, 我下的是https://github.com/B ...

  2. 【向生活低头】将flv格式文件转为mp4

    b站的视频用you-get下载的是flv格式,但是电脑自带的播放器又播放不了flv,这就有点麻烦.于是上网查找将flv格式转为mp4格式的方法,结果都要用到ffmpeg,跟着一个教程做了一下,下载了f ...

  3. .avi文件转为.mp4

    在学习中需要实现如下需求: 前端网页上传一段视频文件至服务器,服务器后端将视频转换为一帧一帧做图像处理,然后通过VideoWriter将图片转换为视频,最后希望再将视频在前端网页上显示出来. 但有一个 ...

  4. 快速实现B站(B ili b ili)手机缓存m4s文件转mp4(批量升级版)

    经过几天奋战,终于应朋友要求,开发出了升级版的B站缓存m4s转mp4软件,这次功能更强大,操作更便捷.适合很多个缓存一起转,不用一个一个点了. 先看一下界面: 只要对着文件双击,就可以自动转换,而且是 ...

  5. 使用ffmpeg将mts格式视频文件转为mp4视频文件

    mts格式的视频文件是索尼相机拍摄后生成存储的,但是我们的实验时常会需要mp4格式的视频文件,因此可以使用ffmpeg对其进行转化 指令: ffmpeg -i box.MTS -s 640x480 - ...

  6. 如何将flv文件转为mp4文件?一个简单的解决办法

    看到有要用python的但是感觉有点复杂 解决办法 1.打开b站 2.下载必剪app 3.导入flv到必剪 4.点导出为mp4 即可 杀鸡就要用牛刀 哈哈

  7. mkv文件如何转为mp4?

    mkv文件如何转为mp4?mkv格式并非是压缩格式的一种,而是Matroska的一种媒体文件,其最大的特点就是能容纳多种不同类型编码的视频.音频及字幕流.也因其格式的特殊性,使得很多软件不能打开mkv ...

  8. 爱奇艺qsv视频文件怎么转为mp4的格式

    爱奇艺qsv转mp4?qsv是爱奇艺播放器中的视频播放格式,要想将qsv视频文件在其他播放器中打开的话,比较简单的操作就是转换视频文件的格式了,那么今天为大家带来的是qsv视频文件转为mp4的操作方法 ...

  9. 如何快速无损地把flv格式文件转换为mp4格式(可在iPhone上播放)

    众所周知,mp4格式文件是现在非常主流且高质的视频格式.flv格式相对于mp4格式的视频来说,适用范围比较窄,现在很多播放器也都不支持播放flv格式的视频.解决办法也简单,用MP4/RM转换专家把fl ...

最新文章

  1. 6、函数返回值、this、递归及回调函数
  2. nginx搭建文件服务器脚本,nginx搭建web服务器,配置端口复用
  3. HDU-1028 Ignatius and the Princess III(生成函数)
  4. ElasticSearch常用命令记录
  5. rabbitmq rpc
  6. 修复2008r2 rpc服务器,windows server 2008R2 复制问题(RPC服务不可用)
  7. 正则表达+验证 [记录]
  8. C++编程技术应用有哪些?
  9. html中展开的小箭头,HTML5 移动网页应用中的展开式标签(带上下指示箭头)
  10. JavaScript小数运算出现多位的解决办法
  11. Centos66 编译 Freeswitch mod_shout mp3录音模块
  12. 海康摄像头激活时报 错误2105
  13. 《MySQL数据库》关联查询
  14. 如何让双十一数据大屏讲出故事?设计有口诀
  15. AutoCAD2017下载安装教程
  16. 基于cooja的RPL OF的修改与仿真
  17. 安卓手机和电脑之间传文件最方便的方法
  18. 次坐标从0开始_中考热点专题突破精讲精练3: 与坐标系中的有关热点问题
  19. 代号“凤凰”,阿里新零售秘密武器,今年要打入100个城市...
  20. waterfilling之二

热门文章

  1. 不要再使用TCHAR和_T了
  2. 找学习资料的网址/地方
  3. 认识世界的基础——系统概述-1
  4. 基于ESP32的开源定时浇花系统
  5. program received signal sigsegv,Segmentation fault的解释(可能并不全面)
  6. 蛋白质相互作用位点标签的获取方法
  7. 云计算对电子商务的应用优势
  8. 云原生周刊 | 美国国防部发布零信任战略与路线图
  9. Win10任务栏软件图标变成白色如何解决?
  10. Eigen的介绍、安装