ffmpeg -s hd1080 -r 30 -f x11grab -thread_queue_size 1024 -i :0.0 -c:v libx264 -crf 0 -pix_fmt yuv420p -preset ultrafast OUT.mkv
https://ffmpeg.org/ffmpeg-devices.html#pulse
ffmpeg -s hd1080 -r 30 -f x11grab -thread_queue_size 1024 -i :0.0 -f pulse -thread_queue_size 1024 -i default -ac 2 -ar 48000 -c:v libx264 -crf 0 -pix_fmt yuv420p -preset ultrafast -c:a pcm_s16le OUT1.mkv
📎️ trusty/man1/x264.1.html
-s hd1080
Флагът -s и аргументът hd1080 трябва да се заместят според размера на вашия дисплей, например -video_size 1600x900.
ffmpeg -video_size 1600x900 -r 30 -f x11grab -thread_queue_size 1024 -i :0.0 -f pulse -thread_queue_size 1024 -i default -ac 2 -ar 48000 -c:v libx264 -crf 0 -pix_fmt yuv420p -preset ultrafast -c:a pcm_s16le OUT1.mkv
-r 30
-f x11grab
https://ffmpeg.org/ffmpeg.html#Main-options
Към днешна дата в Linux масово се използва 🐧️ прозоречната системата X Window, съкратено X11 или още по-кратко "X". "X" обработва само клавиатурата, мишката и изходния екран и няма нищо общо с външния вид и функциите на Linux графичните среди. Красивата визия на менютата и т.н са притежание на мениджърите на прозорци, които се изпълняват върху "X". (kwin за графичната среда KDE,metacity за Gnome,xfwm - Xfce и т.н...) X използва модела клиент/сървър, където играе ролята на сървъра, а графичните програми са клиенти. В случая се прихваща източника 0.0, където първата нула е номер на дисплей (номерирането им започват от нула). Втората 0 е номер на екран на X сървъра 🖥️ (обозначаването им също започват от нула.). Един хост може да изпълнява множество от X сървъри. Всеки X сървър може да управлява множество екрани. Ако няма правени промени по конфиг файла на X , подразбиращият се екран винаги ще бъде нула(0), така че може и да не се задава като аргумент.
-i :0.0
-c:v libx264
-crf 0
http://manpages.ubuntu.com/manpages/trusty/man1/x264.1.html#contenttoc2
При по-ниско число се постига по-висока побитовата скорост (bit rate) и съответно по-високо качество. Диапазонът 18-28 е нормален за човешкото 👁️ око.Полученият видео файл ще бъде по-голям като обем, ако зададената стойност е по-малка. VBR кодирането разпределя по-висока скорост на предаване при обработка на по-сложните сегменти на мултимедийните файлове и по-нисък битрейт на по- простите сегменти. За краен резултат се взема средна стойност.В резултат на това се получава изходен файл с много добри параметри. Постоянният битрейт (cbr) ограничава качеството при по-сложните видео сегменти, където може да има приложени ефекти, transitions...
-qp 0
-preset ultrafast
-pix_fmts yuv420p
https://wiki.multimedia.cx/index.php/Category:FFmpeg_Pixel_Formats
Следната команда позволява да се разгледат:
ffmpeg -pix_fmts
Ако не се посочи pixel format или е несъвместим с libx264, ffmpeg по подразбиране ползва yuv444p (4:4:4 8-bit) при H.264 encoding. Излиза и съобщение в терминала,което препоръчва yuv420p за по добра съвместимост. (pix_fmt yuv420p for compatibility with outdated media players)
-thread_queue_size 1024
Тази опция и добавената цифра след нея задава допустимо /максималния брой на чакащите пакети при четене от файл или устройство. При определена латентност голям процент от прихванатите пакети могат да бъдат игнорирани,ако те не се обработват своевременно. Повишаването на тази стойност може да го избегне. При по-слаби възможности на хардуера съм задавал 2048, намаляне на -crf 18 или 24 , -r 20,24. Латентност най общо казано е нужното време за обработката на прихванатите пакети при комуникацията между операционната система, драйверите и приложението.
-c:a pcm_s16le
https://trac.ffmpeg.org/wiki/audio%20types
ffmpeg -formats | grep PCM
-ar 48000
Определя честотата на дискретизация за звука (-ar 48000=48 kHz). При изходни потоци по подразбиране се установява честота съответстваща на входния поток. За входящи потоци,тази опция има смисъл само за устройства чрез които се прихваща звук (audio grabbing devices, например звук от микрофон)
-ac 2
За входни потоци тази опция има смисъл само за audio grabbing устройства ...
https://ffmpeg.org/ffmpeg.html#Audio-Options
За информация относно видео/аудио харектеристиките на изходящия файл може да се използва Mediainfo или данните от терминала:
⏭️ ffplay static - music,video with subtitles
Output #0, matroska, to 'OUT1.mkv': Metadata: encoder : Lavf56.40.101 Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1920x1080, q=-1--1, 30 fps, 1k tbn, 30 tbc Metadata: encoder : Lavc56.60.100 libx264 Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s Metadata: encoder : Lavc56.60.100 pcm_s16le Stream mapping: Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264)) Stream #1:0 -> #0:1 (pcm_s16le (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help
https://www.gyan.dev/ffmpeg/builds/
https://github.com/BtbN/FFmpeg-Builds/releases
Извеждане на списък с имената на наличните устройства. В отворения Windows command prompt :
ffmpeg -list_devices true -f dshow -i dummy
[dshow @ 0000000000461e60] DirectShow video devices (some may be both video and audio devices) [dshow @ 0000000000461e60] "screen-capture-recorder" [dshow @ 0000000000461e60] Alternative name "@device_sw_{860BB310-5D01-11D0- BD3B-00A0C911CE86}\{4EA69364-2C8A-4AE6-A561-56E4B5044439}" [dshow @ 0000000000461e60] DirectShow audio devices [dshow @ 0000000000461e60] "Wave (ASUS Xonar DX Audio Devic" [dshow @ 0000000000461e60] Alternative name "@device_cm_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\Wave (ASUS Xonar DX Audio Devic" [dshow @ 0000000000461e60] "virtual-audio-capturer" [dshow @ 0000000000461e60] Alternative name "@device_sw_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}" [dshow @ 0000000000461e60] "Aux (ASUS Xonar DX Audio Device" [dshow @ 0000000000461e60] Alternative name "@device_cm_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\Aux (ASUS Xonar DX Audio Device" [dshow @ 0000000000461e60] "Line In (ASUS Xonar DX Audio De" [dshow @ 0000000000461e60] Alternative name "@device_cm_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\Line In (ASUS Xonar DX Audio De" [dshow @ 0000000000461e60] "Microphone (ASUS Xonar DX Audio" [dshow @ 0000000000461e60] Alternative name "@device_cm_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\Microphone (ASUS Xonar DX Audio" [dshow @ 0000000000461e60] "Stereo Mix (ASUS Xonar DX Audio" [dshow @ 0000000000461e60] Alternative name "@device_cm_{33D9A762-90C8-11D0- BD43-00A0C911CE86}\Stereo Mix (ASUS Xonar DX Audio" dummy: Immediate exit requested
Използване на gdigrab. Пример за прихващане само на десктопа:
ffmpeg -f gdigrab -framerate 30 -i desktop OUT2.mkv
или
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -crf 18 -preset ultrafast OUT3.mkv
Пример за запис с микрофон чрез DirectShow
ffmpeg -f dshow -thread_queue_size 2048 -i video="screen-capture-recorder":audio="Microphone (ASUS Xonar DX Audio" -c:v libx264 -preset ultrafast -pix_fmt yuv420p -c:a pcm_s16le OUT4.mkv
Мога ли да го използвам да прихвана картина от хардуерен "видео кепчър" и звук от HDaudio входа на звуковата карта (и да са синхронизирани)? И как да го направя?
ОтговорИзтриване