FFmpeg 명령을 사용하여 오디오 및 비디오를 처리하는 방법

FFmpeg는 오디오 및 비디오 처리를 위한 선도적인 멀티미디어 프레임워크이자 강력한 오픈 소스 라이브러리로, 디코딩, 인코딩, 트랜스코딩, 먹싱, 스트림 분리, 필터링 및 거의 모든 형식의 오디오 및 비디오 콘텐츠 재생이 가능합니다. API를 사용하여 오디오 및 비디오를 처리할 수 있으며 FFmpeg 명령을 사용하여 오디오 및 비디오 파일을 편집할 수도 있습니다.

오디오, 비디오 및 자막 스트림을 위한 여러 디코더와 인코더와 여러 비트스트림 필터가 포함되어 있습니다.

FFmpeg 디렉토리와 그 역할

libavutil: 난수 생성기, 데이터 구조, 수학 루틴, 핵심 멀티미디어 유틸리티 등을 포함하여 프로그래밍을 단순화하는 데 사용되는 기능 유틸리티 라이브러리입니다.

libavcodec: 오디오/비디오용 코덱이 포함된 라이브러리입니다.

libavformat: 멀티미디어 컨테이너 형식을 위한 합성기와 스플리터를 포함하는 라이브러리입니다.

libavdevice: Video4Linux, Video4Linux2, VfW 및 ALSA를 포함한 많은 일반적인 멀티미디어 입/출력 소프트웨어 프레임워크를 가져오고 렌더링하기 위한 입력 및 출력 장치를 포함하는 라이브러리입니다.

libavfilter: 미디어 필터가 포함된 라이브러리입니다.

libswscale: 고도로 최적화된 이미지 스케일링 및 색상 공간/픽셀 형식 변환 작업을 수행하는 라이브러리입니다.

libswresample: 고도로 최적화된 오디오 리샘플링, 재매트릭스 및 샘플 형식 변환 작업을 수행하는 라이브러리입니다.

FFmpeg 도구와 그 기능

ffmpeg: ffmpeg는 FFmpeg가 명령줄에 있는 기능을 구현하는 데 사용되는 명령줄 도구입니다.

ffplay: ffplay는 FFmpeg 라이브러리와 SDL 라이브러리를 사용하는 매우 간단하고 휴대 가능한 미디어 플레이어입니다. 주로 다양한 FFmpeg API의 테스트베드로 사용됩니다.

ffprobe: ffprobe는 멀티미디어 스트림 분석 도구입니다. 멀티미디어 스트림에서 정보를 수집하고 사람과 기계가 읽을 수 있는 형식으로 인쇄합니다. 멀티미디어 스트림의 컨테이너 유형과 각 멀티미디어 스트림의 형식 및 유형을 감지하는 데 사용할 수 있습니다. 독립 실행형 응용 프로그램으로 사용하거나 텍스트 필터와 결합하여 보다 복잡한 처리를 수행할 수 있습니다.

FFmpeg의 디렉토리와 해당 도구를 이해한 후 다음 기사에서는 FFmpeg 명령줄을 사용하여 일상 생활에서 오디오 및 비디오 파일을 처리하는 방법에 중점을 둡니다.

FFmpeg 처리 오디오 및 비디오 기능 설명

FFmpeg 명령은 녹음 명령, 오디오와 비디오의 합성 및 분리, 오디오와 비디오의 자르기 및 병합, 사진과 비디오의 상호 변환과 같은 몇 가지 주요 모듈로 크게 나눌 수 있습니다. 아래에서는 FFmpeg 명령줄을 사용하여 오디오 및 비디오를 처리하여 위의 기능을 수행하는 방법을 소개합니다.

이 기사에서는 Ubuntu 운영 체제를 예로 들어 간단한 명령 sudo apt-get install ffmpeg를 통해 설치합니다.

Windows, MacOS 및 기타 Linux 운영 체제에 FFmpeg를 설치한 후 다음 명령을 실행할 수도 있습니다.

1) 녹음

ffmpeg -f avfoundation -list_devices true -i ""

2) 녹화 화면

