Android 通过重命名更改视频类型

Android 通过重命名更改视频类型,android,video,mp4,Android,Video,Mp4,我正在尝试上传只接受mp4格式的MS视频。我的问题是,我将本地文件iex:video.3gp中的视频格式重命名为video.mp4,从而将视频格式更改为.mp4,而我唯一的检查是扩展名。所以我想问,是否有可能检查视频是否合法。mp4?或者检查视频是否不是原始的。mp4 任何想法都将受到高度赞赏。 提前感谢。视频格式太复杂了,无法重命名文件或更改标题处的某些字节。通常,如果视频格式已更改,则可能会影响: 视频文件的容器,表示如何包含视频/音频数据和元数据。正如您所提到的,mp4到3gp等。在这种情

我正在尝试上传只接受mp4格式的MS视频。我的问题是,我将本地文件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.
    

    帮助这有帮助。

    更改扩展名不会更改文件格式。谢谢您的评论,您知道如何检查除mime类型之外的视频格式吗?我相信文件的前几个字节告诉您有关使用的容器和编解码器的信息,但这超出了我的专业领域。嗨,我不想转换它。我只需要知道如何检查视频是否合法。mp4,而不仅仅是重命名。哦,对不起,错过了您的问题,在这种情况下,您可能需要检查ffprobe或mediainfo。请检查编辑的答案是否可以解决您的问题。