我有一个包含大量视频文件的服务器。恢复后,我注意到几个文件的校验和发生了变化。由于我没有所有文件的校验和,我想编写一个脚本来验证文件的完整性。档案(tar t
,unzip -t
,rar t
等)或图片(convert image.jpg /tmp/test.png
)很简单。
我需要将哪些选项传递给mplayer
或vlc
或Linux上的任何其他视频工具以达到相同的效果(即验证文件内容而无需观看整个视频)?< / p>
答案 0 :(得分:6)
听起来你想做的是:
mplayer -vo null -ao null input.file
然后解析输出并返回值以查看它是否可以实际播放&amp;解码流。这将花费一些时间(但比实时更快)。如果你想要更快的东西,这里有一些更多的建议:
一件容易的事就是做一个
mplayer -identify -vo null -ao null
在文件上,然后解析输出并查看看起来合理的返回值。
关于校验和不正确,很难知道这是否是媒体播放器的问题(mplayer,vlc,totem等)。一个好的媒体播放器将容忍许多位或字节级错误,而对结果播放几乎没有影响。一个非常严格的媒体播放器会在看到格式错误或不正确的编解码器时退出。包装器字节。
要验证包装器(容器)字节,您可以执行类似
的操作mencoder -ovc copy -oac copy input.file -o output.file
问题是mencoder会想要为输出创建一个.avi文件。如果你的输入是.avi,那么这将是很好的。
您可以运行类似的ffmpeg命令行,如下所示:
ffmpeg -acodec copy -vcodec copy input.file output.file
如果文件是.mp4文件,您可能需要查看mp4box(http://www.videohelp.com/tools/mp4box)来执行类似的任务。 matroska工具也适合这种事情。 (http://www.matroska.org/)
答案 1 :(得分:2)
如果您使用的是MP4文件,可能需要查看 mpeg4ip 项目,特别是 mp4videoinfo 或 mp4info等工具即可。这可能足以满足您的需求,并且非常快。
从头版:
以下是我在诺基亚N95上拍摄的MP4的一些示例输出:
manoa:Movies stu$ mp4info 20081017001.mp4
mp4info version 1.5.0.1
20081017001.mp4:
Track Type Info
1 video MPEG-4 Unknown Profile(4), 3.620 secs, 2700 kbps, 640x480 @ 23.480663 fps
2 audio MPEG-4 AAC LC, 3.797 secs, 97 kbps, 48000 Hz
manoa:Movies stu$
manoa:Movies stu$
manoa:Movies stu$ mp4videoinfo 20081017001.mp4
mp4videoinfo version 1.5.0.1
tracks 1
mp4file 20081017001.mp4, track 1, samples 85, timescale 30000
sampleId 1, size 24110 time 0(0) VOP-I
sampleId 2, size 9306 time 4076(135) VOP-P
sampleId 3, size 13071 time 5104(170) VOP-P
... (a bunch more frames and a bit of info) ...
sampleId 59, size 8702 time 64975(2165) VOP-P
sampleId 60, size 8826 time 65980(2199) VOP-P
sampleId 61, size 9819 time 66966(2232) GOV VOP-I
sampleId 62, size 5591 time 67986(2266) VOP-P
... (a bunch more frames and a bit of info) ...
sampleId 83, size 10188 time 105546(3518) VOP-P
sampleId 84, size 6533 time 106585(3552) VOP-P
sampleId 85, size 6032 time 107601(3586) VOP-P
manoa:Movies stu$
答案 2 :(得分:2)
没有观看所有视频,没有“完美”的方式来做到这一点。
视频文件非常强大 - 作为一项实验,我拍摄了一个随机的MPEG-4视频文件,在十六进制编辑器中打开它并开始更改字节.. mplayer
并且Quicktime仍然无错误地播放。< / p>
在从mplayer获取任何错误之前,我必须删除数千个字节:
...
[mpeg4 @ 0x6762b0]marker does not match f_code
[mpeg4 @ 0x6762b0]marker does not match f_code
[mpeg4 @ 0x6762b0]concealing 852 DC, 852 AC, 852 MV errors
[mpeg4 @ 0x6762b0]header damaged: 0.055 16/ 16 15% 1% 3.5% 0 0
Error while decoding frame!
编写在每个视频上运行mplayer
的脚本并检查输出是否有错误消息/警告并不困难,但除非更改的字节在文件头中或大量数据中改变了,你永远都找不到它们
答案 3 :(得分:1)
由于mplayer有convert from one video format to another的选项可能对这样的测试足够好,假设mencoder如果无法解码输入文件则返回错误(我没有测试过)。这类似于你提到的图像测试 (convert image.jpg /tmp/test.png)
答案 4 :(得分:-1)
我建议你使用sha1sum,一个你可能已经拥有的命令行工具(如果没有,你可能也有md5sum,这对于这个工作没问题)...你需要做的就是比较stdout恢复之前和之后的sha1sum ......