Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理来自不同来源的不同.mp4文件类型?_C#_Video_Ffmpeg_Mp4 - Fatal编程技术网

C# 如何处理来自不同来源的不同.mp4文件类型?

C# 如何处理来自不同来源的不同.mp4文件类型?,c#,video,ffmpeg,mp4,C#,Video,Ffmpeg,Mp4,如果我在我的手机(三星S5)上录制了一个.mp4,并使用下面的命令将其通过FFmpeg,则输出文件(fileX.avi)是一个灰度位图未压缩视频文件 fileX.avi(从FFmpeg输出)中允许我定位视频帧数据的偏移量值对于文件头始终为5680字节 帧间报头为62字节 数据是未压缩的RGB24,因此我可以从高度x宽度x 3轻松计算视频帧的大小 因此,我的C#应用程序可以始终以上述偏移量访问fileX.avi中的视频帧。 (这很有效) 我的FFmpeg命令是: ffmpeg.exe -i s

如果我在我的手机(三星S5)上录制了一个.mp4,并使用下面的命令将其通过FFmpeg,则输出文件(
fileX.avi
)是一个灰度位图未压缩视频文件

  • fileX.avi
    (从FFmpeg输出)中允许我定位视频帧数据的偏移量值对于文件头始终为5680字节

  • 帧间报头为62字节

  • 数据是未压缩的RGB24,因此我可以从高度x宽度x 3轻松计算视频帧的大小

因此,我的C#应用程序可以始终以上述偏移量访问
fileX.avi
中的视频帧。
(这很有效)

我的FFmpeg命令是:

ffmpeg.exe -i source.mp4 -b 1150 -r 20.97 -g 120 -an -vf format=gray -f rawvideo -pixfmt gray -s 384x216 -vcodec rawvideo -y fileX.avi
然而。。。我最近从另一个来源获取了一个.mp4文件(由Power Director 14生成,而不是直接从我的手机生成),并将其用作输入
source.mp4
。但是现在
fileX.avi
的结构有所不同,因为在
fileX.avi
中,从开始到5680+62字节的偏移值不会使我位于视频数据帧的开始

对于.mp4,似乎有不同的文件格式——很明显,如果有,我的粗略偏移方法将无法适用于所有文件格式。在我编写代码时,我怀疑我的方法是一个非常简单的解决方案

那么,有人能就我现在应该采取的方法提出建议吗?我是否应该检查原始的.mp4或输出文件(
fileX.avi
),以确定可以确定不同偏移量的“文件类型”


至少我需要能够识别运行的.mp4文件的“类型”,以便声明将与我的软件一起运行的类型。

关于(1)“输出是位图未压缩视频文件”您输出的文件类型是什么?(2) “文件头的值总是5680字节”,所以这不可能是MP4文件,你在说什么?。。。(3) 尝试以FFmpeg格式输出
.rgb
格式,然后您可以通过
宽度x高度x 3
找到每个帧的字节大小(研究如何输出24位rgb视频帧)…PS:FFmpeg标志来制作24位rgb视频
-f rawvideo-pix_fmt rgb24
对不起,我能理解您对我的措辞有点困惑。我要询问的文件是从FFMPEG输出的文件,通过使用我所说的命令,它生成一个灰度24bpp的原始视频数据文件,这正是我想要的。然而,在我看来,当.mp4输入从不同的源生成时,并不总是能够在FFMPEG输出中使用相同的偏移值来访问帧数据。我需要的是一个FFMPEG命令,它将始终保证输出相同的原始视频24bpp格式,在该格式中,我可以使用相同的偏移值来访问帧数据进入文件并获取.mp4输入的所有变体的视频帧。这是解决方案还是您仍然需要解决方案?关于(1)“输出是位图未压缩视频文件”您输出的文件类型是什么?(2) “文件头的值总是5680字节”,所以这不可能是MP4文件,你在说什么?。。。(3) 尝试以FFmpeg格式输出
.rgb
格式,然后您可以通过
宽度x高度x 3
找到每个帧的字节大小(研究如何输出24位rgb视频帧)…PS:FFmpeg标志来制作24位rgb视频
-f rawvideo-pix_fmt rgb24
对不起,我能理解您对我的措辞有点困惑。我要询问的文件是从FFMPEG输出的文件,通过使用我所说的命令,它生成一个灰度24bpp的原始视频数据文件,这正是我想要的。然而,在我看来,当.mp4输入从不同的源生成时,并不总是能够在FFMPEG输出中使用相同的偏移值来访问帧数据。我需要的是一个FFMPEG命令,它将始终保证输出相同的原始视频24bpp格式,在该格式中,我可以使用相同的偏移值来访问帧数据进入文件并抓取.mp4输入的所有变体的视频帧。这是解决方案还是仍然需要解决方案?