Pépin is a web image & video player with features like zoom, pan, comparisons, fullscreen, gapless videos playback, frame-by-frame scrubbing and annotations (shapes, text, Bézier freehand drawing)
Pépin (Pépin est un Espace de Prévisualisation IntraNet) is a full-featured web-based image and video player. It was designed for AV professionals at TAT Studio, an animation studio based in Toulouse, France.
Key features are :
Pépin was mainly designed for its video features, allowing comparisons between different output, playback of a sequence of videos directly in the browser (without using a video editing software) and frame-by-frame inspection.
Some of theses features can be found in video review projects like frame.io, shotgun or wipster. Solutions rarely provide frame-accurate scrubbing.
Online demo at http://dornstetter.com/antoine/pepin/. Wait for medias to download.
Pépin was tested on Firefox and Chrome.
(A) Overall appearance :
(B) Media comparison example :
This feature also works with videos on Firefox and sometimes Chrome.
© Gapless video playlist example with 4 sequences of Big Buck Bunny :
(D) Example of annotations with text, a circle, freehand drawings, a point and different colors :
Pépin UI includes :
My research were focused on trying to get every frame out of H.264 mp4 file. I have found that you have to encode the video without Bipredictive frames. Theses are the frames that disappears when the video is paused and the video scrubbed (modifying the currentTime
variable when video is paused), both with Firefox and Chrome.
You can encode with ffmpeg and libx264
with the -bf 0
argument in order to remove B-Frames.
Note : There is no way to know for sure which frame is displayed by the browser video plugin.
To do : create a script that produces a video with enough data in each frame to ID them, create a web page that test if every frame of the video file can be accessed.
Pépin on the client side uses VueJS v1.0, jQuery and screenfull.
Pépin back-end is based on the webpack vue-js boilerplate.
Install dependencies with npm install
before running one of theses two commands :
npm run dev
Serves index.html5
on localhost:8080
npm run build
Builds the dist folder with javascript compiled, css, images (some are minified into the CSS), and static javascript libraries.
filmStrip.py
ScriptThis script is useful for creating video thumbnails in Pépin :
You need to install Python, Pillow (pip install Pillow
) and ffmpeg / ffprobe in order to use this script.
Example of command line to use this script : python filmStrip.py --video "your_video.mp4" --output "your_video_thumb.jpg"
To understand what every file is about :
An example of using Pépin is given in index.html5
, with sidebar’s content customized.
First include in your HTML JS libraries and CSS :
<script type="text/javascript" src="pepin/lib/jquery.js"></script>
<script type="text/javascript" src="pepin/lib/jquery.easing.1.3.js"></script>
<script type="text/javascript" src="pepin/lib/jquery.mousewheel.js"></script>
<script type="text/javascript" src="pepin/lib/screenfull.js"></script>
<script type="text/javascript" src="pepin/manifest.js"></script>
<script type="text/javascript" src="pepin/vendor.js"></script>
<script type="text/javascript" src="pepin/app.js"></script></body>
<link href="pepin/app.[hash].css" rel="stylesheet" />
CreatePepinObject(obj)
function is automatically added to window.Pepin.default
.
obj
has 4 properties :
$
and screenfull
: jQuery and screenfull.js
dependencies injection ;pepinElement
: CSS selector to find the main pepin node ;medias
: array of Medias object { Name , URL , ThumbnailURL , Type , ID [ , Group , Notes ] }
.This function returns an object that you can modify if you want to customize the sidebar or respond to some Pepin events. You have to give this object back to VueJS, automatically added to window.Pepin.default
. See code and index.html5
for more information.
v-if
and v-for
on the same elements (vuejs warnings) ;Interesting features to be added are :
Pépin is licensed with the GNU Lesser General Public License LGPL.
Do not use in production.
Pépin was developed by Antoine Dornstetter, as part of its end-of-studies internship at TAT Studio from April to September 2016. Thanks to Stéphane Margail, Laurent Chea and Romain Teyssonnière.
![Pepin Logo](github/tat-productions.png)