Top secrets sources NedoPC pentevo

Rev

Rev 783 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

Çàïèñü âèäåî â Unreal Speccy emulator (psb)
-------------------------------------

Çàïèñü âèäåî ðåàëèçîâàíà ñ ïîìîùüþ óòèëèòû ffmpeg. Òàêèì îáðàçîì, âñ¸, ÷òî
óìååò ffmpeg - âñå äîñòóïíî äëÿ èñïîëüçîâàíèÿ ñ Unreal Speccy.


Ñîäåðæàíèå:

* Îñíîâíûå âîçìîæíîñòè
* Îñíîâû ðàáîòû ñ ffmpeg
* Íàñòðîéêà ýìóëÿòîðà
* Ïàðàìåòðû äëÿ çàïèñè: íàáîð png/bmp
* Ïàðàìåòðû äëÿ çàïèñè: h264/mp3
* Ïàðàìåòðû äëÿ çàïèñè: DVD
* Îíëàéí-òðàíñëÿöèÿ âèäåî â èíòåðíåò
* Íàëîæåíèå çâóêà ìèêðîôîíà
* Ãäå ñêà÷àòü ffmpeg?
* Ïîëåçíûå ññûëêè ïî ffmpeg


Îñíîâíûå âîçìîæíîñòè
--------------------

* Çàïèñü âèäåî â ôàéë. Ïîääåðæèâàþòñÿ ðàçëè÷íûå êîäåêè (xvid/h264/mpeg2/bmp/png/
  wav/mp3/... - âñå îíè âñòðîåíû â ffmpeg, äîïîëíèòåëüíî óñòàíàâëèâàòü íå
  íóæíî), êîíòåéíåðû (avi/flv/mpg/mkv);
* Ïðèìåíåíèå ðàçëè÷íûõ ôèëüòðîâ ïåðåä ñæàòèåì (íàïðèìåð, ýòî ïîçâîëÿåò íà õîäó
  çàïèñûâàòü âèäåî â ôîðìàòå, ïðèãîäíîì äëÿ èñïîëüçîâàíèÿ ïðè çàïèñè DVD -
  25 fps interlaced);
* Îñóùåñòâëåíèå îíëàéí âåùàíèÿ â èíòåðíåòå (ñ âîçìîæíîñòüþ íàëîæåíèÿ çâóêà
  ìèêðîôîíà ïîâåðõ çâóêà ýìóëÿòîðà);
* Àâòîìàòè÷åñêàÿ ïîääåðæêà ìíîãîÿäåðíûõ ïðîöåññîðîâ äëÿ êîäèðîâàíèÿ âèäåî.


Îñíîâû ðàáîòû ñ ffmpeg
----------------------

Èçíà÷àëüíî ffmpeg ïðåäíàçíà÷åí äëÿ êîíâåðòàöèè/ñæàòèÿ âèäåî. Ðàáîòà ñ ffmpeg
âåäåòñÿ èç êîìàíäíîé ñòðîêè. Ïðè ýòîì, çàäàþòñÿ èñòî÷íèêè è ïðèåìíèêè äàííûõ,
à òàê æå îïöèè, îïðåäåëÿþùèå ôîðìàòû äàííûõ/õàðàêòåðèñòèêè ñæàòèÿ. Ïðèìåð:

ffmpeg -i input.avi output.flv

 ýòîì ñëó÷àå âèäåî èç input.avi ïåðåêîíâåðòèðóåòñÿ â output.flv (òèï êîíòåéíåðà
îïðåäåëÿåòñÿ àâòîìàòè÷åñêè ïî ðàñøèðåíèÿì ôàéëîâ, íî íå âñåãäà, èíîãäà íóæíî åãî
óêàçûâàòü ÿâíî, íàïðèìåð: -f flv).

 îáùåì âèäå ïàðàìåòðû êîìàíäíîé ñòðîêè èìåþò òàêîé ôîðìàò:

ffmpeg [input1 options] -i input1 [input2 options] -i input2 ... [output1 options] output1 [output2 options] output2 ...

Êëþ÷ -i çàäàåò èñòî÷íèê äàííûõ, ïðè ýòîì ÄÎ ýòîãî êëþ÷à äîëæíû áûòü çàäàíû âñå
îïöèè äëÿ ýòîãî èñòî÷íèêà. Âñå, ÷òî óêàçàíî ïîñëå -i, áóäåò ñ÷èòàòüñÿ îïöèÿìè
äëÿ ñëåäóþùåãî èñòî÷íèêà/ïðèåìíèêà.