ffmpeg -f avfoundation -i 1 -r 30 out.yuv
  • f avfoundation을 사용하여 데이터를 획득하도록 지정합니다.

  • -i는 데이터를 수집할 위치를 지정하며 파일 인덱스 번호입니다. 내 컴퓨터에서 1은 데스크탑을 나타냅니다(위의 명령으로 장치 색인 번호를 조회할 수 있음).

  • -r은 프레임 속도를 지정합니다. 공식 ffmpeg 문서에 따르면 -r과 -framerate는 같은 효과를 가지고 있지만 실제 테스트에서는 다른 것으로 나타났습니다. -framerate는 입력을 제한하는 데 사용되며 -r은 출력을 제한하는 데 사용됩니다.

3) 화면녹화 + 사운드

ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -crf 0 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 48k out.flv
  • -i 1:0 콜론 앞의 "1"은 화면 인덱스 번호를 나타냅니다. 콜론 뒤의 "0"은 사운드의 위상 번호를 나타냅니다.

  • -c:v -vcodec 매개변수와 동일하며 비디오 인코더를 의미합니다. c는 코덱의 약자, v는 비디오의 약자입니다.

  • -crf는 x264용 매개변수입니다. 0 테이블 형식의 무손실 압축.

  • -c:a -acodec 매개변수와 동일하며 오디오 인코더를 의미합니다.

  • -profile은 fdk_aac에 대한 인수입니다. aac_he_v2 형식은 AAC_HE v2를 사용하여 데이터를 압축합니다.

  • -b:a 오디오 비트 전송률을 지정합니다. b는 비트 전송률의 약어이고 오디오의 약어입니다.

4) 비디오 녹화

ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4
  • -framerate 비디오의 캡처 프레임 속도를 제한합니다. 프롬프트 요구 사항에 따라 설정해야 하며 그렇지 않으면 오류가 보고됩니다.

  • -f avfoundation을 사용하여 데이터를 수집하도록 지정합니다.

  • -i 비디오 장치의 인덱스 번호를 지정합니다.

5) 비디오 + 오디오

ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4

6) 녹음

ffmpeg -f avfoundation -i :0 out.wav

7) 오디오 원시 데이터 녹음

ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

8) 오디오 스트림 추출

ffmpeg -i input.mp4 -acodec copy -vn out.aac
  • acodec: 오디오 인코더를 지정합니다. copy는 인코딩 및 디코딩이 아닌 복사만 나타냅니다.

  • vn: v는 비디오를 의미하고 n은 비디오가 없음을 의미하는 아니오를 나타냅니다.

9) MP3 형식으로 변환

ffmpeg -i input.mp4 -acodec libmp3lame  out.mp3

10) 비디오 스트림 추출

ffmpeg -i input.mp4 -vcodec copy -an out.h264
  • vcodec: 비디오 인코더를 지정합니다. copy는 인코딩 및 디코딩이 아닌 복사만 나타냅니다.

  • an: 비디오를 의미하고 n은 오디오가 없음을 의미하는 아니오를 나타냅니다.

11) 비디오 변환 형식

ffmpeg -i video_test.mp4 -vcodec copy -acodec copy out_convert.flv

위의 명령어 테이블 오디오와 비디오는 그대로 복사되지만 mp4의 패키지 형식은 flv로 변환됩니다.

12) 비디오 사운드 제거

 ffmpeg -i video_auido.mp4 -vcodec copy -an video.mp4 

13) 비디오 압축

 1)ffmpeg -i test_ffmpeg.mp4  (压缩的文件更大更清晰,一般情况下不用)
 2)ffmpeg -i out.MP4 -b:v 500k 512k_out.mp4(减小视频码率,压缩的更模糊)

14) 오디오 및 비디오 병합

ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4

15) YUV 데이터 추출

ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv
播放
ffplay -s wxh out.yuv
  • -c:v rawvideo는 비디오를 원시 데이터로 변환하도록 지정합니다.

  • -pixel_format yuv420p는 변환 형식을 yuv420p로 지정합니다.

16) 비디오 YUV에서 H264로

ffmpeg -f rawvideo -pix_fmt yuv420p -s 640x480 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264

17) 오디오 PCM 데이터 추출

ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm
播放
ffplay -ar 44100 -ac 2 -f s16le -i out.pcm

18) PCM에서 WAV로

ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav

19) 워터마크 이미지 워터마크 추가:

ffmpeg -i out.mp4  -vf "movie=logo.png,scale=128:72[watermask];[in][watermask] overlay=96:54 [out]" water_img.mp4
  • -vf의 영화는 로고 위치를 지정합니다. scale은 로고 크기를 지정합니다. 오버레이는 로고가 배치되어야 하는 위치를 지정합니다.

텍스트 워터마크:

ffmpeg -i out.mp4 -vf "drawtext=fontfile=FZBaoHTJW_Xi.TTF: text='anyRTC':x=128:y=72:fontsize=24:fontcolor=red:shadowy=2" water_text.mp4

20) 비디오 스케일링

fmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4
  • -vf scale은 단순 필터 크기를 사용하도록 지정하고, iw/2:-1의 iw는 비디오의 너비를 정수로 지정합니다. -1은 너비에 따라 높이가 변경됨을 의미합니다.

비디오 해상도 줄이기 및 비디오 형식 변환

ffmpeg -i input.avi -vf scale=640:360 out.mp4

21) 비디오 자르기

ffmpeg -i VR.mov  -vf crop=in_w-300:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 vr_new.mp4

자르기 格式:crop=out_w:out_h:x:y

  • out_w: 출력의 너비입니다. 비디오의 너비는 in_w 형식을 사용하여 입력할 수 있습니다.

  • out_h: 출력 높이. 비디오의 높이는 in_h 형식을 사용하여 입력할 수 있습니다.

  • x : X 좌표

  • y : Y 좌표

x 및 y가 0으로 설정되면 클리핑이 왼쪽 상단 모서리에서 시작됩니다. 작성하지 않으면 중심점에서 잘립니다.

22) 비디오 좌우(위아래) 뒤집기

ffmpeg  -i out.mp4 -filter_complex "[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w" duicheng.mp4
  • hflip 수평 뒤집기

  • 수직으로 뒤집도록 수정하려면 vflip을 사용할 수 있습니다.

23) 자르기 클립

ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out_cut.mp4
  • -ss는 자르기 시작 시간을 초 단위로 정확하게 지정합니다.

  • -t 트리밍할 시간의 길이.

24) 오디오 및 비디오 병합 먼저 'test1.mp4' 파일 파일 'test2.mp4' 내용으로 videolist.txt 파일을 만들고 다음 명령을 실행합니다.

ffmpeg -f concat -i videolist.txt -c copy output.mp4

25) HLS 슬라이싱

ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls  out.m3u8
  • -strict -2는 오디오가 AAC를 사용하도록 지정합니다.

  • -f hls m3u8 형식으로 변환

26) 비디오를 JPEG로

ffmpeg -i video_test.mp4 -r 1 -f image2 image-%3d.jpeg

27) 이미지 형식 변환

ffmpeg -i input.bmp out.jpg
ffmpeg -i input.bmp out.png

28) 비디오 프레임별 스크린샷 은 주로 사용자가 수동으로 스크린샷을 찍거나 비디오를 업로드하여 축소판을 생성하는 데 사용됩니다.

여기: -ss 위치는 지정된 시간을 검색합니다. [-]hh:mm:ss[.xxx] 형식도 지원됩니다. -vframes는 변환할 비디오 프레임 수를 설정합니다. 예제 명령은 첫 번째 두 번째 스크린샷.

참고: 생성된 스크린샷은 공간을 덜 차지하는 jpg 형식이 가장 좋으며, 다른 형식을 사용해야 하는 경우 비즈니스 요구에 따라 설정할 수 있습니다.

ffmpeg -ss 00:00:01 -y -i video_test.mp4 -vframes 1 snap.jpg

29) 동영상을 GIF로

ffmpeg -i video_test.mp4 -r 1 -f image2 image-%3d.jpeg

30) 영상을 영상으로

ffmpeg -f image2 -i image-%3d.jpeg out_img_video.mp4

31) 비디오에 자막 srt 추가

ffmpeg -i video_test.mp4 -vf subtitles=subtitle.srt out_subtitle.mp4

32) 비디오에 음악 + 자막 추가

ffmpeg -i video_test.mp4 -i audio_bg.mp3 -vf subtitles=all_mp3_srt.srt out_mp3_subtitle.mp4

FFmpeg는 오디오 및 비디오 처리 전용의 강력한 라이브러리이며 많은 플레이어가 FFmpeg를 기반으로 개발되었습니다. 기사에서 언급된 기능은 편집기에서 나열한 FFmpeg에서 사용할 수 있는 기능의 일부일 뿐입니다. FFmpeg 명령줄이 많을수록 오디오 및 비디오 처리 기능을 구현할 수 있습니다. FFmpeg 공식 웹 사이트에서 관련 문서를 확인할 수 있습니다.

추천

출처blog.csdn.net/m0_60259116/article/details/123899211