FFMEG

#####

##### > Index <

FFMPEG opties Met Emperoar TV aangemaakte MPG2 bestanden omzetten in avi

####

##### > Top <

Hier bespreek ik een methode die gebruik maakt van Fabrice Bellards F(ast)F(orward) MPEG. Er zijn meerdere versies van ffmpeg voor OS/2 beschikbaar. Paul Smedley maakte de ports:

De ffmpeg-os2-0.49pre20050603.zip op Hobbes beschikt over mp3lame ondersteuning (acodec mp3).

Zijn meest recente port staat op ffmpeg SVN. Ook deze is gecompileerd met libmp3lame (acodec libmp3lame) .

    FFmpeg version SVN-r11573, Copyright (c) 2000-2008 Fabrice Bellard, et al.
    configuration: --enable-gpl --enable-libmp3lame --enable-liba52 --enable-libgsm --enable-pp --enable-libfaad --enable-libfaac --prefix=/ffmpeg

Mencoder en ffmpeg maken van dezelfde bibliotheken gebruik. Een verschil tussen ffmpeg en mencoder is dat mencoder verschillende invoerbestanden achter elkaar in het containerbestand zet (contatenatie), terwijl ffmepg ze naast elkaar zet (multiplexing). En dat is prima voor het samenvoegen beeld en geluid, maar werkt niet als u film1.MPG en film2.MPG tot een bestand wilt samenvoegen.

Een voorbeeld van het multiplexen van beeld en geluid:

    ffmpeg -i beeld.mpg -i geluid.mp2 -vcodec copy -acodec copy -ac 2 output.mpg

Tips over het concateneren van meerdere filmbestanden staan op de FFmpeg FAQ: 2.19 How can I join video files?. Verder kunt u ook kijken naar de scripts op Met Emperoar TV aangemaakte MPG2 bestanden omzetten in avi.

### FFMPEG opties

##### > Top <

Laten we eens kijken naar de syntax van een eenvoudige hercodering van avi naar mp4:

    ffmpeg -i input.avi -acodec mp3 -vcodec mpeg4  output.mp4

Dit is de meest eenvoudige vorm, maar om de mogelijkheden te laten zien voeg ik wat opties toe.

    ffmpeg -i input.avi -acodec libmp3lame -ac 2 -ab 96 -vcodec mpeg4 -b 800 -s 320×240 -r 24 output.mp4

Optie | Toelichting
--- | ---
-i input.avi | Het invoerbestand (de bron) is input.avi. Natuurlijk kunt u ook het volledige pad opgeven. Daarnaast kunt u het koppelteken(-i -) gebruiken als bestandsnaam voor de standaardinvoer vanuit een pipe.
-acodec libmp3lame | De audiocodec is mp3. Let op: op recente ports moet u libmp3lame invullen. Het alternatieven ac3 kunt u vanaf 196 kbits/s coderen.
-ab 96 | De audiobitrate is 96 kbits/s (standaard 64 kbits/s voor mp3)
-ac 2 | -ac 2 codeert twee audiokanalen: stereo (default = mono).
-vcodec mpeg4 | De videocodec is lavc's mpeg4 (standaard)
-b 800 | De videobitrate is 800 kbits/s (standaard 200 kb/s voor mpeg4)
-s 320×240 | De framegroote is 320x240 pixels. Deze is typisch voor ipods en andere mediaspelers. Standaard is deze dezelfde als de bron.
-r 24 | De framerate is nu 24 frames per seconde (default 25 fps). Dit scheelt 4% schijfruimte en codeertijd zonder dat u het merkt.
output.mp4 | Het uitvoerbestand (het doel) is output.mp4. Ook hier kunt u het volledige pad opgeven en het koppelteken(-) als alias voor de standaarduitvoer (- | vervolgopdracht).

Opties voor tijd

-ss 120 -t 60 | Codeer vanaf (seek) positie 120 seconden 60 seconden lang. Dit is handig als u een preview van de gecodeerde film wilt zien. Neem de beginpositie (-ss 120) een scène met veel actie.
-ss 340 -t 6700 | Codeer de tijdposities 500 t/m 6700 seconden (bijv. om de Ster reklame kwijt te zijn). De tijdpositie van een filmfragment achterhaalt u door links onder in het Mplayer venster te kijken (hier zitten zowel de Audio als de Video op 340,0). Vergeet niet de (ss) begintijd van de eindtijd af te trekken (7040-340=6700).
    A: 340.4 V: 340.4 A-V:  0.017 ct:  0.237 474/474 28% 20%  3.3% 0 0

