
Recherche avancée
Médias (91)
-
GetID3 - Boutons supplémentaires
9 avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
-
Core Media Video
4 avril 2013, par
Mis à jour : Juin 2013
Langue : français
Type : Video
-
The pirate bay depuis la Belgique
1er avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
-
Bug de détection d’ogg
22 mars 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Video
-
Exemple de boutons d’action pour une collection collaborative
27 février 2013, par
Mis à jour : Mars 2013
Langue : français
Type : Image
-
Exemple de boutons d’action pour une collection personnelle
27 février 2013, par
Mis à jour : Février 2013
Langue : English
Type : Image
Autres articles (75)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
XMP PHP
13 mai 2011, parDixit Wikipedia, XMP signifie :
Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)
Sur d’autres sites (7935)
-
Converting Real Media with ffmpeg
22 avril 2018, par Eric ArensonI have a number of old crusty Real Media files I need to convert and was hoping to write a script to batch process them. I’m able to do a Real Media -> AVI conversion with FFMpegX, but when I try to replicate the conversion with ffmpeg, it always errors out with something like :
[avi @ 0x10084fa00] Too large number of skipped frames 117425 > 60000
It may have something to do with the funky format of these Real Media files :
Duration: 01:28:23.42, start: 0.000000, bitrate: 448 kb/s
Stream #0:0: Data: none, 32 kb/s
Stream #0:1: Data: none, 192 kb/s
Stream #0:2: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:3: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:4: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 8 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:5: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 5 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:6: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 27 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:7: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, mono, fltp, 32 kb/s
Stream #0:8: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 192 kb/s, 30 fps, 30 tbr, 1k tbn, 1k tbc
Stream #0:9: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 136 kb/s, 30 fps, 30 tbr, 1k tbn, 1k tbc
Stream #0:10: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:11: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:12: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:13: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:14: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:15: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 5 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbcDoes anyone have any tips on either how to find out what FFMpegX is doing to make the conversion work, or a better way to go about using ffmpeg to do this ?
EDIT
Including the ffmpeg command (thank you to @Mondain for teaching me about the stream mapping !) and output :
Command :
ffmpeg -i cc121307pm.rm -map 0:8 -map 0:7 -c:v libx264 -c:a libfaac -b:a 32k test.avi
Output :
ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
built on Aug 7 2013 12:29:30 with gcc 4.2.1 (GCC) (Apple Inc. build 5664)
configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=/usr/bin/gcc-4.2 --host-cflags='-Os -w -pipe -march=core2 -msse4.1 -mmacosx-version-min=10.6' --host-ldflags=-L/usr/local/lib --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[rm @ 0x10180f200] Unsupported stream type 00000265
[rm @ 0x10180f200] Unsupported stream type 00000652
[rm @ 0x10180f200] max_analyze_duration 5000000 reached at 5004000 microseconds
Input #0, rm, from 'input.rm':
Metadata:
File ID : 41deac0f-94fb-3595-325c-c717943bc532
Content Rating : (PICS-1.1 "http://www.classify.org/safesurf" labels comment "RealProducer Plus 8.5.0.200 Windows" ratings (SS~~000 1))
Modification Date: 12/13/2007 16:26:16
Generated By : RealProducer Plus 8.5.0.200 Windows
Keywords :
Abstract :
Target Audiences: 28K Modem (20 Kbps);56K Modem (34 Kbps);256K DSL/Cable Modem (225 Kbps);
Video Quality : Normal Motion Video
Audio Format : Voice Only
Creation Date : 12/13/2007 14:57:49
ASMRuleBook : #($Bandwidth < 15000),Stream2Bandwidth = 6500, Stream3Bandwidth = 5499;#($Bandwidth >= 15000) && ($Bandwidth < 20000),Stream2Ba
title :
author :
copyright : ?2007
comment :
Duration: 01:28:23.42, start: 0.000000, bitrate: 448 kb/s
Stream #0:0: Data: none, 32 kb/s
Stream #0:1: Data: none, 192 kb/s
Stream #0:2: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:3: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:4: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 8 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:5: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 5 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:6: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 27 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:7: Audio: cook (cook / 0x6B6F6F63), 22050 Hz, mono, fltp, 32 kb/s
Stream #0:8: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 192 kb/s, 30 fps, 30 tbr, 1k tbn, 1k tbc
Stream #0:9: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 136 kb/s, 30 fps, 30 tbr, 1k tbn, 1k tbc
Stream #0:10: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:11: Audio: sipr (sipr / 0x72706973), 8000 Hz, mono, flt, 6 kb/s
Stream #0:12: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:13: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:14: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 13 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
Stream #0:15: Video: rv20 (RV20 / 0x30325652), yuv420p, 320x240, 5 kb/s, 15 fps, 15 tbr, 1k tbn, 1k tbc
[libx264 @ 0x101889c00] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
[libx264 @ 0x101889c00] profile High, level 1.3
Output #0, avi, to 'test.avi':
Metadata:
File ID : 41deac0f-94fb-3595-325c-c717943bc532
Content Rating : (PICS-1.1 "http://www.classify.org/safesurf" labels comment "RealProducer Plus 8.5.0.200 Windows" ratings (SS~~000 1))
Modification Date: 12/13/2007 16:26:16
Generated By : RealProducer Plus 8.5.0.200 Windows
Keywords :
Abstract :
Target Audiences: 28K Modem (20 Kbps);56K Modem (34 Kbps);256K DSL/Cable Modem (225 Kbps);
Video Quality : Normal Motion Video
Audio Format : Voice Only
Creation Date : 12/13/2007 14:57:49
ASMRuleBook : #($Bandwidth < 15000),Stream2Bandwidth = 6500, Stream3Bandwidth = 5499;#($Bandwidth >= 15000) && ($Bandwidth < 20000),Stream2Ba
INAM :
author :
ICOP : ?2007
ICMT :
ISFT : Lavf54.63.104
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 320x240, q=-1--1, 30 tbn, 30 tbc
Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 22050 Hz, mono, s16, 32 kb/s
Stream mapping:
Stream #0:8 -> #0:0 (rv20 -> libx264)
Stream #0:7 -> #0:1 (cook -> libfaac)
Press [q] to stop, [?] for help
[rm @ 0x10180f200] DATA tag in middle of chunk, file may be broken.
Truncating packet of size 775215378 to 283607526
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 686581284 to 279055389
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 845942319 to 279042877
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 519635011 to 279040757
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 302013449 to 260425302
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 671112232 to 260422550
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 670137329 to 260371048
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 674387680 to 260336787
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 698852899 to 260336757
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 881600768 to 260281240
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 623325768 to 241694111
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 273397034 to 241679920
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 245534365 to 241615319
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 264614026 to 220525004
[rm @ 0x10180f200] Impossibly sized packet
[rm @ 0x10180f200] DATA tag in middle of chunk, file may be broken.
Truncating packet of size 637535515 to 219973842
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 432193588 to 219973831
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 286760544 to 219962162
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 1070610764 to 219737624
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 259875548 to 219371853
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 362059391 to 219371844
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 885179606 to 219371833
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 587434829 to 206214002
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 816942211 to 165623435
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 471624979 to 113266905
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 674059889 to 113266894
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 459361272 to 113253548
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 637535515 to 91792709
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 432193588 to 91792698
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 286760544 to 91781029
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 157876310 to 91505934
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 469953408 to 91505925
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 260215377 to 91486921
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 877425642 to 91335612
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 259887697 to 91322050
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 885071836 to 91245341
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 264614182 to 90930431
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 811350015 to 90930422
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 128974975 to 90713958
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 801151589 to 89195724
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 654645420 to 85989435
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 184860915 to 85989426
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 1072093904 to 85980304
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 907644163 to 85521587
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 187973624 to 52762203
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 315276941 to 52762157
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 947559309 to 23894660
[rm @ 0x10180f200] Impossibly sized packet
Truncating packet of size 183681448 to 2582872
[rm @ 0x10180f200] Impossibly sized packet
input.rm: Input/output error
frame= 0 fps=0.0 q=0.0 Lsize= 10kB time=00:00:00.00 bitrate=N/A
video:0kB audio:0kB subtitle:0 global headers:0kB muxing overhead inf%
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used) -
ffmpeg how to encode first then use it for another output
10 août 2017, par mahdi ghI’m trying to capture screen with gdigrab and combine int with a sound and then send it on my decklink sdi device.
here is my code to capture :
ffmpeg -framerate 25 -thread_queue_size 512 -f gdigrab -i title="Play" -f dshow -i audio="CABLE Output (VB-Audio Virtual Cable)" -af aresample=resampler=soxr -ar 48000 -acodec pcm_s16le -ac 2 -c:v libx264 -qp 0 -preset ultrafast "output.avi"
here is my code for output to ffmpeg :
ffmpeg -i output.avi -f decklink -pix_fmt uyvy422 "DeckLink SDI (2)"
this way it works, but when I combine these two arguments to send the output to decklink card on the fly, ffmpeg stops working. here is the combination code :
ffmpeg -framerate 25 -thread_queue_size 512 -f gdigrab -i title="Play" -f dshow -i audio="CABLE Output (VB-Audio Virtual Cable)" -af aresample=resampler=soxr -ar 48000 -acodec pcm_s16le -ac 2 -f decklink -pix_fmt uyvy422 "DeckLink SDI (2)"
I have tried so many different combinations but no luck. it works only if i store it on a file then use that file as input. Is there a way to tell ffmpeg to use the result of first command as input of second command ?
Thanks
Update :
Here is log report :ffmpeg started on 2017-08-08 at 12:26:36
Report written to "ffmpeg-20170808-122636.log"
Command line:
ffmpeg -framerate 25 -thread_queue_size 512 -f gdigrab -i "title=Play" -c:v rawvideo -f dshow -i "audio=CABLE Output (VB-Audio Virtual Cable)" -af "aresample=resampler=soxr" -ar 48000 -acodec pcm_s16le -ac 2 -map 0:v:0 -map 1:a:0 -f decklink -pix_fmt uyvy422 "DeckLink SDI (2)" -report
ffmpeg version N-71608-ga924b83 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
libavutil 54. 23.101 / 54. 23.101
libavcodec 56. 35.101 / 56. 35.101
libavformat 56. 30.100 / 56. 30.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 14.100 / 5. 14.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Splitting the commandline.
Reading option '-framerate' ... matched as AVOption 'framerate' with argument '25'.
Reading option '-thread_queue_size' ... matched as option 'thread_queue_size' (set the maximum number of queued packets from the demuxer) with argument '512'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'gdigrab'.
Reading option '-i' ... matched as input file with argument 'title=Play'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'rawvideo'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'dshow'.
Reading option '-i' ... matched as input file with argument 'audio=CABLE Output (VB-Audio Virtual Cable)'.
Reading option '-af' ... matched as option 'af' (set audio filters) with argument 'aresample=resampler=soxr'.
Reading option '-ar' ... matched as option 'ar' (set audio sampling rate (in Hz)) with argument '48000'.
Reading option '-acodec' ... matched as option 'acodec' (force audio codec ('copy' to copy stream)) with argument 'pcm_s16le'.
Reading option '-ac' ... matched as option 'ac' (set number of audio channels) with argument '2'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:v:0'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '1:a:0'.
Reading option '-f' ... matched as option 'f' (force format) with argument 'decklink'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'uyvy422'.
Reading option 'DeckLink SDI (2)' ... matched as output file.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input file title=Play.
Applying option thread_queue_size (set the maximum number of queued packets from the demuxer) with argument 512.
Applying option f (force format) with argument gdigrab.
Successfully parsed a group of options.
Opening an input file: title=Play.
[gdigrab @ 0000000002d3f2a0] Found window Play, capturing 720x576x32 at (0,0)
[gdigrab @ 0000000002d3f2a0] Cursor pos (588,602) -> (-271,597)
[gdigrab @ 0000000002d3f2a0] All info found
Input #0, gdigrab, from 'title=Play':
Duration: N/A, start: 1502178996.958615, bitrate: 331786 kb/s
Stream #0:0, 1, 1/1000000: Video: bmp, bgra, 720x576, 331786 kb/s, 25 tbr, 1000k tbn, 25 tbc
Successfully opened the file.
Parsing a group of options: input file audio=CABLE Output (VB-Audio Virtual Cable).
Applying option c:v (codec name) with argument rawvideo.
Applying option f (force format) with argument dshow.
Successfully parsed a group of options.
Opening an input file: audio=CABLE Output (VB-Audio Virtual Cable).
[dshow @ 0000000002d3c340] Selecting pin Capture on audio only
dshow passing through packet of type audio size 88200 timestamp 111632750000 orig timestamp 111632750000
[dshow @ 0000000002d3c340] All info found
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, dshow, from 'audio=CABLE Output (VB-Audio Virtual Cable)':
Duration: N/A, start: 11163.275000, bitrate: 1411 kb/s
Stream #1:0, 1, 1/10000000: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Successfully opened the file.
Parsing a group of options: output file DeckLink SDI (2).
Applying option af (set audio filters) with argument aresample=resampler=soxr.
Applying option ar (set audio sampling rate (in Hz)) with argument 48000.
Applying option acodec (force audio codec ('copy' to copy stream)) with argument pcm_s16le.
Applying option ac (set number of audio channels) with argument 2.
Applying option map (set input stream mapping) with argument 0:v:0.
Applying option map (set input stream mapping) with argument 1:a:0.
Applying option f (force format) with argument decklink.
Applying option pix_fmt (set pixel format) with argument uyvy422.
Successfully parsed a group of options.
Opening an output file: DeckLink SDI (2).
Successfully opened the file.
detected 2 logical cores
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'video_size' to value '720x576'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'pix_fmt' to value '30'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'time_base' to value '1/1000000'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'pixel_aspect' to value '0/1'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] Setting 'frame_rate' to value '25/1'
[graph 0 input from stream 0:0 @ 0000000002dd7ea0] w:720 h:576 pixfmt:bgra tb:1/1000000 fr:25/1 sar:0/1 sws_param:flags=2
[format @ 0000000002d3df00] compat: called with args=[uyvy422]
[format @ 0000000002d3df00] Setting 'pix_fmts' to value 'uyvy422'
[auto-inserted scaler 0 @ 0000000002d44ca0] Setting 'flags' to value '0x4'
[auto-inserted scaler 0 @ 0000000002d44ca0] w:iw h:ih flags:'0x4' interl:0
[format @ 0000000002d3df00] auto-inserting filter 'auto-inserted scaler 0' between the filter 'Parsed_null_0' and the filter 'format'
[AVFilterGraph @ 0000000002e586c0] query_formats: 4 queried, 2 merged, 1 already done, 0 delayed
[auto-inserted scaler 0 @ 0000000002d44ca0] w:720 h:576 fmt:bgra sar:0/1 -> w:720 h:576 fmt:uyvy422 sar:0/1 flags:0x4
[Parsed_aresample_0 @ 0000000002d513a0] Setting 'resampler' to value 'soxr'
[graph 1 input from stream 1:0 @ 0000000002d51460] Setting 'time_base' to value '1/44100'
[graph 1 input from stream 1:0 @ 0000000002d51460] Setting 'sample_rate' to value '44100'
[graph 1 input from stream 1:0 @ 0000000002d51460] Setting 'sample_fmt' to value 's16'
[graph 1 input from stream 1:0 @ 0000000002d51460] Setting 'channel_layout' to value '0x3'
[graph 1 input from stream 1:0 @ 0000000002d51460] tb:1/44100 samplefmt:s16 samplerate:44100 chlayout:0x3
[audio format for output stream 0:1 @ 0000000002d51520] Setting 'sample_fmts' to value 's16'
[audio format for output stream 0:1 @ 0000000002d51520] Setting 'sample_rates' to value '48000'
[audio format for output stream 0:1 @ 0000000002d51520] Setting 'channel_layouts' to value '0x3'
[AVFilterGraph @ 0000000002d4d0c0] query_formats: 4 queried, 9 merged, 0 already done, 0 delayed
[Parsed_aresample_0 @ 0000000002d513a0] ch:2 chl:stereo fmt:s16 r:44100Hz -> ch:2 chl:stereo fmt:s16 r:48000Hz
dshow passing through packet of type audio size 88200 timestamp 111637810000 orig timestamp 111637810000
[decklink @ 0000000002dd6a00] Found Decklink mode 720 x 576 with rate 25.00(i)
Output #0, decklink, to 'DeckLink SDI (2)':
Metadata:
encoder : Lavf56.30.100
Stream #0:0, 0, 1/25: Video: rawvideo (UYVY / 0x59565955), uyvy422, 720x576, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc56.35.101 rawvideo
Stream #0:1, 0, 1/48000: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Metadata:
encoder : Lavc56.35.101 pcm_s16le
Stream mapping:
Stream #0:0 -> #0:0 (bmp (native) -> rawvideo (native))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
Cliping frame in rate conversion by 0.000008
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Encoder did not produce proper pts, making some up.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
*** 40 dup!
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 1.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 2.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 3.
[decklink @ 0000000002dd6a00] Buffered video frames: 4.
[decklink @ 0000000002dd6a00] Buffered video frames: 5.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 6.
[decklink @ 0000000002dd6a00] Buffered video frames: 7.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 8.
[decklink @ 0000000002dd6a00] Buffered video frames: 9.
[decklink @ 0000000002dd6a00] Buffered video frames: 10.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 11.
[decklink @ 0000000002dd6a00] Buffered video frames: 12.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 13.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
dshow passing through packet of type audio size 88200 timestamp 111642810000 orig timestamp 111642810000
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 14.
[decklink @ 0000000002dd6a00] Ending audio preroll.
[decklink @ 0000000002dd6a00] Starting scheduled playback.
[decklink @ 0000000002dd6a00] Buffered video frames: 15.
[decklink @ 0000000002dd6a00] Buffered video frames: 16.
[decklink @ 0000000002dd6a00] Buffered video frames: 17.
[decklink @ 0000000002dd6a00] Buffered video frames: 18.
[decklink @ 0000000002dd6a00] Buffered video frames: 19.
[decklink @ 0000000002dd6a00] Buffered video frames: 20.
[decklink @ 0000000002dd6a00] Buffered video frames: 21.
[decklink @ 0000000002dd6a00] Buffered video frames: 22.
[decklink @ 0000000002dd6a00] Buffered video frames: 23.
[decklink @ 0000000002dd6a00] Buffered video frames: 24.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[decklink @ 0000000002dd6a00] Buffered video frames: 24.
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
frame= 42 fps=0.0 q=0.0 size=N/A time=00:00:01.68 bitrate=N/A dup=40 drop=0
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
dshow passing through packet of type audio size 88200 timestamp 111647710000 orig timestamp 111647710000
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (689,472) -> (-170,467)
[gdigrab @ 0000000002d3f2a0] Cursor pos (814,496) -> (-45,491)
[gdigrab @ 0000000002d3f2a0] Cursor pos (814,496) -> (-45,491)
[gdigrab @ 0000000002d3f2a0] Cursor pos (811,497) -> (-48,492)
[gdigrab @ 0000000002d3f2a0] Cursor pos (811,497) -> (-48,492)
[gdigrab @ 0000000002d3f2a0] Cursor pos (811,497) -> (-48,492)
[gdigrab @ 0000000002d3f2a0] Cursor pos (806,497) -> (-53,492) -
Dreamcast Serial Extractor
31 décembre 2017, par Multimedia Mike — Sega DreamcastIt has not been a very productive year for blogging. But I started the year by describing an unfinished project that I developed for the Sega Dreamcast, so I may as well end the year the same way. The previous project was a media player. That initiative actually met with some amount of success and could have developed into something interesting if I had kept at it.
By contrast, this post describes an effort that was ultimately a fool’s errand that I spent way too much time trying to make work.
Problem Statement
In my neverending quest to analyze the structure of video games while also hoarding a massive collection of them (though I’m proud to report that I did play at least a few of them this past year), I wanted to be able to extract the data from my many Dreamcast titles, both games and demo discs. I had a tool called the DC Coder’s Cable, a serial cable that enables communication between a Dreamcast and a PC. With the right software, you could dump an entire Dreamcast GD-ROM, which contained a gigabyte worth of sectors.Problem : The dumping software (named ‘dreamrip’ and written by noted game hacker BERO) operated in a very basic mode, methodically dumping sector after sector and sending it down the serial cable. This meant that it took about 28 hours to extract all the data on a single disc by running at the maximum speed of 115,200 bits/second, or about 11 kilobytes/second. I wanted to create a faster method.
The Pitch
I formed a mental model of dreamrip’s operation that looked like this :
As an improvement, I envisioned this beautiful architecture :
Architectural Assumptions
My proposed architecture was predicated on the assumption that the disc reading and serial output functions were both I/O-bound operations and that the CPU would be idle much of the time. My big idea was to use that presumably idle CPU time to compress the sectors before sending them over the wire. As long as the CPU can compress the data faster than 11 kbytes/sec, it should be a win. In order to achieve this, I broke the main program into 3 threads :- The first thread reads the sectors ; more specifically, it asks the drive firmware to please read the sectors and make the data available in system RAM
- The second thread waits for sector data to appear in memory and then compresses it
- The third thread takes the compressed data when it is ready and shuffles it out through the serial cable
Simple and elegant, right ?
For data track compression, I wanted to start with zlib in order to prove the architecture, but then also try bzip2 or lzma. As long as they could compress data faster than the serial port could write it, then it should be a win. For audio track compression, I wanted to use the Flake FLAC encoder. According to my notes, I did get both bzip2 compression and the Flake compressor working on the Dreamcast. I recall choosing Flake over the official FLAC encoder because it was much simpler and had fewer dependencies, always an important consideration for platforms such as this.
Problems
I worked for quite awhile on this project. I have a lot of notes recorded but a lot of the problems I had remain a bit vague in my memory. However, there was one problem I discovered that eventually sunk the entire initiative :The serial output operation is CPU-bound.
My initial mental model was that the a buffer could be “handed off” to the serial subsystem and the CPU could go back to doing other work. Nope. Turns out that the CPU was participating at every step of the serial transfer.
Further, I eventually dug into the serial driver code and learned that there was already some compression taking place via the miniLZO library.
Lessons Learned
- Recognize the assumptions that you’re making up front at the start of the project.
- Prototype in order to ensure plausibility
- Profile to make sure you’re optimizing the right thing (this is something I have learned again and again).
Another interesting tidbit from my notes : it doesn’t matter how many sectors you read at a time, the overall speed is roughly the same. I endeavored to read 1000 2048-byte data sectors, 1 or 10 or 100 at a time, or all 1000 at once. My results :
- 1 : 19442 ms
- 10 : 19207 ms
- 100 : 19194 ms
- 1000 : 19320 ms
No difference. That surprised me.
Side Benefits
At one point, I needed to understand how BERO’s dreamrip software was operating. I knew I used to have the source code but I could no longer find it. Instead, I decided to try to reverse engineer what I needed from the SH-4 binary image that I had. It wasn’t an ELF image ; rather, it was a raw binary meant to be loaded at a particular memory location which makes it extra challenging for ‘objdump’. This led to me asking my most viewed and upvoted question on Stack Overflow : “Disassembling A Flat Binary File Using objdump”. The next day, it also led me to post one of my most upvoted answers when I found the solution elsewhere.Strangely, I have since tried out the command line shown in my answer and have been unable to make it work. But people keep upvoting both the question and the answer.
Eventually this all became moot when I discovered a misplaced copy of the source code on one of my computers.
I strongly recall binging through the Alias TV show while I was slogging away on this project, so I guess that’s a positive association since I got so many fun screenshots out of it.
The Final Resolution
Strangely, I was still determined to make this project work even though the Dreamcast SD adapter arrived for me about halfway through the effort. Part of this was just stubbornness, but part of it was my assumptions about serial port speeds, in particular, my assumption that there was a certain speed-of-light type of limitation on serial port speeds so that the SD adapter, operating over the DC’s serial port, would not be appreciably faster than the serial cable.This turned out to be very incorrect. In fact, the SD adapter is capable of extracting an entire gigabyte disc image in 35-40 minutes. This is the method I have since been using to extract Dreamcast disc images.
The post Dreamcast Serial Extractor first appeared on Breaking Eggs And Making Omelettes.