[FFmpeg-user] Prove that video file does not have content removed or added

Peter White peter.white at posteo.net
Sat Jul 23 09:08:06 EEST 2016


André Luís Duarte wrote:
 > Hi guys
 >
 > I am involved with another project in computer forensic where I have
 > to prove that several video files are intact (was not added or
 > removed content). I thought it would be easy but I'm a little
 > difficulty.

I am pretty certain you cannot prove anything in the digital world.
Unless the original was cryptographically signed, someone wanting to
manipulate a video could just as easily use ffmpeg to make it
undetectable.
Want to remove frames? Select the ones you want to keep and let ffmpeg
create a new file from those. I mean, how can you assume someone being
able to add or remove content but at the same time they are unable to
manipulate the metadata?

Or what am I not getting?

 > I thought of running ffprobe command to see the file characteristics
 > and got the following output.
 > ffprobe sample01.AVI...
 >
 > Input #0, avi, from 'sample01.AVI':
 > Metadata:
 > creation_time   : 2012-05-15 17:37:35
 > encoder         : SONY DSC MJPEG 0100
 > Duration: 00:00:46.27, start: 0.000000, bitrate: 2833 kb/s
 > Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, 
bt470bg/unknown/unknown), 320x240, 2735 kb/s, 30 fps, 30 tbr, 30 tbn, 30 tbc
 > Metadata:
 > title           : SONY DSC MOVIE
 > Stream #0:1: Audio: pcm_mulaw ([7][0][0][0] / 0x0007), 11025 Hz, 1 
channels, s16, 88 kb/s
 >
 > I converted the video time duration (00:00:46.27) for seconds and got 
the value: (46*60)+27 = 2767 s

FWIW, that calculation is wrong. The duration *is* 46.27 seconds. No
need for any calculation.

 > I thought the logic was right, but to see the amount of frames in
 > the video with the command:
 >
 > ffprobe -show_frames -select_streams v:0 sample01.AVI
 >
 > I got a output information and the final of message is:
 >
 > [FRAME]t message repeated 692 times
 > media_type=video
 > stream_index=0
 > key_frame=1
 > pkt_pts=1387
 > pkt_pts_time=46.232871
 > pkt_dts=1387
 > pkt_dts_time=46.232871
 > best_effort_timestamp=1387
 > best_effort_timestamp_time=46.232871
 > pkt_duration=1
 > pkt_duration_time=0.033333
 > pkt_pos=16330824
 > pkt_size=11662
 > width=320
 > height=240
 > pix_fmt=yuvj422p
 > sample_aspect_ratio=N/A
 > pict_type=I
 > coded_picture_number=0
 > display_picture_number=0
 > interlaced_frame=0
 > top_field_first=0
 > repeat_pict=0
 > [/FRAME]
 >
 > I understand the output for the command, the pkt_pos line = 16330824
 > has the number of the frames in the video file.

It does not. pkt_pos is the start position of the frame in the file
in bytes. In this case though, pkt_pts happens to be the frame number.
But I would not count on that with other formats.


More information about the ffmpeg-user mailing list