Extra video-opties zijn

-deinterlace | kan gebruikt worden als de bron interlaced video is.
-aspect 4:3 | De door maplayer e.a. afgebeelde aspect verhouding (4:3, 16:9 or 1.3333, 1.7777). Dit hoeft niet gelijk te zijn als de aspect verhouding van het gecodeerde frame.
-maxrate 2000 | Zet de maximale videobitrate op 2000 kbits/s.
-vcodec xvid | Forceer de videocodec. De standaard videocodec voor mpg en avi-bestanden is mpeg4.
-vcodec mpeg4 -vtag xvid | Deze combinatie codeert met lavc's snelle mpeg videocodec, maar doet dat op een manier die als xvod herkend zal worden. De codering zal sneller verlopen dan met -vcodec xvid.
-sameq | Gebruik dezelfde kwaliteit als de bron (met VBR). Dit geeft bijna losles encoding ten op zicht van het origineel.
-pass n | Gebruikt bij meerdere (meestal 2) codeerrondes (zie verderop)
-mbd rd | De kwalitiestsoptie mbd (macroblock decision) rd staat voor rate distortion 0: FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg). 1: FF_MB_DECISION_BITS: Choose the one which needs the fewest bits. 2: FF_MB_DECISION_RD: rate distortion
-flags +4mv+trell+aic | Ook deze vlaggen zijn kwaliteitsopties: +4mv staat voor het gebruik van four motion vector by macroblock bij MPEG-4 codering. +trell staat voor Trellis searched quantization die zoekt naar de optimale codering van ieder 8x8 blok. +aic staat voor enable Advanced intra coding (h263+).
-cmp 2 | Een kwaliteitsoptie.
-subcmp 2 | Een kwaliteitsoptie.
-g 300 | Stelt de GOP waarde in op 1:300 frames. Een Group of Pictures (GOP) is een logische eenheid binnen de MPEG videostroom. Hij begin met een i-frame: een compleet plaatje. De volgende frames bevatten vooral informatie over verandering. Hoe meer i-frames er zijn
-r 24 | Zet de framerate op 24 frames per seconde. De default is 25 frames /s.

Audio-opties zijn

acodec mp2 | Stel de audiocodec in (mp2, copy, mp3, libmp3lame, ac3).
-ar freq | Stel de audio sampling frequentie in (standaard = 44100 Hz).
-ab 128k | Stel de audiobitrate in bit/s in (standaard = 64k).
-ac 2 | Stelt het aantal audiokanalen in op 2 (stereo). De default (-ac 1) geeft mono.

Stel ik wil de 16:9 DVD film die begint met VTS_01_1.VOB naar een 320x240 avi film overzetten. Hij moet afgespeeld kunnen worden in een draagbare flash mediaspeler met de volgende specificaties (Cowon D2):

- AVI : MPEG4 2Mbps, 320x240, 30fps, MP3 audio

- WMV : WMV9 768kbps, 320x240, 30fps, WMA audio

Een batch kan dan zijn:

    if not exist film01.vob cat VTS_01_?.VOB > film01.vob
    mode co120,40
    priority 1 3 ffmpeg -i film01.vob -s 320x240 -vcodec mpeg4 -vtag XVID -b 500k -mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -r 24 -acodec libmp3lame -ab 128k -ac 2 -async 1 film01.avi