Îïèñàíèå âñåõ îïöèé ffmpeg ìîæíî íàéòè â àðõèâå ñ ïðîãðàììîé èëè íà îôèöèàëüíîì
ñàéòå (ññûëêà âíèçó).


Íàñòðîéêà ýìóëÿòîðà
-------------------

Äëÿ ðàáîòû ôóíêöèè ñîõðàíåíèÿ âèäåî, â ini-ôàéëå ýìóëÿòîðà íåîáõîäèìî íàñòðîèòü
ñëåäóþùèå ïàðàìåòðû:

ffmpeg.exec         ïóòü è èìÿ óòèëèòû ffmpeg, íàïðèìåð, ffmpeg.exe èëè
                    C:\ffmpeg\ffmpeg.exe, äî 256 áàéò;
ffmpeg.newconsole   1 - îòêðûâàòü äëÿ ffmpeg íîâóþ êîíñîëü;
                    0 - èñïîëüçîâàòü êîíñîëü ýìóëÿòîðà äëÿ âûâîäà ffmpeg
                    (ïîëåçíî äëÿ îòëàäêè ïàðàìåòðîâ);
ffmpeg.parm         ïàðàìåòðû âûõîäíîãî ôàéëà, äî 1024 áàéò;
ffmpeg.vout         èìÿ âûõîäíîãî ôàéëà (ìîæíî èñïîëüçîâàòü ñèìâîë "#" äëÿ
                    ïîäñòàíîâêè ïîðÿäêîâîãî íîìåðà âèäåî, íàïðèìåð, video#.avi),
                    äî 512 áàéò.

Äëÿ çàïèñè âèäåî Unreal Speccy çàïóñêàåò ffmpeg â ñëåäóþùåì ôîðìàòå:

"%exec%" -i %pipename% %parm% -y %vout%

%exec%      - ïàðàìåòð ffmpeg.exec èç ini-ôàéëà;
%pipename%  - èìÿ êàíàëà (pipe), ÷åðåç êîòîðûé ïåðåäàåòñÿ íåñæàòîå âèäåî -
              íåäîñòóïíî äëÿ èçìåíåíèÿ;
%parm%      - ïàðàìåòð ffmpeg.parm èç ini-ôàéëà;
%vout%      - ïàðàìåòð ffmpeg.vout èç ini-ôàéëà.

Çàïèñü âèäåî íà÷èíàåòñÿ ïðè ïåðâîì íàæàòèè CTRL+F8 (åñëè ýòî íå èçìåíåíî â
ini-ôàéëå) è îñòàíàâëèâàåòñÿ ïðè âòîðîì. Íà ñëàáûõ êîìïüþòåðàõ (äàæå 2õ-ÿäåðíûõ)
âîçìîæíî òîðìîæåíèå ýìóëÿòîðà ïðè çàïèñè - ýòî íîðìàëüíî, íà êà÷åñòâî âèäåî ýòî
íå âëèÿåò.


Ïàðàìåòðû äëÿ çàïèñè: íàáîð png/bmp
-----------------------------------

Äëÿ çàïèñè êàðòèíîê äîñòàòî÷íî óêàçàòü ðàñøèðåíèå .png/.bmp ó âûõîäíîãî ôàéëà.

ffmpeg.parm=-r 25
ffmpeg.vout=video#_%06d.png

Çäåñü "-r 25" çàäàåò ÷àñòîòó êàäðîâ âûõîäíîãî âèäåî - 25 ê/ñåê, ò.å., åñëè
ýìóëÿòîð áóäåò äàâàòü 50 ê/ñåê, òî êàæäûé âòîðîé êàäð áóäåò îòáðîøåí. Åñëè íå
çàäàâàòü íèêàêèõ ïàðàìåòðîâ, áóäåò ñîõðàíÿòüñÿ 50 ê/ñåê.

"video#_%06d.png" ðàçâåðíåòñÿ â "video0_000000.png", "video0_000001.png",
"video0_000002.png" è ò.ä. äëÿ ïåðâîãî âèäåî, "video1_000000.png",
"video1_000001.png", "video1_000002.png" è ò.ä. äëÿ âòîðîãî âèäåî.


Ïàðàìåòðû äëÿ çàïèñè: h264/mp3
------------------------------

H264 - ñòàíäàðò ñæàòèÿ âèäåî, ïðåäíàçíà÷åííûé äëÿ äîñòèæåíèÿ âûñîêîé ñòåïåíè
ñæàòèÿ âèäåî ïîòîêà ïðè ñîõðàíåíèè âûñîêîãî êà÷åñòâà.  ffmpeg äëÿ ðàáîòû ñ ýòèì
ôîðìàòîì èñïîëüçóåòñÿ êîäåê libx264.

Äëÿ ñæàòèÿ çâóêà â mp3 èñïîëüçóåòñÿ êîäåê libmp3lame.

Âîò îñíîâíûå ïàðàìåòðû (äëÿ èñïîëüçîâàíèÿ â ffmpeg.parm):

-c:a copy               êîïèðîâàíèå àóäèî ïîòîêà áåç èçìåíåíèÿ ôîðìàòà
                        (â íàøåì ñëó÷àå - áåç ñæàòèÿ, wav)

-c:a libmp3lame         ñæàòèå çâóêà â mp3
  -b:a 320k             ñ áèòðåéòîì 320

-af volume=3.0          óâåëè÷åíèå ãðîìêîñòè çâóêà â 3 ðàçà (ïîëåçíî,
                        ò.ê. â ýìóëÿòîðå çâóê òèõèé)

-c:v copy               êîïèðîâàíèå âèäåî ïîòîêà áåç èçìåíåíèÿ ôîðìàòà
                        (â íàøåì ñëó÷àå - áåç ñæàòèÿ, rgb24)

-c:v libx264            ñæàòèå âèäåî â h264,
  -pix_fmt yuvj420p     ôîðìàò ïèêñåëåé; áåç ýòîé îïöèè íå ðàáîòàåò :)
  -preset:v veryfast    òèï ñæàòèÿ (âëèÿåò íà ñêîðîñòü è ñòåïåíü ñæàòèÿ)
  -profile:v baseline   òèï ïðîôèëÿ (ñì. îïèñàíèå h264)
  -crf 10               êà÷åñòâî ñæàòèÿ 0-51 (0 - áåç ïîòåðü, 51 - õóäøåå)

