[MEGOLDVA] FFMpeg - ProRes 16ch audio -> DV AVI hang probléma

Fórumok

Adott egy Blackmagic HyperDeck Shuttle 2 videórögzítő eszköz ami többek között ProRes formátumba (is) tudja felvenni a videókat SSD-re.
Ezzel sokszor adáskészre vesszük fel az anyagokat, tehát egyből mehet az adáslebonyolító gépbe (Darim FS1000). Ez viszont hozzá sem tud szagolni ehhez a formátumhoz, ezért kitaláltam azt, hogy DV AVI-t csinálok belőle amit ffmpeggel közvetlenül a Darimba konvertálok.
Namost a probéma az, hogy ez a ProRes 1 db 16 csatornás audió sávot tartalmaz, amit egyszerűen nem tudok DV AVI-ba átkonvertálni úgy, hogy ne tegye bele mind a 16 csatornát. Magyarul ebből kellene nekem egy sima sztereó DV AVI-t csinálnom. A ProRes file hasznos hangja az első két csatornán van.
ffprobe kimenete a kérdéses fájlnál:


Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Capture0000.mov':
  Metadata:
    creation_time   : 2013-08-28 07:37:59
  Duration: 00:49:19.88, start: 0.000000, bitrate: 79462 kb/s
    Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le, 720x576, 60953 kb/s, SAR 59:54 DAR 295:216, 25 fps, 25 tbr, 2500 tbn, 2500 tbc (default)
    Metadata:
      creation_time   : 2013-08-28 07:37:59
      handler_name    : Apple Alias Data Handler
    Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 16 channels, s32, 18432 kb/s (default)
    Metadata:
      creation_time   : 2013-08-28 07:37:59
      handler_name    : Apple Alias Data Handler

Ha ráerőltetem, hogy csak 2 csatornát tegyen bele akkor ezt a hibaüzenetet kapom:


[auto-inserted resampler 0 @ 0x97abc60] [SWR @ 0x97abf20] Rematrix is needed between 16 channels and stereo but there is not enough information to do it
[auto-inserted resampler 0 @ 0x97abc60] Failed to configure output pad on auto-inserted resampler 0
Error opening filters!

Ezekkel a paraméterekkel próbálkoztam eddig:
beleteszi mind a 16 csatornát (darim nem játszik le hangot): ffmpeg -y -i Capture0000.mov -vcodec dvvideo -acodec pcm_s16le -s 720x576 -aspect 16:9 proba.avi
hibaüzenet: ffmpeg -y -i Capture0000.mov -vcodec dvvideo -acodec pcm_s16le -s 720x576 -aspect 16:9 -ac 2 proba.avi

Help pls!

Update: A minta videó: http://syserr.hu/prores/

A Megoldás:


ffmpeg -y -i Capture0001.mov -acodec wavpack /tmp/tmp1.wv ; sox /tmp/tmp1.wv -r 48k -b 16 -c 2 /tmp/tmp2.wv remix 1 2 ; ffmpeg -y -i Capture0001.mov -i /tmp/tmp2.wv -map 0:0 -map 1:0 -vcodec dvvideo -pix_fmt yuv420p -acodec pcm_s16le proba.avi ; echo -e "Brightness=0\nContrast=100\nSaturation=100\nAspectX=16\nAspectY=9\nCrop=0\nFieldOrder=1\nVolume=100\nSoundMix=0\n" > proba.SLIni

A legújabb ffmpeg kell, mert a csomagból feltett nem kezeli a wavpackot (a flac meg max 8 csatornát támogat). Ezt használtam http://ffmpeg.gusari.org/static/32bit/
A fieldorder beállítás a Darimra hatástalan, ezért az echo-s rész létrehozza a Darim számára azt a fájlot ami ennek a kézi beállítását hajtja végre.
Innnetől bármelyik kolléga számára 1 kattintás az anyag felmásolása után. És azonnal adásba tehető.

Hozzászólások

hat csak tipp: http://ffmpeg.org/ffmpeg-filters.html#aconvert illetve http://ffmpeg.org/ffmpeg-filters.html#aformat

szerk: ez jobbnak nez ki: http://ffmpeg.org/trac/ffmpeg/ticket/1088 sajna en csak mono channelt tudtam osszehozni: -map_channel 0.1.0 -map_channel 0.1.1 -map_channel -1
azt irjak hogy ac parameter downmixeli a channeleket, de neked az nemjo.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Ha feltennél valahova egy konvertálandó mitafájlt, akkor esetleg érdemben is hozzá tudna valaki szólni a témához. Ilyen fájlt ugyanis rajtad kívül itt még valszeg senki se látott, ezért találgatáson kívül semmi többre ne számíts.