Dit geeft:

    [K:\DVD\film\VIDEO_TS]priority 1 3 ffmpeg -i film01.vob -s 320x240 -vcodec mpeg4 -vtag XVID -b 500k -mbd r
    d -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -r 24 -acodec libmp3lame -ab 128k -ac 2 -async 1 film01.avi
    Starting priority:  class 2, delta 0
    Adjusted priority:  class 1, delta 3
    Starting /C ffmpeg -i film01.vob -s 320x240 -vcodec mpeg4 -vtag XVID -b 500k -mbd rd -flags +4mv+trell+aic -cmp 2 -subcm
    p 2 -g 300 -r 24 -acodec libmp3lame -ab 128k -ac 2 -async 1 film01.avi
    FFmpeg version SVN-r11573, Copyright (c) 2000-2008 Fabrice Bellard, et al.
      configuration: --enable-gpl --enable-libmp3lame --enable-liba52 --enable-libgsm --enable-pp --enable-libfaad --enable-
    libfaac --prefix=/ffmpeg
      libavutil version: 49.6.0
      libavcodec version: 51.49.0
      libavformat version: 52.4.0
      libavdevice version: 52.0.0
      built on Jan 20 2008 14:59:50, gcc: 3.3.5 (Bird Build 2007-06-10 14:30)
    Input #0, mpeg, from 'film01.vob':
      Duration: 00:01:00.1, start: 0.287267, bitrate: 9043 kb/s
        Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576 [PAR 16:15 DAR 4:3], 9800 kb/s, 25.00 tb(r)
        Stream #0.1[0x80]: Audio: liba52, 48000 Hz, stereo, 192 kb/s
    Output #0, avi, to 'film01.avi':
        Stream #0.0: Video: mpeg4 (hq), yuv420p, 320x240 [PAR 1:1 DAR 4:3], q=2-31, 500 kb/s, 24.00 tb(c)
        Stream #0.1: Audio: libmp3lame, 48000 Hz, stereo, 128 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    No accelerated IMDCT transform found
    Press [q] to stop encoding
    [mpeg2video @ 0x4d00e0]releasing zombie picture
    [mpeg2video @ 0x4d00e0]releasing zombie picture21.1 bitrate= 291.9kbits/s
    frame=  574 fps= 57 q=2.0 size=     872kB time=23.6 bitrate= 302.6kbits/s

Een probleem is dat de ondertiteling ontbreekt. Om die reden gebruik ik liever mencoder voor het coderen van DVD's.

### Met Emperoar TV aangemaakte MPG2 bestanden omzetten in avi

##### > Top <

Hier bespreek ik een methode om MEPG-2 bestanden naar een compactere MPEG-4 AVI formaat om te zetten. Ik maak gebruik van Fabrice Bellards F(ast)F(orward) MPEG. Dit snelle coderingsprogramma is zoals de naam al zegt in het MPEG formaat gespecialiseerd.

#### Videobestanden concateneren

##### > Top <

Als u de meerdere MPG-bestanden hebt die u naar één AVI bestand wil omzetten, dan zult u de genummerde MPG bestanden eerst tot een bronbestand moeten samenvoegen (concateneren). Dat is nodig want ffmpeg kan verschillende streams wel multiplexen (audio en video samenvoegen), maar geen MPEG bestanden aan elkaar concateneren.

Het GNU utility cat uit de GNU Core utilities (coreutils_5.93.zip) is ontworpen om bestanden te concateneren.

Het gebruik van cat is simpel, maar zet de MPEG bestanden wel in de goede volgorde (01,02,03,...).

    [Q:\mpg]cat film_01.MPG film_02.MPG > film.MPG

Als u niet meer dan 9 bestanden hebt kunt u dus gebruik maken van de standaard alfabetische rangschikking door de shell:

    [Q:\mpg]cat film_0?.MPG > film.MPG

Met een binaire (/B) copy opdracht kan het ook, maar de syntax is dan wel anders:

    [Q:\mpg]COPY film_01.MPG + film2_02.MPG /B film_all.MPG

Het resultaat van deze domme optelling is geen correct MPEG bestand - zo komen er dubbele framenummers in voor, maar Mplayer kan het afspelen. En ook ffmpeg (maar niet mencoder) kan er in de praktijk mee werken.

Vervolgens zetten we het nieuw aangemaakte DVD extra long play MPEG-2 bronbestand (DVD extra long play) in een gang (pass) om in een AVI bestand het met veel lagere bitrates voor de MP3 audio en MPEG4 video:

    priority 1 20 ffmpeg -i film_all.MPG -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -vtag xvid -s 384:288 -acodec mp3 -ac 2 -ab 96k film_all.avi

De uitleg van de hier gebruikte opties:

Opdracht | Toelichting
--- | ---
priority 1 20 ffmpeg | Start ffmepg op met lage prioriteit (vergelijk nice onder Linux)
-i film.MPG | Het bronbestand word met -i aangeduid.
-f avi | Als de bestandsnaam van het doel eindigt op .avi zal ffmpeg een AVI-bestand aanmaken. Maar als u een andere extensie neemt kunt u met de f(orce) optie het uitvoerformaat afdwingen.
-vcodec mpeg4 -b 800k -g 300 -bf 2 | Videocodec mpeg4 met een bitrate van 800 k/s en met een group of pictures (GOP) grootte van 300 en B-frames support.
-vtag xvid | De mpeg4 stroom wordt als XVID codering gemerkt. Dit is handig omdat veel mediaspelers wel XVID codecs hebben maar mencoders FMP4 formaat niet herkennen. Zie ook: Conceptronics CMED3PLUS USB disk en Media Speler .
- s 384:288 | Deze instelling voor de venstergrootte in pixels komt overeen met -vf scale=384:288 van mencoder.
-acodec mp3 -ab 96k -ac 2 | Audiocodec mp3 stereo (-ac 2) met een audiobitrate (-ab 96k) van 96 k/s.
film.avi | Het uitvoerbestand is film.avi

Wat levert deze conversie op? Het levert bijvoorbeeld een 1 GiB 384x288 MPEG-4 AVI-bestand op in plaats van het 4 GiB MPEG-2 bronbestand. Het beeldresultaat is matig. Een lossy gecomprimeerde MPEG-4 afbeelding van een ook al lossy MPEG-2 EmperoarTV opname nooit kan wedijveren met een direct als MPEG-4 opgeslagen opname. Maar merkbaar geluidsverlies treedt niet op. Hoe komt dat?

