h264格式的flv和mkv无损转换成mp4的方法

摘要:
如今,许多flv和mkv视频都封装在h264中。移动设备通常不支持这些格式的文件。由于视频转码非常耗时和CPU密集,如果flv和mkv最初使用h264封装,我将介绍几种方法将h264格式的flv和mkv无损转换为mp4。1、 通过ffmpeg转换为mkv文件ffmpeg(点击下载),可以非常快速地实现h264视频的分离和混合流。

现在很多flv和mkv视频都是采用的h264封装,移动设备往往并不支持这些格式的文件,但却对h264封装的mp4支持良好。因此,为了视频能在电脑和移动设备间共享,我通常会将其转换成h264封装的mp4文件。

由于视频转码非常耗时间和cpu,如果flv和mkv本来就是采用的h264封装,完全不需要转码,只需要把h264视频和音频文件分离出来,重新混流一次即可,十几秒内即可完成,非常快速,并且由于没有转码操作,也避免了转码过程的画面损失。

下面我就介绍几种将h264格式的flv和mkv无损转换为mp4的方法。

一、通过ffmpeg转换mkv文件

ffmpge(点击下载)可以非常快速的实现h264视频的分离和混流,并且是命令行的操作,也没有什么参数需要设置,非常适合批量转换:

    ffmpeg.exe -i input.mkv -y -vcodec copy -acodec copy output.mp4

要实现批量转换,可以直接用这个批处理文件:

    for %%i in (*.mkv) do ffmpeg.exe -i "%%i" -vcodec copy -acodec copy "%%~ni.mp4"

二、通过FlvExtract + mp4box转换mkv文件

这个方法本身也支持转换flv文件,但是ffmpeg貌似对flv的支持不够好,很容易转换失败。对于flv文件,往往采用下面所述的方法。

  1. 通过FlvExtract把flv文件分离为视频和音频文件
  2. 通过mp4box将视频和音频文封装起来。

命令行如下:

    FLVExtractCL.exe -a -v input.flv
    mp4box -add input.264 -add input.aac -new output.mp4

另外,mkv的转换其实也可以先分离出视频和音频,然后调用mp4box封装,但是我试过一下,不仅较为麻烦,并且fps等参数控制不好时容易声音不同步,因此不推荐。

三、通过mp4box无损连接mp4文件

很多时候,当我们从视频网站上下载的视频是分成好几段的,这个时候就需要将转换后的视频文件连接成一个完整的视频,可以通过mp4box实现这一功能。

    mp4box -cat a.mp4 -cat b.mp4 -new total.mp4

其实这个和上面的mp4混流命令的用法是一样的。

需要注意的是,这个方法只适用于同样的大小、码率的视频。不满足这个要求的视频需要转码为一致的才能顺利合并。

四、通过mp4box无损截取视频片段

有的时候,我们往往需要剪辑视频中的一部分片段(如op等)保留下来,mp4box同样可以实现这个功能。

    mp4box -splitx 9:31.5-out output.mp4 input.mp4

这个命令一共需要传入四个参数:1. 输入视频文件 2.开始时间 3.结束时间 4. 输出文件。其中开始时间和结束时间以秒为单位,支持小数。如果不指定输出文则自动重命名。

免责声明:文章转载自《h264格式的flv和mkv无损转换成mp4的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java根据条件删除Map中元素springboot2.2.6 elasticsearch 6.8.7 多条件查询、高亮显示、分页下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

git暂存区

  在使用git开发时,有三个概念需要知道,工作区,暂存区和版本库。工作区就是直接进行操作的地方,版本库是要将修改提交的地方,那么暂存区是干什么的呢?下面将对暂存区深入研究。   一.修改后能直接提交吗?   在工作区修改后能直接执行git commit提交吗?让我们一起试试。   首先修改welcome.txt文件   echo "welcome">...

C# winform自动更新 (附 demo下载)

随着需求的变化,如果Server每次更新出新的内容,Client都要重新安装的话。 太过于复杂化。  所以自动更新是很有必要的。 一、.NET自带的更新方式    以服务器端为主  (自动更新,微软爸爸肯定是有的。 有点:简单方便,便于维护; 缺点:用户没有自己的选择权,一切以服务端为主,每次更新之后,都是全新,继承不了上版本的配置;文件安装位置不可控 )...

rsync常用命令及格式

rsync在同步文件夹内容这个工作上应用非常广泛,但是rsync本身命令还是比较复杂,本文总结一下: rsync = remote sync的简称 ,它 被用于在linux/unix系统中执行备份操作。rsnync用于从一个位置到另外一个位置同步文件和文件夹。备份的地址可以是本地也可以是remote server。 rsync的重要功能: speed 首次...

在Linux中samba server的配置

1、查看是否安装samba服务 # rpm –qa |grep samba 2、若没安装,则安 # yum install samba 执行4次此命令 3、查看安装的samba文件 #rpm–qa |grep samba 4、改动配置文件 # vim /etc/samba/smb.conf 注意: A: 做匿名訪问sambaserver——改动例如以下:...

用configmap管理配置

一、ConfigMap介绍管理配置: ConfigMap介绍 Secret 可以为 Pod 提供密码、Token、私钥等敏感数据;对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ConfigMap 的创建和使用方式与 Secret 非常类似,主要的不同是数据以明文的形式存放。 与 Secret 一样,ConfigMap 也支持四种创...

flume使用之httpSource

flume自带很长多的source,如:exe、kafka...其中有一个非常简单的source——httpsource,使用httpSource,flume启动后会拉起一个web服务来监听指定的ip和port。常用的使用场景:对于有些应用环境中,不能部署Flume SDK及其依赖项,可以在代码中通过HTTP而不是Flume的PRC发送数据的情况,此时HT...