Amit te akarsz ahhoz filtert kell használnod.
http://ffmpeg.org/ffmpeg-filters.html#Audio-Filters
Szerintem az alábbi 3 a legesélyesebb:

6.7 amix
Mixes multiple audio inputs into a single output.

6.24 channelmap
Remap input channels to new locations.

6.25 channelsplit
Split each channel in input audio stream into a separate output stream.

Az eddig leírt dolgok egy többsávos MXF fáljnál működnek, de az egy sávos 16 csatornásnal nem igazán.
Minta videót még a mai nap teszek fel.

-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Az a vacak Blackmagic kütyü csak ebben a formátumban tud értelmes méretben rögzíteni. Tud MXF-et is, de csak akkor ha HD jelet kap, ráadásul 5* akkora fájlméret lesz belőle és mindegyik formátum 16 csatornát csinál. Most az a cél, hogy pl. a behozott közgyűlés - ami adáskész - max 1 konvertálással a Darimba kerüljön (akár a vágáshoz nem értő operatőr által is). Ja, az Edius is dob egy hátast ha 17 percnél hosszabb részt próbálunk kiküldeni.

-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Első meglátásom szerit alapvetően azért nem sikerül a konvertálás, mert a hanghoz nincs megfelelő dekóder sem az ffmpegben sem más linuxos általam ismert programban. Mindegyik elakad a 16 csatornán, illetve egyik sem képes a csatornák közti választásra. Az eidus nem tud más formátumba menteni?

A következő "megoldást" találtam.
mplayer Capture0006.mov -dumpaudio -dumpfile Capture0006.wav
Ez kiszedi a hangsávokat.

A Capture0006.wav-ot Audacityvel meg lehet nyitni a következő módon:
Fájl > Importálás > Nyers adat > Kiválasztod a Capture0006.wav-ot > paraméterek : Signed 24bit PCM, Little Endian, 16 csatorna, 48000Hz. A felesleges csatornákat eltünteted, majd Exportálod stereo 16 bites wav-ba vagy más egyéb számodra is megfelelő formátumba. Ezt a fájlt már bármilyen linuxos program tudja kezelni, és az átkódolt videó alá tudod keverni.

Pont az ilyen `gányolást` szeretném elkerülni. Eleve több idő és az operatőr nem fog mindenféle vackot használni erre. Az még vállalható hogy felmásolás után kolléga rákattint egy ikonra és onnantól teszi az ffmpeg a dolgát.

-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Miért nem? Van egy emészthetetlen file, csinálsz egy scripttel egy másik, emészthetőt. Utána a nem parancssoros programoddal megeteted az emészthető file-t, a számára emészthetetlenről mit sem kell tudnia.

Mindamellett a GUI-val rendelkező csili-vili programok többsége is tudja a

program inputfile

formátumban történő paraméter átadást.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Én az egy klikket nem szó szerint értettem. Sokkal inkább úgy, hogy aligha tudja rávenni a kollégáit arra, hogy egy rakás interaktív munkával legyen eredmény, például:

1. Futtasd az alábbi scriptet a file-oddal.
2. Az így kapott másik file-t olvasd be egy hangszerkesztő programba.
3. Ott töröld a nemkívánatos csatornákat.
4. Exportáld a maradék hanganyagot, de ne az eredeti formátomban, hanem 16 bit dinamikával.
5. Az eredeti file-t, s az imént exportáltat paraméterül átadva egy másik scriptnek, állítsd elő az eredmény file-t.
6. Töröld le az izzadságcseppeket a homlokodról! :)

Ez így nem használható. Az viszont igen, hogy a csúnya file-t rádobjuk a scriptre, előáll a szép file, aztán azzal kezdünk valamit. Ez egyetlen plusz lépés ahhoz képest, mintha mindig is szép file-unk lett volna.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mivel nem magának készíti az alkalmazást/scriptet, így igen, sok a kettő. Ne felejtsük el, hogy az operatőr egy képalkotó szakember, nem számítógép-zsonglőr. Hidd el, visítva szaladnak, ha számukra érthetetlen klikkelgetést kell csinálniuk. És részükről teljesen jogos, ő operatőr, nem video-informatikus.

6-os, 7-es Avid szépen eszi, semmi gond nincs vele. Mondjuk a colorbar eléggé túl van lőve...

szerk.:
Poénból megnéztem 2.8-al is szerinte korrupt a hang. Az még külön érdekes, hogy miért 703 a videó szélessége (720-ra nyújtva)???

----------------------------------------------------------------------------------------------------
Hármas........alá............kettes.........................egyest írtam be.

Erre gondoltál?

