ffmpeg를 사용하여 스크린 캐스트를 만드는 방법

모르는 사람들을 위해 스크린 때때로 오디오 나레이션을 포함하는 컴퓨터 화면 출력의 디지털 녹음입니다.

En Linux, 여러 도구스크린 캐스팅. 그러나 그렇게하는 것을 선호하는 사람들은 최소한의 자원 소비 그들은이 기사를 읽는 것을 멈출 수 없습니다.


두 가지 도구 (화면을 캡처하는 ffmpeg와 기록 할 창의 좌표와 크기를 얻는 xwininfo)를 사용하여 최소한의 리소스를 사용하여 스크린 캐스트를 만들고 최적의 결과를 얻었습니다.

스크린 캐스트를 시작하는 스크립트

#! / bin / bash

# 선택한 창의 좌표와 크기를 가져옵니다
# 이것은 창 장식을 제외합니다.
  xywh 설정 해제
  eval $ (xwininfo -frame |
    sed -n -e "s / ^ + 절대 왼쪽 상단 X : + ([0-9] +). * / x = 1 / p"
           -e "s / ^ + 절대 왼쪽 상단 Y : + ([0-9] +). * / y = 1 / p"
           -e "s / ^ + 폭 : + ([0-9] +). * / w = 1 / p"
           -e "s / ^ + 높이 : + ([0-9] +). * / h = 1 / p")
$ w = $ w + $ w % 2 # 너비가 2의 배수 인 경우, 그렇지 않으면 ffmpeg가 불평합니다.
WIN_XY = $ x ","$ y # XY 좌표 형식
WIN_GEO = $ w "x"$ h # 형식 창 크기
# notify-send는 스크린 캐스트 시작을 알리는 메시지를 표시합니다.
# 구성에 맞는 매개 변수로 ffmpeg를 실행합니다.
notify-send "스크린 캐스트 시작 중 ..."&& ffmpeg -f alsa -i hw : 0 -f x11grab -r 25 -s $ WIN_GEO -i : 0.0 + $ WIN_XY -acodec libmp3lame -async 1 -vcodec libx264 -preset ultrafast- crf 0-스레드 0 save.mp4

이 스크립트가 수행하는 모든 것을 완전히 이해할 필요는 없습니다. 댓글을 따르는 것만으로도 충분합니다. 그러나 ffmpeg가 실행되는 줄에서 일부 매개 변수를 변경하여 시스템 구성에 맞게 조정해야 할 가능성이 매우 높습니다.

오디오 아키텍처

1) OSS를 사용하는 경우 -f alsa -i hw : 0을 -f oss -i / dev / dsp로 대체하십시오.

2) ALSA 만 사용하는 경우 스크립트에 포함 된 매개 변수 (-f alsa -i hw : 0)를 사용해야합니다. hw 이후의 번호를 확인하려면 aplay -l을 실행하고 적절한 사운드 카드 번호를 선택합니다.

3) Pulse Audio를 사용하는 경우 (Ubuntu 및 파생 제품에서 사용) -f alsa -ac 1 -i pulse 매개 변수를 사용하십시오.

FPS

-r 25는 녹화하려는 fps (초당 프레임 또는 초당 프레임)를 나타냅니다. 25는 좋은 선택입니다.

오디오, 비디오 및 동기화 코덱

-acodec libmp3lame는 오디오 코덱입니다. 나는 그것을 mp3로 녹음하기로 결정했습니다. 다른 것을 사용할 수 있습니다.

-async 1은 오디오와 비디오의 동기화를 허용합니다.

-vcodec libx264 -preset ultrafast -crf 0 -threads 0, 사용할 비디오 코덱이 x264이고 사전 설정이 초고속 (빠름, 느림 등이 있음)임을 ffmpeg에 알립니다. 그렇지 않으면 올바르게 녹화되지 않습니다. 원하는 양의 fps. -crf 0 매개 변수는 압축 수준을 나타냅니다 (압축이 낮을수록 압축이 낮음). 마지막으로 스레드 0은 사용할 스레드 수를 나타내며 0을 전달하면 ffmpeg가 자동으로 계산합니다. 오디오 설정과 마찬가지로 다른 옵션을 선택할 수 있습니다.

이 모든 설정은 저에게 최상의 결과를 제공 한 설정이었습니다. 비교적 작은 파일, 우수한 비디오 품질, 동기화 된 오디오 및 지연 없음. 그러나 다른 사람들을 발견하기 위해 ffmpeg 문서를 살펴볼 것을 권장합니다.

스크린 캐스트를 종료하는 스크립트

#! / bin / bash
notify-send "스크린 캐스트 종료 중 ..."&& killall ffmpeg
두 스크립트가 모두 작동하려면 notify-send가 설치되어 있어야합니다. 모든 Ubuntu 파생 배포판은이 도구가 설치된 상태로 제공되어야합니다. 아치 및 파생어 : sudo pacman -S libnotify.

에프캐스트

스크립트를 작성하기위한 정보를 찾아 보니 누군가 나와 매우 비슷한 아이디어가 있다는 것을 발견했습니다. Ffcast는 동일한 도구 (ffmpeg 및 xwininfo)를 사용하는 스크립트입니다. 일부 사람들은이 스크립트를 사용하는 것이 더 편리하다고 생각할 수 있기 때문에 언급했습니다.

Arch 및 파생 상품에서 터미널을 열고 실행했습니다.

야우 르트 -S ffcast

나머지는 다음에서 다운로드 할 수 있습니다. 여기에.

끝으로…

HOME 폴더에 저장된 스크립트를 만들고 저장 한 후에는 실행 권한을 부여해야합니다. start_screencast 및 finish_screencast가 호출되었다고 가정하고 터미널에서 다음 명령을 실행합니다.

chmod + x start_screencast
chmox + x terminate_screencast

마지막으로 각 스크립트를 사용자에게 편한 2 개의 바로 가기 (바로 가기)에 할당하는 것만 남아 있습니다. 이렇게하면 선택한 키 조합을 누를 때 스크립트가 실행됩니다.