-ss 00:00:00.500        ïðîïóñòèòü ïåðâûå 500 ìñ âèäåî (íå çàïèñûâàòü êàäðû
                        ñ íàäïèñüþ "start saving video")

-an                     èñêëþ÷èòü àóäèî

-vn                     èñêëþ÷èòü âèäåî

Äëÿ ñîçäàíèÿ ñâîèõ íàñòðîåê êîäèðîâàíèÿ âèäåî, äîñòàòî÷íî ïðîñòî "ñêëåèòü"
âûøåóêàçàííûå îïöèè âìåñòå, ðàçäåëÿÿ èõ ïðîáåëàìè.

Íàïðèìåð, ìû õîòèì ïîëó÷èòü íåñæàòûé çâóê è ñæàòîå âèäåî áåç ïîòåðü:

ffmpeg.parm=-c:a copy -af volume=3.0  -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -crf 0 -ss 00:00:00.500
ffmpeg.vout=video#.avi

Èëè ñæàòûé çâóê è áîëåå ñæàòîå âèäåî:

ffmpeg.parm=-c:a libmp3lame -b:a 320k -af volume=3.0  -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 10 -ss 00:00:00.500
ffmpeg.vout=video#.avi

Äëÿ çàïèñè âèäåî â h264 íàñòîÿòåëüíî ðåêîìåíäóåòñÿ ñòàâèòü ðåæèì îòîáðàæåíèÿ
double size (2x) â ýìóëÿòîðå (èíà÷å áóäóò ïîòåðè â öâåòå).

Ïðè çàïèñè âèäåî ñ ÷àñòîòîé 25 êàäðîâ/ñåê (íàïðèìåð, YouTube ïðèíóäèòåëüíî
ïåðåæèìàåò â òàêóþ ÷àñòîòó), êàæäûé âòîðîé êàäð áóäåò âûïàäàòü. Äëÿ ýôôåêòîâ
òèïà gigascreen ýòî êðèòè÷íî. Äëÿ èñïðàâëåíèÿ ñèòóàöèè ïðè çàïèñè òàêèõ âèäåî
íàñòîÿòåëüíî ðåêîìåíäóåòñÿ â íàñòðîéêàõ ýìóëÿòîðà âêëþ÷àòü ðåæèì Noflic
(âêëàäêà Video). Äà è äàæå íà âèäåî â 50 êàäðîâ/ñåê Noflic âûãëÿäèò óáåäèòåëüíåå
íà gigascreen-ýôôåêòàõ.


