2014-10-09 68 views
0

我试图上传MS中只接受mp4格式的视频。我的问题是,当我通过在本地文件iex:video.3gp到video.mp4中重命名视频格式为.mp4时,我的唯一检查是扩展名。所以我问是否可以检查视频是否合法.mp4?或者检查视频是否最初不是.mp4?通过重命名更改视频类型

任何想法将不胜感激。 在此先感谢。

+1

更改扩展名不会改变文件的格式 – panini 2014-10-09 02:38:26

+0

嗨,感谢您的评论,你有想法如何检查除MIME类型以外的视频格式? – User 2014-10-09 02:51:00

+0

我相信该文件的前几个字节告诉你一些有关容器和编解码器的使用情况,但那超出了我的专业领域 – panini 2014-10-09 02:57:32

回答

0

视频格式太复杂了,只能重新命名文件或更改标题中的某些字节。通常,如果一个视频格式有变化,就可能会影响:

视频文件,这意味着如何将视频/音频数据和元数据包含的
  1. 集装箱。正如你所提到的,mp4到3gp等等。在这种情况下,大部分比特流不会改变,因为有效载荷仍然是相同的,但是维持有效载荷数据的格式发生了巨大变化(想想xml和json格式有多少不同,但他们可以包含相同的有效载荷数据)

  2. 转码发生。在这种情况下,视频/音频数据被重新编码为其他格式,H.264到H.263,MPEG-4 ASP等,那么您可以预期新文件是一个完全不同的文件,其中没有任何类似原始文件。另外,如果您播放该文件,视频的主观质量也会有很大差异,因为大多数压缩是有损的。

说了这么多,你需要一个转码工具来帮助你实现你期望的。比如ffmpeg。

在你的情况下,从3GP转换视频文件的MP4,无需转码,您可以:

ffmpeg -i video.3gp -vcodec copy -acodec copy video.mp4 

输出video.mp4文件包绕ISO MP4格式的协议,并且可以用作“真正的'mp4文件。

要确定视频文件是哪种格式,最流行的选项是ffprobe(可从ffmpeg获得)和mediainfo。 mediainfo可能在这类信息上更具体一些。例如:

mediainfo --Inform=General input.mp4: 

会告诉你每种格式有关的东西:

General 
Complete name       : input.mp4 
Format         : MPEG-4 
Format profile       : Base Media 
Codec ID         : isom 
File size        : 272 MiB 
Duration         : 3mn 48s 
Overall bit rate       : 9 974 Kbps 
Writing application      : libte 3.0 

... 

具体地说,可以提取由格式信息:

mediainfo --Inform="General;%Format%" input.mp4, which will yield "MPEG-4" output. 

帮助这有助于。

+0

嗨,我不想转换它。我只需要知道如何检查视频是否是合法的.mp4,而不仅仅是重命名。 – User 2014-10-14 02:35:43

+0

Ohh对不起,错过了你的问题,在这种情况下,你可能想检查ffprobe或mediainfo。 – JasonYang 2014-10-14 02:54:33

+0

请检查编辑的答案是否可以解决您的问题。 – JasonYang 2014-10-14 03:03:55