我试图上传MS中只接受mp4格式的视频。我的问题是,当我通过在本地文件iex:video.3gp到video.mp4中重命名视频格式为.mp4时,我的唯一检查是扩展名。所以我问是否可以检查视频是否合法.mp4?或者检查视频是否最初不是.mp4?通过重命名更改视频类型
任何想法将不胜感激。 在此先感谢。
我试图上传MS中只接受mp4格式的视频。我的问题是,当我通过在本地文件iex:video.3gp到video.mp4中重命名视频格式为.mp4时,我的唯一检查是扩展名。所以我问是否可以检查视频是否合法.mp4?或者检查视频是否最初不是.mp4?通过重命名更改视频类型
任何想法将不胜感激。 在此先感谢。
视频格式太复杂了,只能重新命名文件或更改标题中的某些字节。通常,如果一个视频格式有变化,就可能会影响:
视频文件,这意味着如何将视频/音频数据和元数据包含的集装箱。正如你所提到的,mp4到3gp等等。在这种情况下,大部分比特流不会改变,因为有效载荷仍然是相同的,但是维持有效载荷数据的格式发生了巨大变化(想想xml和json格式有多少不同,但他们可以包含相同的有效载荷数据)
转码发生。在这种情况下,视频/音频数据被重新编码为其他格式,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.
帮助这有助于。
更改扩展名不会改变文件的格式 – panini 2014-10-09 02:38:26
嗨,感谢您的评论,你有想法如何检查除MIME类型以外的视频格式? – User 2014-10-09 02:51:00
我相信该文件的前几个字节告诉你一些有关容器和编解码器的使用情况,但那超出了我的专业领域 – panini 2014-10-09 02:57:32