Ïàðàìåòðû äëÿ çàïèñè: DVD
-------------------------

Âèäåî äëÿ PAL-DVD äîëæíî ñîäåðæàòü 25 êàäðîâ/ñåê, êàæäûé êàäð äîëæåí ñîñòîÿòü èç
ïîëåé (ïîëóêàäðîâ). Çàäà÷à - óïàêîâûâàòü ïàðó ñîñåäíèõ ýêðàíîâ ýìóëÿòîðà â îäèí
interlaced-êàäð. Äëÿ ýòîãî â ffmpeg åñòü ôèëüòð tinterlace. Òàêæå â ffmpeg åñòü
îïöèÿ -target pal-dvd, êîòîðàÿ ñðàçó óñòàíàâëèâàåò íåîáõîäèìûå êîäåêè, ðàçìåð
êàðòèíêè (720x576 ïèêñåëåé) äëÿ ôîðìàòà DVD.

Äëÿ ñîáëþäåíèÿ îðèãèíàëüíûõ ïðîïîðöèé ðåêîìåíäóåòñÿ äåëàòü îáðåçàíèå/äîïîëíåíèå
èñõîäíîãî êàäðà äî ðàçðåøåíèÿ 720x576. Ýòî äåëàåòñÿ ôèëüòðàìè crop/pad
ñîîòâåòñòâåííî.

Âîò ïðèìåð îïöèé äëÿ çàïèñè DVD (èñõîäíàÿ êàðòèíêà â ýìóëÿòîðå äîëæíà áûòü
áîëüøå 720x576 ïèêñåëåé - double size (2x) + full border, èíà÷å áóäåò îøèáêà):

ffmpeg.parm=-af volume=3.000000 -bf 2 -vf "crop=720:576,tinterlace=mode=interlacex2" -aspect 4:3 -target pal-dvd -r 25 -b:v 2800k -ss 00:00:00.500
ffmpeg.vout=video#.mpg

Åùå ïðèìåð (èñõîäíàÿ êàðòèíêà ìåíüøå 720x576 ïèêñåëåé - äîïîëíÿåòñÿ äî ýòîãî
ðàçðåøåíèÿ ÷åðíîé ðàìêîé):

ffmpeg.parm=-af volume=3.000000 -bf 2 -vf "pad=720:576:(ow-iw)/2:(oh-ih)/2,tinterlace=mode=interlacex2" -aspect 4:3 -target pal-dvd -r 25 -b:v 2800k -ss 00:00:00.500
ffmpeg.vout=video#.mpg

Ïðè èñïîëüçîâàíèè ýòèõ ïàðàìåòðîâ êîäèðîâàíèÿ, â ýìóëÿòîðå íåîáõîäèìî ïîñòàâèòü
ðåæèì îòîáðàæåíèÿ double size (2x) äëÿ êîððåêòíîé ðàáîòû ôèëüòðà interlacex2.

Îïöèÿ -b:v 2800k çàäàåò áèòðåéò âèäåî (ïîäáèðàåòñÿ íà ãëàç).


Îíëàéí-òðàíñëÿöèÿ âèäåî â èíòåðíåò
----------------------------------

Åñòü íåñêîëüêî ïóáëè÷íûõ ñåðâåðîâ, ïîçâîëÿþùèõ îðãàíèçîâûâàòü îíëàéí òðàíñëÿöèè
â èíòåðíåò, íàïðèìåð: justin.tv, twitch.tv, own3d.tv. Ýòè ñåðâåðà ìîãóò
ïðèíèìàòü âèäåî ïîòîê ïî ïðîòîêîëó rtmp è ïîêàçûâàòü åãî ÷åðåç âåá-ñàéò.
Êðîìå òîãî, âñå ïåðåäàííîå âèäåî çàïèñûâàåòñÿ íà êàíàëå è åãî ìîæíî ïîñìîòðåòü
ïîçæå.

Äëÿ òîãî, ÷òîáû îðãàíèçîâàòü òðàíñëÿöèþ, íåîáõîäèìî çàðåãèñòðèðîâàòüñÿ íà
ñåðâèñå è ïîëó÷èòü âàø ñîáñòâåííûé èäåíòèôèêàòîð òðàíñëÿöèè - ñòðîêó òèïà
live_74829844_mfrdpoeg034tn03gn03ring3f0rngc. Çàòåì ýòîò èäåíòèôèêàòîð íóæíî
âñòàâèòü â àäðåñ òðàíñëÿöèè â ïàðàìåòðå ffmpeg.vout.