ffmpeg -y -i Capture0006.mov -acodec copy tmp1.wav && sox tmp1.wav -r 48k -b 16 -c 2 tmp2.wav remix 1 2 && ffmpeg -y -i Capture0006.mov -i tmp2.wav -map 0:0 -map 1:0 -vcodec copy -acodec copy proba.avi

Bár lehet, dolgozni kell rajta még kicsit, nekem működik.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Így már teljesen jó.
Már csak azt kell letesztelnem, hogy egy 4-5 órás rögzítésnél fog-e csúszni a hang a video vége felé. Ilyen többmenetes dolgoknál volt rá példa, hogy mégha csak 1-2 framenyit, de csúszott a hang a video végénél.
-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Hát, nem tudom, Te hogy vagy vele, de a kép és hang közti egy-két frame csúszást én bizony nem hallom meg. Persze értem én, hogy az MTVA-nál ez sem megengedett, de kiszúrná bárki is?

Különben arra tippelek, hogy nagy csúszás nem lesz, mert az eredeti file-ban is 48 kHz volt a mintavételi frekvencia, a konvertálás során is megtartottuk ezt, s a végén is ennyi maradt.

Kíváncsi vagyok, ha van eredmény, írd meg a tapasztalatod!

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Igen, elméletileg nem lehet hangcsúszás, de láttam már érdekes dolgokat első éles használat után :)
Hamarosan lesz lehetőségem egy másfél-2 órás ProRes fájlon tesztelni a dolgot, aztán majd kiderül.
-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Kipróbáltam egy másfél órás videón és bele is futottam egy 12GB-os korlátozásba.
Az ffmpeg szépen végigment a fájlon, de a készített wav file 23 perces lett és pontosan 12 GB.


root@vidkon:/tmp# sox --info tmp1.wav

Input File     : 'tmp1.wav'
Channels       : 16
Sample Rate    : 48000
Precision      : 24-bit
Duration       : 00:24:38.41 = 70963666 samples ~ 110881 CDDA sectors
File Size      : 12.0G
Bit Rate       : 64.9M
Sample Encoding: 24-bit Signed Integer PCM

root@vidkon:/tmp#

-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Mi okozza a limitációt? Kevés a hely a filerendszeren, netán a /tmp-be ír, de az valójában RAM-disk, vagy elfogy a memória, esetleg a filerendszer korlátjába ütköztél, vagy 32 bites az oprendszer, s ez okoz gondot?

Amúgy eléggé vakmerőség root-ként dolgozni, de Te tudod.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

32 bites a Linux, mezei Debian Wheezy
És úgy néz ki, hogy a wav max fájlméret volt a korlát. Ugyanez wavpackkal simán megy!
Ez lett végül a megoldás:


ffmpeg -y -i Capture0001.mov -acodec wavpack /tmp/tmp1.wv ; sox /tmp/tmp1.wv -r 48k -b 16 -c 2 /tmp/tmp2.wv remix 1 2 ; ffmpeg -y -i Capture0001.mov -i /tmp/tmp2.wv -map 0:0 -map 1:0 -vcodec dvvideo -pix_fmt yuv420p -acodec pcm_s16le /data/disk/out/teszt/proba.avi

Este elindítom egy méghosszabb videón a tesztelést, de vsz. azzal is jó lesz már.
-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

A sox már eleve pcm_s16le kódolást használ, hiszen ezt mondtuk neki, ezért gondoltam volna az ffmpeg esetében a copy megadását. Így, hogy a codec-et megadod az ffmpeg-ben, nem tudom, hogy mit használ alapértelmezett mintavételezési frekvenciaként. A forrás mintavételi frekvenciáját, 48 kHz-et, vagy 44.1 kHz-et. Gondolom, ez utóbbi nem volna túl jó. Tudom, elolvashatnám az ffmpeg manualt, de nem vágyom rá túlzottan. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Na, már csak azt kell megoldanom, hogy a kiküldött avi képe ne remegjen.
A DV AVI alapból lower field szokott lenni, a ProRes viszont upper field. Ezzel az átkonvertált DV AVI is upper field lesz, de a Darim lowerként veszi, ezért remeg a kép. Kézzel meg tudom adni a Darimnak hogy upperként kezelje és úgy jó is. Szeretném ha a Darim ezt is automatikusan érzékelné.
-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!

Hatástalan a Darimra, úgyhogy jött az újabb gányolás:


...echo -e "Brightness=0\nContrast=100\nSaturation=100\nAspectX=16\nAspectY=9\nCrop=0\nFieldOrder=1\nVolume=100\nSoundMix=0\n" > proba.SLIni

Ez létrehozza a Darim számára azt a fájlot ami megmodja neki hogyan játsza le.

-------------------
http://www.rtvstat.hu/ - A legtöbb magyar rádió és TV egy helyen!