300x250
반응형

업무에서 ffmpeg를 사용 하여야 해서 사용한 옵션 및 해당 명령어의 결과 내용을 정리(마구잡이...)

 

 

rtmp 스트림 전송 : ffmpeg -hwaccel dxva2 -re -i D:\DSB_WORK\streams/Sen.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://localhost/live/Sen  (하드웨어 가속기를 사용 하면 속도가 조금 더 빨라지지만 느림.)

 

샘플 명령어 : ffmpeg -s 7680x3072 -pix_fmt yuv420p10le -i input.yuv -vf trim=start_frame=0:end_frame=120 -filter:v "crop=3840:3072:0:0" -c:a copy output.yuv

 

JPG 테스트 명령어 : ffmpeg -s 3840x2160 -pix_fmt yuv420p10le -i D:\DSB_WORK\Encoder\FFMPEG\test/flower.jpg -vf trim=start_frame=0:end_frame=120 -filter:v "crop=1920:1080:0:0" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/out_flower.jpg

 

mp4 테스트 명령어 : ffmpeg -i D:\DSB_WORK\streams/Sen.mp4 -filter:v "crop=1920:1080:0:1080" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/out_Sen2.mp4

 

잘린 영상 합치기

: ffmpeg -i out_Sen.mp4 -vf "[in] pad=iw:2*ih [top]; movie=out_Sen2.mp4 [bottom]; [top][bottom] overlay=0:main_h/2 [out]" -y D:\DSB_WORK\Encoder\FFMPEG\test/out_merge_Sen.mp4

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -vf "[in] pad=iw:2*ih [top]; movie=out_sen2.yuv [bottom]; [top][bottom] overlay=0:main_h/2 [out]" -y out_left.yuv

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih[1v][0v];[2:v][0v]scale2ref=oh*mdar:ih[2v][0v];[0v][1v][2v]hstack=3,scale='2*trunc(iw/2)':'2*trunc(ih/2)'" final.mp4   (3개의 영상 슬라이더 형태로)

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -video_size 960x540 -i out_sen4.yuv -filter_complex "[1:v][0:v]scale2ref=oh*mdar:ih[1v][0v]; [2:v][0v]scale2ref=oh*mdar:ih[2v][0v]; [3:v][0v]scale2ref=oh*mdar:ih[3v][0v]; [0v][1v][2v][3v]hstack=4,scale='2*trunc(iw/2)':'2*trunc(ih/2)'" out.yuv (4개의 영상 슬라이더 형태로)

 

: ffmpeg -video_size 960x540 -i out_sen1.yuv -video_size 960x540 -i out_sen2.yuv -video_size 960x540 -i out_sen3.yuv -video_size 960x540 -i out_sen4.yuv -filter_complex "[0:v][2:v]hstack=inputs=2[top];[1:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2[v]" -map "[v]" output.yuv ( 4개의 영상을 2x2 top/bottom처리 합치기 )

 

하드웨어 가속기 사용 영상 자르기

ffmpeg -hwaccel cuvid -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -c:v h264_nvenc D:\DSB_WORK\Encoder\FFMPEG\test/hw_out_Sen.mp4  (동작됨)

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i D:\DSB_WORK\streams/Sen.mp4 -c:v h264_nvenc -filter:v "crop=1920:1080:0:0" -c:a copy D:\DSB_WORK\Encoder\FFMPEG\test/hw_out_Sen.mp4

 

rawvideo 재생. ffplay -s 1920x1080 -pixel_format yuvj420p -framerate 23.98 -i dump.yuv

rawvideo 다운. ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo dump.yuv

리다리엑션 덤프 . ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo - > dump.yuv

덤프받은 영상 재생. ffplay -pixel_format yuvj420p -video_size 192x108 -framerate 24 dump.yuv

 

crop 미리보기 ( 하드웨어가속기 사용 ) ffplay -vcodec h264_cuvid -vf crop=1920:1080:0:0 D:\DSB_WORK\streams/Sen.mp4

 

ffmpeg -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -pix_fmt yuvj420p -f rawvideo > ffplay -s 1920x1080 -pixel_format yuvj420p -framerate 23.98

 

더 테스트해볼 것. ffmpeg -hwaccel_output_format cuda -c:v h264_cuvid -crop 0x1080x0x1920 -i D:\DSB_WORK\streams/Sen.mp4  -y -c copy -f mpegts - | ffplay -fs -

 

* ex) text.mp4 gpu crop format yuvj420 rawvideo data를 바로 ffplay로 재생하는 방법?

 

* 네임드파이프 전송 및 재생.

ffmpeg -c:v h264_cuvid -crop 540x1080x960x1920 -i D:\\DSB_WORK\\streams\\Sen.mp4 -y -c copy -f mpegts pipe:\\.\pipe\out_1 | ffplay -i pipe:\\.\pipe\out_1

 

 

-s 화면 크기 지정 (WxH 또는 비율)

-pix_fmt 픽셀 포멧 설정. list는 지원되는 모든 픽셀 포멧 보여줌.

-i input파일.

-vf

-filter:v

-crop 잘라내는 크기.

( 보통 -croptop, -cropbottom 형태로 상단,하단,,오 설정하여 크기 지정한다.)

( 현재 crop crop=width_to_crop:height_to_crop:top_left_x:top_left_y )

-> 첫번째:자를영역의 너비,

-> 두번째:자를영역의 높이,

-> 세번째:자르기를 시작할 좌상단 x좌표

-> 네번째:자르기를 시작할 좌상단 y좌표

-c:a 복사.

728x90

+ Recent posts