Ïîñëå òîãî, êàê íàñòðîéêè ãîòîâû, çàïóñêàåì ýìóëÿòîð, çàïóñêàåì çàïèñü âèäåî -
òðàíñëÿöèÿ íà÷àëàñü. Çðèòåëè ìîãóò âèäåòü ýêðàí ýìóëÿòîðà íà âàøåé ñòðàíè÷êå.

Ïðèìåð äëÿ justin.tv (èäåíòèôèêàòîð ïîäñòàâèòü ñâîé):

ffmpeg.parm=-af volume=3.000000 -r 10 -ss 00:00:00.500 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_74829844_mfrdpoeg034tn03gn03ring3f0rngc

Ïðèìåð äëÿ own3d.tv (èäåíòèôèêàòîð ïîäñòàâèòü ñâîé):

ffmpeg.parm=-af volume=3.000000 -r 25 -ss 00:00:00.500 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 10 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.eu.own3d.tv/live/b8493921_949585_kjhb5632l3l1

Ïðèìåð äëÿ twitch.tv (èäåíòèôèêàòîð ïîäñòàâèòü ñâîé):

ffmpeg.parm=-af volume=3.000000 -r 30 -ss 00:00:00.500 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 35 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_sub_5b8ed4fae83fe83e920227337beab7e73b7a3ba3


Íàëîæåíèå çâóêà ìèêðîôîíà (ìîæåò ðàáîòàòü íåêîððåêòíî)
------------------------------------------------------

ffmpeg óìååò çàõâàòûâàòü çâóê ñî çâóêîâîé êàðòû è êàðòèíêó ñ ýêðàíà/êàìåð.
Äëÿ âûâîäà âñåõ èìåþùèõñÿ â ñèñòåìå óñòðîéñòâ íåîáõîäèìî âûïîëíèòü êîìàíäó:

ffmpeg -list_devices true -f dshow -i dummy

Êîìàíäà âûâåäåò ïðèìåðíî ñëåäóþùåå:

ffmpeg version N-48785-g2ea3f37 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan 12 2013 20:40:36 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-
  avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --
  enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable
  -libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-
  amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-
  libschroedinger --enable-libspeex --enable-libtheora --enable-libtwolame --
  enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx 
  --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib --enable-
  filter=frei0r
  libavutil      52. 14.100 / 52. 14.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.107 / 54. 59.107
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[dshow @ 02444020] DirectShow video devices
[dshow @ 02444020] Could not enumerate video devices.
[dshow @ 02444020] DirectShow audio devices
[dshow @ 02444020]  "Realtek AC97 Audio"
dummy: Immediate exit requested

Çäåñü ìû âèäèì, ÷òî äîñòóïíî çâóêîâîå óñòðîéñòâî "Realtek AC97 Audio". Äëÿ 
ìèêøèðîâàíèÿ çâóêà ìèêðîôîíà è çâóêà èç ýìóëÿòîðà, íóæíî äîáàâèòü èñòî÷íèê çâóêà

    -f dshow -i audio="Realtek AC97 Audio"

è èñïîëüçîâàòü îïöèþ 

    -filter_complex amix=inputs=2:duration=shortest

äëÿ ìèêøèðîâàíèÿ äâóõ çâóêîâûõ ïîòîêîâ â îäèí (â ìèêøåðå çàïèñè Windows äîëæåí
áûòü âûáðàí ìèêðîôîí).

ffmpeg.parm=-f dshow -i audio="Realtek AC97 Audio" -r 10 -ss 00:00:00.500 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_74829844_mfrdpoeg034tn03gn03ring3f0rngc



Ãäå ñêà÷àòü ffmpeg?
-------------------

* Îôèöèàëüíûé ñàéò: http://ffmpeg.org/
* Ñáîðêà ïîä windows: http://ffmpeg.zeranoe.com/builds/


Ïîëåçíûå ññûëêè ïî ffmpeg
-------------------------

* http://ffmpeg.org/documentation.html - äîêóìåíòàöèÿ
* http://ffmpeg.org/trac/ffmpeg/wiki - êó÷à ïðèìåðîâ èñïîëüçîâàíèÿ,
  ðóêîâîäñòâà ïî ñæàòèÿì, òðàíñëÿöèè è ò.ï.