我正在尝试上传只接受mp4格式的MS视频。我的问题是当我通过在本地文件iex:video.3gp中将其重命名为video.mp4而将视频格式更改为.mp4时,我的唯一检查是扩展名。所以我想问是否可以检查视频是否合法.mp4?或者检查视频是否最初不是.mp4?
任何想法都将受到高度赞赏。 提前谢谢。
答案 0 :(得分:0)
视频格式太复杂了,只是重命名文件或更改标题处的一些字节。通常,如果视频格式发生变化,则可能会影响:
视频文件的容器,表示视频/音频数据和元数据的包含方式。正如你所提到的,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.
帮助这有帮助。