
Recherche avancée
Autres articles (64)
-
Contribute to a better visual interface
13 avril 2011MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community. -
Qualité du média après traitement
21 juin 2013, parLe bon réglage du logiciel qui traite les média est important pour un équilibre entre les partis ( bande passante de l’hébergeur, qualité du média pour le rédacteur et le visiteur, accessibilité pour le visiteur ). Comment régler la qualité de son média ?
Plus la qualité du média est importante, plus la bande passante sera utilisée. Le visiteur avec une connexion internet à petit débit devra attendre plus longtemps. Inversement plus, la qualité du média est pauvre et donc le média devient dégradé voire (...) -
Qu’est ce qu’un éditorial
21 juin 2013, parEcrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
Vous pouvez personnaliser le formulaire de création d’un éditorial.
Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)
Sur d’autres sites (8886)
-
Working on images asynchronously
To get my quota on buzzwords for the day we are going to look at using ZeroMQ and Imagick to create a simple asynchronous image processing system. Why asynchronous ? First of all, separating the image handling from a interactive PHP scripts allows us to scale the image processing separately from the web heads. For example we could do the image processing on separate servers, which have SSDs attached and more memory. In this example making the images available to all worker nodes is left to the reader.
Secondly, separating the image processing from a web script can provide more responsive experience to the user. This doesn’t necessarily mean faster, but let’s say in a multiple image upload scenario this method allows the user to do something else on the site while we process the images in the background. This can be beneficial especially in cases where users upload hundreds of images at a time. To achieve a simple distributed image processing infrastructure we are going to use ZeroMQ for communicating between different components and Imagick to work on the images.
The first part we are going to create is a simple “Worker” -process skeleton. Naturally for a live environment you would like to have more error handling and possibly use pcntl for process control, but for the sake of brewity the example is barebones :
-
< ?php
-
-
define (’THUMBNAIL_ADDR’, ’tcp ://127.0.0.1:5000’) ;
-
define (’COLLECTOR_ADDR’, ’tcp ://127.0.0.1:5001’) ;
-
-
class Worker {
-
-
private $in ;
-
private $out ;
-
-
public function __construct ($in_addr, $out_addr)
-
{
-
$context = new ZMQContext () ;
-
-
$this->in = new ZMQSocket ($context, ZMQ: :SOCKET_PULL) ;
-
$this->in->bind ($in_addr) ;
-
-
$this->out = new ZMQSocket ($context, ZMQ: :SOCKET_PUSH) ;
-
$this->out->connect ($out_addr) ;
-
}
-
-
public function work () {
-
while ($command = $this->in->recvMulti ()) {
-
if (isset ($this->commands [$command [0]])) {
-
echo "Received work" . PHP_EOL ;
-
-
$callback = $this->commands [$command [0]] ;
-
-
array_shift ($command) ;
-
$response = call_user_func_array ($callback, $command) ;
-
-
if (is_array ($response))
-
$this->out->sendMulti ($response) ;
-
else
-
$this->out->send ($response) ;
-
}
-
else {
-
error_log ("There is no registered worker for $command [0]") ;
-
}
-
}
-
}
-
-
public function register ($command, $callback)
-
{
-
$this->commands [$command] = $callback ;
-
}
-
}
-
?>
The Worker class allows us to register commands with callbacks associated with them. In our case the Worker class doesn’t actually care or know about the parameters being passed to the actual callback, it just blindly passes them on. We are using two separate sockets in this example, one for incoming work requests and one for passing the results onwards. This allows us to create a simple pipeline by adding more workers in the mix. For example we could first have a watermark worker, which takes the original image and composites a watermark on it, passes the file onwards to thumbnail worker, which then creates different sizes of thumbnails and passes the final results to event collector.
The next part we are going to create a is a simple worker script that does the actual thumbnailing of the images :
-
< ?php
-
include __DIR__ . ’/common.php’ ;
-
-
// Create worker class and bind the inbound address to ’THUMBNAIL_ADDR’ and connect outbound to ’COLLECTOR_ADDR’
-
$worker = new Worker (THUMBNAIL_ADDR, COLLECTOR_ADDR) ;
-
-
// Register our thumbnail callback, nothing special here
-
$worker->register (’thumbnail’, function ($filename, $width, $height) {
-
$info = pathinfo ($filename) ;
-
-
$out = sprintf ("%s/%s_%dx%d.%s",
-
$info [’dirname’],
-
$info [’filename’],
-
$width,
-
$height,
-
$info [’extension’]) ;
-
-
$status = 1 ;
-
$message = ’’ ;
-
-
try {
-
$im = new Imagick ($filename) ;
-
$im->thumbnailImage ($width, $height) ;
-
$im->writeImage ($out) ;
-
}
-
catch (Exception $e) {
-
$status = 0 ;
-
$message = $e->getMessage () ;
-
}
-
-
return array (
-
’status’ => $status,
-
’filename’ => $filename,
-
’thumbnail’ => $out,
-
’message’ => $message,
-
) ;
-
}) ;
-
-
// Run the worker, will block
-
echo "Running thumbnail worker.." . PHP_EOL ;
-
$worker->work () ;
As you can see from the code the thumbnail worker registers a callback for ‘thumbnail’ command. The callback does the thumbnailing based on input and returns the status, original filename and the thumbnail filename. We have connected our Workers “outbound” socket to event collector, which will receive the results from the thumbnail worker and do something with them. What the “something” is depends on you. For example you could push the response into a websocket to show immediate feeedback to the user or store the results into a database.
Our example event collector will just do a var_dump on every event it receives from the thumbnailer :
-
< ?php
-
include __DIR__ . ’/common.php’ ;
-
-
$socket = new ZMQSocket (new ZMQContext (), ZMQ: :SOCKET_PULL) ;
-
$socket->bind (COLLECTOR_ADDR) ;
-
-
echo "Waiting for events.." . PHP_EOL ;
-
while (($message = $socket->recvMulti ())) {
-
var_dump ($message) ;
-
}
-
?>
The final piece of the puzzle is the client that pumps messages into the pipeline. The client connects to the thumbnail worker, passes on filename and desired dimensions :
-
< ?php
-
include __DIR__ . ’/common.php’ ;
-
-
$socket = new ZMQSocket (new ZMQContext (), ZMQ: :SOCKET_PUSH) ;
-
$socket->connect (THUMBNAIL_ADDR) ;
-
-
$socket->sendMulti (
-
array (
-
’thumbnail’,
-
realpath (’./test.jpg’),
-
50,
-
50,
-
)
-
) ;
-
echo "Sent request" . PHP_EOL ;
-
?>
After this our processing pipeline will look like this :
Now, if we notice that thumbnail workers or the event collectors can’t keep up with the rate of images we are pushing through we can start scaling the pipeline by adding more processes on each layer. ZeroMQ PUSH socket will automatically round-robin between all connected nodes, which makes adding more workers and event collectors simple. After adding more workers our pipeline will look like this :
Using ZeroMQ also allows us to create more flexible architectures by adding forwarding devices in the middle, adding request-reply workers etc. So, the last thing to do is to run our pipeline and see the results :
Let’s create our test image first :
$ convert magick:rose test.jpg
From the command-line run the thumbnail script :
$ php thumbnail.php Running thumbnail worker..
In a separate terminal window run the event collector :
$ php collector.php Waiting for events..
And finally run the client to send the thumbnail request :
$ php client.php Sent request $
If everything went according to the plan you should now see the following output in the event collector window :
array(4) [0]=> string(1) "1" [1]=> string(56) "
/test.jpg" [2]=> string(62) " /test_50x50.jpg" [3]=> string(0) "" Happy hacking !
-
-
No sounds on Apple devices after encoding videos [migrated]
15 décembre 2013, par RicardoI'm having a problem setting up a media server.
Everything works just great except the sound of Apple devices, I'm not sure if that's something with "mute" on iOS or our codecs are just not compatible with iOS.OS :
Ubuntu 12.04
FFMPEG Config :
ffmpeg version 0.10.8-7:0.10.8-1~lucid1 Copyright 2000-2013 the FFmpeg developers
built on Sep 5 2013 19:50:14 with gcc 4.4.3
configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.8-1~lucid1' --libdir=/usr/lib --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib --enable-shared --disable-static
avcodec configuration: --arch=amd64 --disable-stripping --enable-pthreads --enable-runtime-cpudetect --extra-version='7:0.10.8-1~lucid1' --libdir=/usr/lib --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib --enable-shared --disable-static --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb
libavutil 51. 35.100 / 51. 35.100
libavcodec 53. 61.100 / 53. 61.100
libavformat 53. 32.100 / 53. 32.100
libavdevice 53. 4.100 / 53. 4.100
libavfilter 2. 61.100 / 2. 61.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 6.100 / 0. 6.100
libpostproc 52. 0.100 / 52. 0.100
Hyper fast Audio and Video encoderCodecs :
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...S.. = Supports draw_horiz_band
....D. = Supports direct rendering method 1
.....T = Supports weird frame truncation
------
D V D 4xm 4X Movie
D V D 8bps QuickTime 8BPS video
D A D 8svx_exp 8SVX exponential
D A D 8svx_fib 8SVX fibonacci
EV a64multi Multicolor charset for Commodore 64
EV a64multi5 Multicolor charset for Commodore 64, extended with 5th color (colram)
DEA D aac Advanced Audio Coding
D A D aac_latm AAC LATM (Advanced Audio Codec LATM syntax)
D V D aasc Autodesk RLE
DEA D ac3 ATSC A/52A (AC-3)
EA ac3_fixed ATSC A/52A (AC-3)
D A D adpcm_4xm ADPCM 4X Movie
DEA D adpcm_adx SEGA CRI ADX ADPCM
D A D adpcm_ct ADPCM Creative Technology
D A D adpcm_ea ADPCM Electronic Arts
D A D adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA
D A D adpcm_ea_r1 ADPCM Electronic Arts R1
D A D adpcm_ea_r2 ADPCM Electronic Arts R2
D A D adpcm_ea_r3 ADPCM Electronic Arts R3
D A D adpcm_ea_xas ADPCM Electronic Arts XAS
D A D adpcm_ima_amv ADPCM IMA AMV
D A D adpcm_ima_apc ADPCM IMA CRYO APC
D A D adpcm_ima_dk3 ADPCM IMA Duck DK3
D A D adpcm_ima_dk4 ADPCM IMA Duck DK4
D A D adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS
D A D adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD
D A D adpcm_ima_iss ADPCM IMA Funcom ISS
DEA D adpcm_ima_qt ADPCM IMA QuickTime
D A D adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG
DEA D adpcm_ima_wav ADPCM IMA WAV
D A D adpcm_ima_ws ADPCM IMA Westwood
DEA D adpcm_ms ADPCM Microsoft
D A D adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit
D A D adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit
D A D adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit
DEA D adpcm_swf ADPCM Shockwave Flash
D A D adpcm_thp ADPCM Nintendo Gamecube THP
D A D adpcm_xa ADPCM CDROM XA
DEA D adpcm_yamaha ADPCM Yamaha
DEA D alac ALAC (Apple Lossless Audio Codec)
D A D als MPEG-4 Audio Lossless Coding (ALS)
D A D amrnb Adaptive Multi-Rate NarrowBand
D A D amrwb Adaptive Multi-Rate WideBand
DEV amv AMV Video
D V D anm Deluxe Paint Animation
D V D ansi ASCII/ANSI art
D A D ape Monkey's Audio
DES ass Advanced SubStation Alpha subtitle
DEV D asv1 ASUS V1
DEV D asv2 ASUS V2
D A D atrac1 Atrac 1 (Adaptive TRansform Acoustic Coding)
D A D atrac3 Atrac 3 (Adaptive TRansform Acoustic Coding 3)
D V D aura Auravision AURA
D V D aura2 Auravision Aura 2
DEV D avrp Avid 1:1 10-bit RGB Packer
D V D avs AVS (Audio Video Standard) video
D V D bethsoftvid Bethesda VID video
D V D bfi Brute Force & Ignorance
D A D binkaudio_dct Bink Audio (DCT)
D A D binkaudio_rdft Bink Audio (RDFT)
D V binkvideo Bink video
D V D bintext Binary text
DEV D bmp BMP image
D A D bmv_audio Discworld II BMV audio
D V bmv_video Discworld II BMV video
D V D c93 Interplay C93
D V D camstudio CamStudio
D V D camtasia TechSmith Screen Capture Codec
D V D cavs Chinese AVS video (AVS1-P2, JiZhun profile)
D V D cdgraphics CD Graphics video
D V D cinepak Cinepak
DEV D cljr Cirrus Logic AccuPak
D A D cook COOK
D V D cyuv Creative YUV (CYUV)
DEA D dca DCA (DTS Coherent Acoustics)
D V D dfa Chronomaster DFA
D V dirac BBC Dirac VC-2
DEV D dnxhd VC3/DNxHD
DEV dpx DPX image
D A D dsicinaudio Delphine Software International CIN audio
D V D dsicinvideo Delphine Software International CIN video
DES dvbsub DVB subtitles
DES dvdsub DVD subtitles
DEV D dvvideo DV (Digital Video)
D V D dxa Feeble Files/ScummVM DXA
D V D dxtory Dxtory
DEA D eac3 ATSC A/52 E-AC-3
D V D eacmv Electronic Arts CMV video
D V D eamad Electronic Arts Madcow Video
D V D eatgq Electronic Arts TGQ video
D V eatgv Electronic Arts TGV video
D V D eatqi Electronic Arts TQI Video
D V D escape124 Escape 124
D V D escape130 Escape 130
DEV D ffv1 FFmpeg video codec #1
DEVSD ffvhuff Huffyuv FFmpeg variant
DEA D flac FLAC (Free Lossless Audio Codec)
DEV D flashsv Flash Screen Video
DEV D flashsv2 Flash Screen Video Version 2
D V D flic Autodesk Animator Flic video
DEVSD flv Flash Video (FLV) / Sorenson Spark / Sorenson H.263
D V D fraps Fraps
D V D frwu Forward Uncompressed
DEA D g722 G.722 ADPCM
DEA g723_1 G.723.1
DEA D g726 G.726 ADPCM
D A D g729 G.729
DEV D gif GIF (Graphics Interchange Format)
D A D gsm GSM
D A D gsm_ms GSM Microsoft variant
DEV D h261 H.261
DEVSDT h263 H.263 / H.263-1996
D VSD h263i Intel H.263
EV h263p H.263+ / H.263-1998 / H.263 version 2
D V D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
D V D h264_vdpau H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)
DEVSD huffyuv Huffyuv / HuffYUV
D V D idcinvideo id Quake II CIN video
D V D idf iCEDraw text
D V D iff_byterun1 IFF ByteRun1
D V D iff_ilbm IFF ILBM
D A D imc IMC (Intel Music Coder)
D V D indeo2 Intel Indeo 2
D V indeo3 Intel Indeo 3
D V indeo4 Intel Indeo Video Interactive 4
D V indeo5 Intel Indeo Video Interactive 5
D A D interplay_dpcm DPCM Interplay
D V D interplayvideo Interplay MVE video
DEV j2k JPEG 2000
DEV D jpegls JPEG-LS
D V D jv Bitmap Brothers JV video
D V kgv1 Kega Game Video
D V D kmvc Karl Morton's video codec
D V D lagarith Lagarith lossless
DEA D libgsm libgsm GSM
DEA D libgsm_ms libgsm GSM Microsoft variant
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
DEA D libopencore_amrnb OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band
D A D libopencore_amrwb OpenCORE Adaptive Multi-Rate (AMR) Wide-Band
DEV D libopenjpeg OpenJPEG based JPEG 2000 encoder
DEV libschroedinger libschroedinger Dirac 2.2
DEA D libspeex libspeex Speex
EV libtheora libtheora Theora
EA libvorbis libvorbis Vorbis
DEV libvpx libvpx VP8
EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
EV libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB
EV ljpeg Lossless JPEG
D V D loco LOCO
D A D mace3 MACE (Macintosh Audio Compression/Expansion) 3:1
D A D mace6 MACE (Macintosh Audio Compression/Expansion) 6:1
D V D mdec Sony PlayStation MDEC (Motion DECoder)
D V D mimic Mimic
DEV D mjpeg MJPEG (Motion JPEG)
D V D mjpegb Apple MJPEG-B
D A D mlp MLP (Meridian Lossless Packing)
D V D mmvideo American Laser Games MM Video
D V D motionpixels Motion Pixels video
D A D mp1 MP1 (MPEG audio layer 1)
D A D mp1float MP1 (MPEG audio layer 1)
DEA D mp2 MP2 (MPEG audio layer 2)
D A D mp2float MP2 (MPEG audio layer 2)
D A D mp3 MP3 (MPEG audio layer 3)
D A D mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3adufloat ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A D mp3float MP3 (MPEG audio layer 3)
D A D mp3on4 MP3onMP4
D A D mp3on4float MP3onMP4
D A D mpc7 Musepack SV7
D A D mpc8 Musepack SV8
DEVSDT mpeg1video MPEG-1 video
D V DT mpeg1video_vdpau MPEG-1 video (VDPAU acceleration)
DEVSDT mpeg2video MPEG-2 video
DEVSDT mpeg4 MPEG-4 part 2
D V DT mpeg4_vdpau MPEG-4 part 2 (VDPAU)
D VSDT mpegvideo MPEG-1 video
D V DT mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration)
D VSDT mpegvideo_xvmc MPEG-1/2 video XvMC (X-Video Motion Compensation)
DEVSD msmpeg4 MPEG-4 part 2 Microsoft variant version 3
D VSD msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1
DEVSD msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2
D V D msrle Microsoft RLE
DEV D msvideo1 Microsoft Video-1
D V D mszh LCL (LossLess Codec Library) MSZH
D V D mxpeg Mobotix MxPEG video
DEA D nellymoser Nellymoser Asao
D V D nuv NuppelVideo/RTJPEG
DEV D pam PAM (Portable AnyMap) image
DEV D pbm PBM (Portable BitMap) image
DEA D pcm_alaw PCM A-law
D A D pcm_bluray PCM signed 16|20|24-bit big-endian for Blu-ray media
D A D pcm_dvd PCM signed 20|24-bit big-endian
DEA D pcm_f32be PCM 32-bit floating point big-endian
DEA D pcm_f32le PCM 32-bit floating point little-endian
DEA D pcm_f64be PCM 64-bit floating point big-endian
DEA D pcm_f64le PCM 64-bit floating point little-endian
D A D pcm_lxf PCM signed 20-bit little-endian planar
DEA D pcm_mulaw PCM mu-law
DEA D pcm_s16be PCM signed 16-bit big-endian
DEA D pcm_s16le PCM signed 16-bit little-endian
D A D pcm_s16le_planar PCM 16-bit little-endian planar
DEA D pcm_s24be PCM signed 24-bit big-endian
DEA D pcm_s24daud PCM D-Cinema audio signed 24-bit
DEA D pcm_s24le PCM signed 24-bit little-endian
DEA D pcm_s32be PCM signed 32-bit big-endian
DEA D pcm_s32le PCM signed 32-bit little-endian
DEA D pcm_s8 PCM signed 8-bit
D A D pcm_s8_planar PCM signed 8-bit planar
DEA D pcm_u16be PCM unsigned 16-bit big-endian
DEA D pcm_u16le PCM unsigned 16-bit little-endian
DEA D pcm_u24be PCM unsigned 24-bit big-endian
DEA D pcm_u24le PCM unsigned 24-bit little-endian
DEA D pcm_u32be PCM unsigned 32-bit big-endian
DEA D pcm_u32le PCM unsigned 32-bit little-endian
DEA D pcm_u8 PCM unsigned 8-bit
D A D pcm_zork PCM Zork
DEV D pcx PC Paintbrush PCX image
DEV D pgm PGM (Portable GrayMap) image
DEV D pgmyuv PGMYUV (Portable GrayMap YUV) image
D S pgssub HDMV Presentation Graphic Stream subtitles
D V D pictor Pictor/PC Paint
DEV D png PNG image
DEV D ppm PPM (Portable PixelMap) image
DEV D prores Apple ProRes
D V D prores_lgpl Apple ProRes (iCodec Pro)
D V D ptx V.Flash PTX image
D A D qcelp QCELP / PureVoice
D A D qdm2 QDesign Music Codec 2
D V D qdraw Apple QuickDraw
D V D qpeg Q-team QPEG
DEV D qtrle QuickTime Animation (RLE) video
DEV D r10k AJA Kona 10-bit RGB Codec
DEV D r210 Uncompressed RGB 10-bit
DEV rawvideo raw video
DEA D real_144 RealAudio 1.0 (14.4K) encoder
D A D real_288 RealAudio 2.0 (28.8K)
D V D rl2 RL2 video
DEA D roq_dpcm id RoQ DPCM
DEV D roqvideo id RoQ video
D V D rpza QuickTime video (RPZA)
DEV D rv10 RealVideo 1.0
DEV D rv20 RealVideo 2.0
D V D rv30 RealVideo 3.0
D V D rv40 RealVideo 4.0
D A D s302m SMPTE 302M
DEV sgi SGI image
D A D shorten Shorten
D A D sipr RealAudio SIPR / ACELP.NET
D A D smackaud Smacker audio
D V D smackvid Smacker video
D V D smc QuickTime Graphics (SMC)
DEV D snow Snow
D A D sol_dpcm DPCM Sol
DEA D sonic Sonic
EA sonicls Sonic lossless
D V D sp5x Sunplus JPEG (SP5X)
DES srt SubRip subtitle
D V D sunrast Sun Rasterfile image
DEV D svq1 Sorenson Vector Quantizer 1 / Sorenson Video 1 / SVQ1
D VSD svq3 Sorenson Vector Quantizer 3 / Sorenson Video 3 / SVQ3
DEV D targa Truevision Targa image
D VSD theora Theora
D V D thp Nintendo Gamecube THP video
D V D tiertexseqvideo Tiertex Limited SEQ video
DEV D tiff TIFF image
D V D tmv 8088flex TMV
D A D truehd TrueHD
D V D truemotion1 Duck TrueMotion 1.0
D V D truemotion2 Duck TrueMotion 2.0
D A D truespeech DSP Group TrueSpeech
D A D tta True Audio (TTA)
D A D twinvq VQF TwinVQ
D V D txd Renderware TXD (TeXture Dictionary) image
D V D ultimotion IBM UltiMotion
D V D utvideo Ut Video
DEV D v210 Uncompressed 4:2:2 10-bit
D V D v210x Uncompressed 4:2:2 10-bit
DEV D v308 Uncompressed packed 4:4:4
DEV D v410 Uncompressed 4:4:4 10-bit
D V vb Beam Software VB
D V D vble VBLE Lossless Codec
D V D vc1 SMPTE VC-1
D V D vc1_vdpau SMPTE VC-1 VDPAU
D V D vc1image Windows Media Video 9 Image v2
D V D vcr1 ATI VCR1
D A D vmdaudio Sierra VMD audio
D V D vmdvideo Sierra VMD video
D V D vmnc VMware Screen Codec / VMware Video
DEA D vorbis Vorbis
D VSD vp3 On2 VP3
D V D vp5 On2 VP5
D V D vp6 On2 VP6
D V D vp6a On2 VP6 (Flash version, with alpha channel)
D V D vp6f On2 VP6 (Flash version)
D V D vp8 On2 VP8
D V D vqavideo Westwood Studios VQA (Vector Quantized Animation) video
D A D wavesynth Wave synthesis pseudo-codec
D A D wavpack WavPack
D A wmalossless Windows Media Audio 9 Lossless
D A D wmapro Windows Media Audio 9 Professional
DEA D wmav1 Windows Media Audio 1
DEA D wmav2 Windows Media Audio 2
D A D wmavoice Windows Media Audio Voice
DEVSD wmv1 Windows Media Video 7
DEVSD wmv2 Windows Media Video 8
D V D wmv3 Windows Media Video 9
D V D wmv3_vdpau Windows Media Video 9 VDPAU
D V D wmv3image Windows Media Video 9 Image
D V D wnv1 Winnov WNV1
D A D ws_snd1 Westwood Audio (SND1)
D A D xan_dpcm DPCM Xan
D V D xan_wc3 Wing Commander III / Xan
D V D xan_wc4 Wing Commander IV / Xxan
D V D xbin eXtended BINary text
D V D xl Miro VideoXL
DES xsub DivX subtitles (XSUB)
DEV D xwd XWD (X Window Dump) image
DEV D y41p Uncompressed YUV 4:1:1 12-bit
D V yop Psygnosis YOP Video
DEV D yuv4 Uncompressed packed 4:2:0
DEV D zlib LCL (LossLess Codec Library) ZLIB
DEV D zmbv Zip Motion Blocks VideoLibrary we use to convert :
public function getAvailableAudioCodecs()
{
return array('libvo_aacenc', 'libfaac', 'libmp3lame');
}By default I use 'libmp3lame' now because 'libfaac' is not supported by ffmpeg
and when Im trying to encode sound by libfaac I'm getting that codec not foundThanks in advance !
-
WebVTT Discussions at FOMS
18 décembre 2013, par silviaAt the recent FOMS (Foundations of Open Media Software and Standards) Developer Workshop, we had a massive focus on WebVTT and the state of its feature set. You will find links to summaries of the individual discussions in the FOMS Schedule page. Here are some of the key results I went away with.
1. WebVTT Regions
The key driving force for improvements to WebVTT continues to be the accurate representation of CEA608/708 captioning. As part of that drive, we’ve introduced regions (the CEA708 “window” concept) to WebVTT. WebVTT regions satisfy multiple requirements of CEA608/708 captions :
- support for rollup captions
- support for background color and border color on a group of cues independent of the background color of the individual cue
- possibility to move a group of cues from one location on screen to a different
- support to specify an anchor point and a growth direction for cues when their text size changes
- support for specifying a fixed number of lines to be rendered
- possibility to specify which region is rendered in front of which other one when regions overlap
While WebVTT regions enable us to satisfy all of the above points, the specification isn’t actually complete yet and some of the above needs aren’t satisfied yet.
We have an open bug to move a region elsewhere. A first discussion at FOMS seemed to to indicate that we’ll have to add syntax for updating a region at a particular time and thus give region definitions a way to be valid only for a certain time frame. I can imagine that the region definitions that we have in the header of the WebVTT file now would have an implicitly defined time frame from the start to the end of the file, but can be overruled by a re-definition anywhere within the WebVTT file. That redefinition needs to provide a start and end time.
We registered a bug to add specifying the width and height of regions (and possibly of cues) by em (i.e. by multiples of the largest character in a font). This should allow us to have the region grow/shrink around the region anchor point with a change of font size by script or a user. em specifications should also be applied to cues – that matches the column count of CEA708/608 better.
When regions overlap, the original region extension spec already suggested a “layer” cue setting. It will be easy to add it.
Another change that we will ultimately need is the “scroll” setting : we will need to introduce support for scrolling text down or from left-to-right or right-to-left, e.g. vertical scrolling text seems to be used in some Chinese caption use cases.
2. Unify Rendering Approach
The introduction of regions created a second code path in the rendering spec with some duplication. At FOMS we discussed if it was possible to unify that. The suggestion is to render all cues into a region. Those that are not part of a region would be rendered into an anonymous region that covers the complete viewport. There may be some consequences to this, e.g. cue settings should be usable across all cues, no matter whether or not part of a region, and avoiding cue overlap may need to be done within regions.
Here’s a rough outline of the path of the new rendering algorithm :
(1) Render the regions :
Specified Region Anonymous Region Render values as given : Render following values : - width
- lines
- regionanchor
- viewportanchor
- scroll
- 100%
- videoheight/lineheight
- 0,0
- 0,0
- none
(2) Render the cues :
- Create a cue box and put it in its region (anonymous if none given).
- Calculate position & size of cue box from cue settings (position, line, size).
- Calculate position of cue text inside cue box from remaining cue settings (vertical, align).
3. Vertical Features
WebVTT includes vertical rendering, both right-to-left and left-to-right. However, regions are not defined for vertical. Eventually, we’re going to have to look at the vertical features of WebVTT with more details and figure out whether the spec is working for them and what real-world requirements we have missed. We hope we can get some help from users in countries where vertically rendered captions/subtitles are the norm.
4. Best Practices
Some of he WebVTT users at FOMS suggested it would be advantageous to start a list of “best practices” for how to author captions with WebVTT. Example recommendations are :
- Use line numbers only to position cues from top or bottom of viewport. Don’t use otherwise.
- Note that when the user increases the fontsize in rollup captions and thus introduces new line breaks, your cues will roll by faster because the number of lines of a rollup is fixed.
- Make sure to use &lrm ; and &rlm ; UTF-8 markers to control the directionality of your text.
It would be nice if somebody started such a document.
5. Non-caption use cases
Instead of continuing to look back and improve our support of captions/subtitles in WebVTT, one session at FOMS also went ahead and looked forward to other use cases. The following requirements came out of this :
5.1 Preview Thumbnails
A common use case for timed data is the use of preview thumbnails on the navigation bar of videos. A native implementation of preview thumbnails would allow crawlers and search engines to have a standardised way of extracting timed images for media files, so introduction of a new @kind value “thumbnails” was suggested.
The content of a “thumbnails” cue could be any of :
- an image URL
- a sprite URL to a single image
- a spatial & temporal media fragment URL to a media resource
- base64 encoded image (data URI)
- an iframe offset to the media resource
The suggestion is to allow anything that would work in a img @src attribute as value in a cue of @kind=”thumbnails”. Responsive images might also be useful for a track of @kind=”thumbnails”. It may even be possible to define an inband thumbnail track based on the track of @kind=”thumbnails”. Such cues should also work in the JavaScript track API.
5.2 Chapter markers
There is interest to put richer content than just a chapter title into chapter cues. Often, chapters consist of a title, text and and image. The text is not so important, but the image is used almost everywhere that chapters are used. There may be a need to extend chapter cue content with images, similar to what a @kind=”thumbnails” track offers.
The conclusion that we arrived at was that we need to make @kind=”thumbnails” work first and then look at using the learnings from that to extend @kind=”chapters”.
5.3 Inband tracks for live video
A difficult topic was opened with the question of how to transport text tracks in live video. In live captioning, end times are never created for cues, but are implied by the start time of the next cue. This is a use case that hasn’t been addressed in HTML5/WebVTT yet. An old proposal to allow a special end time value of “NEXT” was discussed and recommended for adoption. Also, there was support for the spec change that stops blocking loading VTT until all cues have been loaded.
5.4 Cross-domain VTT loading
A brief discussion centered around the fact that the spec disallows cross-domain loading of WebVTT files, but that no browser implements this. This needs to be discussion at the HTML WG level.
6. Regions in live captioning
The final topic that we discussed was how we could provide support for regions in live captioning.
- The currently active region definitions will need to be come part of every header of every VTT file segment that HLS uses, so it’s available in case the cues in the segment file reference it.
- “NEXT” in end time markers would make authoring of live captioned VTT files easier.
- If the application wants to use 1 word at a time and doesn’t want to delay sending the word until the full cue is authored (e.g. in a Hangout type environment), we will need to introduce the concept of “cue continuation markers”, so we know that a cue could be extended with the next VTT file fragment.
This is an extensive and impressive amount of discussion around WebVTT and a lot of new work to be performed in the future. I’m very grateful for all the people who have contributed to these discussions at FOMS and will hopefully continue to help get the specifications right.