Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: ffmpeg - kodowanie z kodekiem MJPEG versus h.264

Witam,

pytanie może trochę nietypowe:
Czy ktoś z was ma doświadczenia z kodowaniem z użyciem "ffmpeg" z użyciem kodeków "MJPEG" i "H.264".
Czy możecie podpowiedzieć, kodowanie którym kodekiem (łącznie z zapisem) powinno mniej obciążać procesor (dostępne 1GB RAM)? Wiadomo, że materiał zakodowany kodekiem "Motion JPEG" zajmie więcej miejsca na nośniku (w tym przypadku karta pamięci uSD - class 10), Wydaje się jednak iż sam algorytm kodowania H.264 jest bardziej złożony. Czy, ktoś może odpowiedzieć (teoretycznie lub praktycznie), co mniej obciąży procesor (parametry obrazu te same - rozdzielczość, liczba klatek na sekundę, przepływność bitowa) - chodzi o obydwa procesy kodowanie z zapisem na nośnik. Oczywiście sprawdzę to praktycznie, ale kompilacja "ffmpeg" z kodekiem h.264 (na docelową platformę zajmie mi trochę czasu).
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: ffmpeg - kodowanie z kodekiem MJPEG versus h.264

Już mogę odpowiedzieć na to pytanie (platforma Intel Edison):
1) Kodek MJPEG zużycie CPU przy 720p 25 fps około 73% (ale momentami nie daje rady przepustowość magistrali pamięci)
2) Kodek h.264 zużycie CPU przy 720p 28 fps około 14% (nie występuje problem z przepustowością magistrali pamięci)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: ffmpeg - kodowanie z kodekiem MJPEG versus h.264

Może komuś się przyda (wiem, że jest dużo przykładów w sieci, ale są mocna rozproszone):

Parametry dla ffmpeg zapisujące wideo (z dźwiękiem) dla Webcamery (nie zoptymalizowane, dodatkowe parametry np. bitrate, liczba klatek na sekundę itp. można łatwo znaleźć w dokumentacji do ffmpeg):


ffmpeg -f alsa -ar 48000 -i hw:2,0 -t 10 -f v4l2 -video_size 1280x720 -i /dev/video0 -copyinkf -vcodec h264 -t 10 out1.mkv


gdzie: hw:2,0 - to urządzenie audio (w moim przypadku z kamery)
/dev/video0 - to urządzenie wideo (w moim przypadku kamera Logitech Webcam Pro C920)
-t 10 - czas nagrania (10 s)
-vcodec h264 (kodek wideo)
out1.mkv - plik w którym zostanie zapisane wideo
reszta parametrów powinna być zrozumiała


Klika pomocnych komend (Linux):
Sprawdzenia, czy kamera (USB) jest widoczna w systemie:

lsusb



MintBox Wideo # lsusb
Bus 003 Device 003: ID 058f:6254 Alcor Micro Corp. USB Hub
Bus 003 Device 002: ID 058f:6254 Alcor Micro Corp. USB Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 002: ID 15d9:0a4d Trust International B.V. Optical Mouse
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 04d9:1602 Holtek Semiconductor, Inc.
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 008 Device 002: ID 046d:082d Logitech, Inc. HD Pro Webcam C920
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
MintBox Wideo #


Wylistowanie urządzeń wideo:

MintBox Wideo # v4l2-ctl --list-devices
HD Pro Webcam C920 (usb-0000:02:00.0-2):
/dev/video0

MintBox Wideo #


Sprawdzenie formatów wideo obsługiwanych przez dane urządzenie:

ffmpeg -f v4l2 -list_formats all -i /dev/video0


Wylistowanie urządzeń audio (alsa):

MintBox Wideo # arecord -l
**** Lista CAPTURE urządzeń ****
karta 0: SB [HDA ATI SB], urządzenie 0: ALC892 Analog [ALC892 Analog]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0
karta 0: SB [HDA ATI SB], urządzenie 1: ALC892 Digital [ALC892 Digital]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0
karta 0: SB [HDA ATI SB], urządzenie 2: ALC892 Alt Analog [ALC892 Alt Analog]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0
karta 2: C920 [HD Pro Webcam C920], urządzenie 0: USB Audio [USB Audio]
Urządzenia podrzędne: 1/1
Urządzenie podrzędne #0: subdevice #0
MintBox Wideo #


W moim przypadku była to karta2 i urządzenie podrzędne 0 - hw:2,0

Pozdrawiam.

Następna dyskusja:

Kodowanie UTF-8 w Qt + inte...




Wyślij zaproszenie do