De volgende tabel geeft wat cijfers over de conversie. De gegevens van het originele kleurentelevisiesignaal ken ik niet, omdat de PAL bandbreedte opgeven wordt in termen van 7/8 MHz frequentiemodulatie (http://www.telecomabc.nl/p/pal.html) en niet in termen van MBits/s.

Profiel | Band-breedte MBit/s | Beeldscherm (pixels) | Video bit rate (kbit/s) | Audio bit rate (kbit/s) | Audio sample rate (kHz) | Type audio
MPEG-2 DVD extra long play | 2,5 | 720x576 (=> 768x576) | 3200 | 384 | 48 | VBR
MPEG-2 (FMP4) AVI kopie | 0,9 (max) | 384x288 | 800 | 96 | 43 |

De rij MPEG-2 DVD extra long play bevat de opnamegegevens van het met EmperoarTV opgenomen televisieprogramma. De rij MPEG-2 (FMP4) AVI kopie bevat de gegevens van het door FFmpeg aangemaakte AVI containerbestand.

De EmperoarTV MPEG-2 standaard DVD extra long play(2.5 Bit/s) wordt op de schijf als 720x576 geschaald. Dit wordt bij het afspelen weer tot het 5:4 aspect uitgerekt (YV12 filter):

    VO: [kva] 720x576 => 768x576 Planar YV12

Omdat de videobitrate met een factor 4 teruggaat koos ik ervoor om het beeldscherm tot 384x288 te herschalen. Doe ik dat niet, dan lopen mediaspelers met minder snelle processors vast. Ze kunnen de opgeslagen videostroom (800 kbits/s) niet snel genoeg decomprimeren om de voor een 720x576 venster benodigde videostroom te genereren.

Bekijkt u met Re-klikken in EmperoarTV / Settings / Video capture het Output profile: Video CD 1150 Kbits/sec, maar eens naar een fulllscreen EmperoarTV beeld. Dat valt enorm tegen. En toch is ingenomen bandbreedte niet groter dan die van 896 KBits/s AVI kopie.

De beeldkwaliteit op het scherm wordt beter als u een Output profile met een hogere waarde instelt. Maar wat in termen van benodigde extra beeldkwaliteit versus beschikbare schijfruimte en processortijd wijs is dat moet u zelf besluiten.

Enige stelregels zijn:

- Het alleen maar afspelen van TV kost alleen maar processortijd van de CPU en GPU. Er is dan niets op tegen om onder EmperoarTV / Settings / Video capture / Output profile de maximale waarde (bij mij MPEG2 Full D1 12.0 MBit/s) in te stellen die uw processor en videokaart aankunnen.

- Wilt u ook tijdens het afspelen van TV zenders opnames voor later kunnen maken, dan is het wijs om in het EmperoarTV / Settings / Video capture / Output profile een lagere waarde in te stellen die niet teveel bandbreedte kost. Ik koos voor MPEG-2 DVD extra long play(2,5Mbits/s), omdat dat in de praktijk weinig klachten over de kwaliteit van het het beeldscherm opleverde, maar de keus is aan u.

- Voor geplande opnames die u voor later wilt bewaren hebt u twee opties: Sla ze meteen op in het gewenste formaat (bijv. DVD extra long play) of ze sla ze eventueel op met een hoge bitrate op, om die grote MPEG-2 bestanden later door een een lenig AVI of MP4 MPEG-2 formaat te vervangen. Hoe de films opgenomen worden bepaalt u in de scheduler.

#### Een codeerbatch met cat

##### > Top <

De batch gaat als volgt. Deze maakt gebruik van http://hobbes.nmsu.edu/pub/os2/apps/mmedia/ffmpeg-os2-0.49pre20050603.zip die over mp3lame ondersteuning beschikt.

    REM Batch voor conversie van door EmperoarTV gemaakte 4:3 MPG bestanden naar AVI.
    SET MOVIENAME=ModernTimes1936
    SET DRIVE=Q
    SET MPGDIR=Q:\MPG
    SET ACODEC=mp3 -ac 2
    SET ABR=96k
    SET VCODEC=mpeg4
    SET VBR=700k
    SET PRIORITY=1 19

    mode co120,40
    %DRIVE%:
    CD \
    CD %MPGDIR%

    :CHECK
    IF EXIST %MOVIENAME%_ALL.MPG GOTO CODEER
    IF NOT EXIST %MOVIENAME%_01.MPG GOTO FOUTE_INVOER
    IF NOT EXIST %MOVIENAME%_02.MPG GOTO RENAME
    priority %PRIORITY% cat %MOVIENAME%_??.mpg > %MOVIENAME%_ALL.mpg
    GOTO CHECK

    :RENAME
    REN %MOVIENAME%_01.MPG %MOVIENAME%_ALL.MPG
    GOTO CHECK

    :CODEER
    md %MOVIENAME%
    cd %MOVIENAME%
    rem del *.avi
    rem ffmpeg zal u vragen of u de oude versie van het AVI bestand wilt overschrijven.
    rem Oude logbestanden zijn van weinig nut.
    del *.log
    priority %PRIORITY% ffmpeg -i %MPGDIR%\%MOVIENAME%_ALL.MPG -f avi -pass 1 -vcodec %VCODEC% -b %VBR% -g 300 -bf 2 -acodec %ACODEC% -ab %ABR% %MOVIENAME%.avi
    del %MOVIENAME%.avi
    priority %PRIORITY% ffmpeg -i %MPGDIR%\%MOVIENAME%_ALL.MPG -f avi -pass 2 -vcodec %VCODEC% -b %VBR% -g 300 -bf 2 -acodec %ACODEC% -ab %ABR% %MOVIENAME%.avi
    GOTO END

    :FOUTE_INVOER
    echo U hebt geen passende bestandsnaam opgeven
    pause

    :END
    exit

De beschadigingen in de timing van de framenummers (MV errors) die door het aaneenvoegen van verschillende MPEG bestanden ontstaan, worden door ffmpeg gecorrigeerd. Maar de voor AVI bestanden geoptimaliseerde mencoder had er soms moeite mee.

    Too many video packets in the buffer: (4096 in 7770300 bytes).
    Maybe you are playing a non-interleaved stream/file or the codec failed?
    For AVI files, try to force non-interleaved mode with the -ni option.

Nadat de eerste gang klaar is wordt de eerste versie van %MOVIENAME%.avi gewist en wordt aan de hand van de het bestand ffmpeg2pass-0.log de film opnieuw aangemaakt.

#### Breedbeeld televisieopnames herschalen

##### > Top <

EmperoarTV codeert de televisieopnames als 768 x 576 MPEG-2 bestanden in het 4:3 formaat. Maar de meeste TV opnamen zijn als 16:9 (768:432 pixels) breedband film geschaald. Boven en onder het 4:3 PM venster ziet u dus zwarte banden. Ze nemen 44% van de ruimte in.

Vraag: kun je die voor het hercoderen al verwijderen?

Mencoder en ffmpeg hebben hier inderdaad een functie voor: Crop. Voor ffmpeg zijn de coördinaten van het te coderen deelvenster volgens de manual als volgt op te geven:

    -cropbottom <int> : Set bottom crop band size ( in pixels ).
    -cropleft <int> : Set left crop band size ( in pixels ).
    -cropright <int> : Set right crop band size ( in pixels ).
    -croptop <int> : Set top crop band size ( in pixels ).

Maar hoe kom je aan die waarden? In de praktijk via trial and error, maar laten we eens beginnen met logisch te redeneren. Als we ons beperken tot de bovenste en onderste band, dan zijn die samen 576-432 = 144 pixels hoog. Als de film precies in het midden ligt, dan zijn de onderste en bovenste zwarte balken even dik (hoog) en is hun formaat 768 x 72 pixels. Het te coderen deelvenster zou dan zijn linker onderhoek hebben op x=0 en y=72 En het zou 768:432 pixels groot moeten zijn.

Ik kom dan op de volgende waarden: -cropbottom 72 -cropleft 0 -cropright 0 -croptop 72

Maar draait u wat als 4:3 MPEG-2 bestand gecodeerde 16:9 breedbandfilms met de Mplayer bestand.mpg -vf cropdetect functie, dan ziet u crop waarden als deze:

    [CROP] Crop area: X: 11..705 Y: 71..499 (-vf crop=688:416:16:78).
    [CROP] Crop area: X: 1..719 Y: 71..499 (-vf crop=704:416:10:78).
    [CROP] Crop area: X: 14..719 Y: 71..499 (-vf crop=704:416:16:78).
    [CROP] Crop area: X: 1..719 Y: 71..499 (-vf crop=704:416:10:78).
    [CROP] Crop area: X: 1..719 Y: 78..493 (-vf crop=704:416:10:78).
    [CROP] Crop area: X: 2..719 Y: 123..573 (-vf crop=704:448:10:126).

De waarde X: 1..719 Y: 71..499 kwam het meeste voor. Maar voordat u deze parameters invoert kunt u met mplayer film.mpg -vf rectangle=704:416:10:78 controleren of dat is wat u wilt. Mplayer toont de film dan met het betreffende kader.

Wat betekenen deze crop detect waarden? We gaan terug naar de mplayer manual:

  Available filters are:
  crop[=w:h:x:y]
  Crops the given part of the image and discards the rest. Useful to remove black bands from widescreen movies.
  <w>,<h> Cropped width and height, defaults to original width and height.
  <x>,<y> Position of the cropped picture, defaults to center.
  cropdetect[=limit:round]
  Calculates necessary cropping parameters and prints the recommended parameters to stdout.
  <limit> Threshold, which can be optionally specified from nothing (0)to everything (255)(default: 24).
  <round> Value which the width/height should be divisible by (default: 16). The offset is automatically adjusted to center the video. Use 2 to get only even dimensions (needed for 4:2:2 video). 16 is best when encoding to most video codecs.
  rectangle[=w:h:x:y]
  The plugin responds to the input.conf directive 'change_rectangle' that takes two parameters.
  <w>,<h> width and height (default: -1, maximum possible width where boundaries are still visible.)
  <x>,<y> top left corner position (default: -1, uppermost leftmost)

De X: 1..719 van cropdetect bij een 768:432 televisiebeeld betekent dat alleen de horizontale X waarden 1 t/m 719 constant veranderden. De Y: 71..499 dat de alleen de hierbij behorende verticale Y posities 71 t/m 499 dit deden. Het "bewegende venster" wordt dan (719-1) x (499-71) pixels groot: 718 x 428. Maar dat formaat (16*44,875) x (16*26,75) is niet geschikt om als JPEG te coderen. Want hiervoor zijn meervouden van zestien gewenst. Vandaar de door crop detect aanbevolen default afronding (round) 704 x 416 is (16*44 x 16*26) of 1,692:1.

Maar wat geeft de laatste 10:78 aan? De x en y coordinaten van linker onderhoek van het te coderen venster. Dus vanuit de linker onderhoek van het 768:432 televisiebeeld codeer je vanaf het nulpunt (de linker onderhoek van het 768:432 MPEG2 frame) kleinere MPEG-4 frames van 704 x 416 pixels waarvan de linker onderhoek 10 pixels op de x-as naar rechts en 78 (4,875*16) pixels naar boven zijn verschoven. De balk is dan 78 pixels hoog (in plaats van de 72 = 4,5*16 die ik eerder berekende).

Willen we die waarden dus omzetten in de crop van ffmpeg en rekening houden met de gewenste zestienvouden, dan kom ik op: -cropbottom 76 -croptop 32 -cropleft 76 -cropright 32. Maar dan gaat er aan de zijkanten veel informatie verloren. Ik heb dan liever: -cropbottom 72 -croptop 8 -cropleft 72 -cropright 8 , waarbij het te coderen frame nog 16-vouden bevat.

Een sjabloon dat ik momenteel gebruik:

    REM Batch voor conversie van door EmperoarTV gemaakte 4:3 MPG bestanden naar AVI.
    SET MOVIENAME=Hotel_Rwanda
    SET DRIVE=Q
    SET MPGDIR=Q:\MPG
    rem SET MAP= -map 0:0 -map 0:1
    rem IF EXIST %MOVIENAME%_ALL.MPG SET TIME= -ss 550 200
    SET TIME= -ss 550 -t 6681
    SET ACODEC=mp3 -ac 2
    SET ABR=64k
    SET VCODEC=mpeg4
    SET VTAG=xvid
    SET VBR=900k
    SET QUALITY=-mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300
    SET SCALE=-s 512x288
    SET ASPECT=-aspect 16:9
    SET CROPTOP=72
    SET CROPBOTTOM=72
    SET CROPLEFT=8
    SET CROPRIGHT=8
    SET PRIORITY=1 3
    mode co120,40
    %DRIVE%:
    CD \
    CD %MPGDIR%

    :CHECK
    IF EXIST %MOVIENAME%_ALL.MPG GOTO CODEER
    IF NOT EXIST %MOVIENAME%_01.MPG GOTO FOUTE_INVOER
    IF NOT EXIST %MOVIENAME%_02.MPG GOTO RENAME
    :CAT
    priority %PRIORITY% cat %MOVIENAME%_??.mpg > %MOVIENAME%_ALL.mpg
    GOTO CHECK
    :RENAME
    REN %MOVIENAME%_01.MPG %MOVIENAME%_ALL.MPG
    GOTO CHECK

    :CODEER
    md %MOVIENAME%xvid
    cd %MOVIENAME%xvid
    del *.avi
    rem ffmpeg zal u vragen of u de oude versie van het AVI bestand wilt overschrijven.
    rem Oude logbestanden zijn van weinig nut.
    del *.log

    priority %PRIORITY% ffmpeg -i %MPGDIR%\%MOVIENAME%_ALL.MPG %TIME% %MAP% -pass 1 -vcodec %VCODEC% -vtag %VTAG% -f avi -b %VBR% %QUALITY% -cropbottom %CROPBOTTOM% -cropleft %CROPLEFT% -cropright %CROPRIGHT% -croptop %CROPTOP% %SCALE% %ASPECT% -acodec %ACODEC% -ab %ABR% %MOVIENAME%.avi
    del *.avi
    priority %PRIORITY% ffmpeg -i %MPGDIR%\%MOVIENAME%_ALL.MPG %TIME% %MAP% -pass 2 -vcodec %VCODEC% -vtag %VTAG% -f avi -b %VBR% %QUALITY% -cropbottom %CROPBOTTOM% -cropleft %CROPLEFT% -cropright %CROPRIGHT% -croptop %CROPTOP% %SCALE% %ASPECT% -acodec %ACODEC% -ab %ABR% %MOVIENAME%.avi
    GOTO END

    :FOUTE_INVOER
    echo U hebt geen passende bestandsnaam opgeven
    pause

    :END
    exit

Dit geeft na de eerste ronde:

    Output #0, avi, to 'Hotel_Rwanda.avi':
      Stream #0.0: Video: mpeg4 (hq), yuv420p, 512x288, q=2-31, pass 1, 900 kb/s, 25.00 fps(c)
      Stream #0.1: Audio: mp3, 44100 Hz, mono, 64 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    Press [q] to stop encoding
    frame=188912 q=5.7 Lsize=  900962kB time=7556.3 bitrate= 976.8kbits/s    s
    video:830313kB audio:59033kB global headers:0kB muxing overhead 1.306098%

    [Q:\MPG\Hotel_Rwandaxvid]del *.avi

    [Q:\MPG\Hotel_Rwandaxvid]priority 1 20 ffmpeg -i Q:\MPG\Hotel_Rwanda_ALL.MPG  -ss 550  -pass 2 -vcodec mpeg4 -vtag xvid
    -f avi -b 900k -mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300  -cropbottom 72 -cropleft 8 -cropright 8 -croptop 7
    2 -s 512x288 -aspect 16:9 -acodec mp3 -ab 64k Hotel_Rwanda.avi
    Starting priority:  class 2, delta 0
    Adjusted priority:  class 1, delta 20
    Starting /C ffmpeg -i Q:\MPG\Hotel_Rwanda_ALL.MPG -ss 550 -pass 2 -vcodec mpeg4 -vtag xvid -f avi -b 900k -mbd rd -flags
     +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -cropbottom 72 -cropleft 8 -cropright 8 -croptop 72 -s 512x288 -aspect 16:9 -aco
    dec mp3 -ab 64k Hotel_Rwanda.avi
    FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2006 Fabrice Bellard, et al.
      configuration:  --enable-gpl --enable-mp3lame --enable-a52 --enable-libgsm --enable-dts --enable-xvid --enable-faad --
    enable-amr_nb --enable-amr_wb --enable-amr_if2
      libavutil version: 49.1.0
      libavcodec version: 51.25.0
      libavformat version: 51.6.0
      built on Nov 21 2006 20:50:36, gcc: 3.3.5 (Bird Build 2006-03-18 05:37)
    Input #0, mpeg, from 'Q:\MPG\Hotel_Rwanda_ALL.MPG':
      Duration: 02:51:11.4, start: 0.276156, bitrate: 3037 kb/s
      Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 3200 kb/s, 25.00 fps(r)
      Stream #0.1[0x1c0]: Audio: mp2, 48000 Hz, stereo, 384 kb/s
      Stream #0.2[0xa0]: Audio: pcm_s16be, 44100 Hz, mono, 705 kb/s
    Output #0, avi, to 'Hotel_Rwanda.avi':
      Stream #0.0: Video: mpeg4 (hq), yuv420p, 512x288, q=2-31, pass 2, 900 kb/s, 25.00 fps(c)
      Stream #0.1: Audio: mp3, 44100 Hz, mono, 64 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1
    Press [q] to stop encoding
    frame=140473 q=2.8 size=  634336kB time=5618.6 bitrate= 924.9kbits/s

Even een toelichting bij de laatste zin:

frame=140473 verwijst naar het huidige framenummer

q=2.8 geeft de kwaliteit aan (1 is hoog, 31 is zeer laag)

size= 634336kB geeft de huidige bestandsgrootte aan.

time=5618.6 geeft de tijd is seconden aan (5618.6 maal 25 frames /seconde = 140465 frames)

bitrate= 924.9kbits/s geeft de som van de audio en video bitrates aan.

Wat ik echter niet begreep was dat de stereo input stream nummer 0.1 omgezet wordt in de mono mp3 output stream nummer 01:

    Input #0, mpeg, from 'Q:\MPG\Hotel_Rwanda_ALL.MPG':
      Duration: 02:51:11.4, start: 0.276156, bitrate: 3037 kb/s
      Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 3200 kb/s, 25.00 fps(r)
      Stream #0.1[0x1c0]: Audio: mp2, 48000 Hz, stereo, 384 kb/s
    Output #0, avi, to 'Hotel_Rwanda.avi':
      Stream #0.0: Video: mpeg4 (hq), yuv420p, 512x288, q=2-31, pass 2, 900 kb/s, 25.00 fps(c)
      Stream #0.1: Audio: mp3, 44100 Hz, mono, 64 kb/s
    Stream mapping:
      Stream #0.0 -> #0.0
      Stream #0.1 -> #0.1

Ik had hier (bij de default stream mapping) op stereo gerekend. Ik kwam er later achter dat ik de optie -ac 2 vergeten was. Standaard wordt maar een audiokanaal gecodeerd.

##### > Top <