IT TIP

동일한 형식으로 비디오 크기를 줄이고 프레임 크기를 줄입니다.

itqueen 2020. 11. 3. 19:35
반응형

동일한 형식으로 비디오 크기를 줄이고 프레임 크기를 줄입니다.


이 질문은 매우 기본적인 것입니다.

손실 압축 (WMV, MPEG) 형식의 프레임 크기 / 속도를 줄여 동일한 형식으로 더 작은 크기의 더 작은 비디오를 얻을 수있는 방법이 있습니까?

이에 대한 오픈 소스 또는 독점 API가 있습니까?


ffmpeg 는이 기능을 제공합니다. 당신이해야 할 일은 다음과 같이 실행하는 것입니다.

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>

최신 버전의 ffmpeg의 경우 다음으로 변경해야 -b합니다 -b:v.

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>

MPEG 1 비디오 코덱을 사용하고 원본 오디오 스트림을 복사하기 만하면 입력 비디오 파일을 크기가 640 x 480이고 비트 전송률이 512 킬로 비트 / 초인 비디오로 변환합니다. 물론 필요한 값을 연결하고 크기와 비트 전송률을 사용하여 원하는 품질 / 크기 절충안을 얻을 수 있습니다. 문서에 설명 된 다른 옵션도 많이 있습니다.

실행 ffmpeg -formats또는 ffmpeg -codecs사용 가능한 포맷 및 코덱의 모든 목록은. 최종 출력을 위해 특정 코덱을 대상으로 할 필요가없는 경우 H.264와 같은 최신 코덱을 사용하여 품질 손실을 최소화하면서 더 나은 압축 비율을 얻을 수 있습니다.


동일한 화면 크기를 유지하려면 crf factor 사용을 고려할 수 있습니다. https://trac.ffmpeg.org/wiki/Encode/H.264

나를 위해 작동하는 명령은 다음과 같습니다. (Mac -strict -2에서는 aac 오디오 코덱을 사용 하려면 추가해야합니다 .

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4

H.264 코덱을 사용하여 고정 비트 전송률을 선택하는 대신 https://trac.ffmpeg.org/wiki/x264EncodingGuide에 설명 된대로 다른 사전 설정을 선택할 수도 있습니다 . 또한 KeyJ의 블로그 ( 보관 된 버전 ) 에서 비디오 인코더 비교가 흥미로운 것을 발견 했습니다. H.264와 Theora 등을 비교합니다.

다음은 내가 시도한 다양한 옵션의 비교입니다. 녹화 된 비디오는 원래 크기가 673M로, RecordMyScreen을 사용하여 iPad에서 촬영했습니다 . 1024x768의 해상도로 약 20 분 길이입니다 (비디오의 절반이 비어 있으므로 768x768로 자릅니다). 크기를 줄이기 위해 해상도를 480x480으로 낮췄습니다. 오디오가 없습니다.

결과는 동일한 1024x768을 기본으로 사용하고 자르기, 크기 조정 및 필터 적용 ) :

  • 특별한 옵션 없음 : 95M (인코딩 시간 : 1 분 19 초).
  • 에서만 -b 512k첨가 크기 (: 1m17s 시간 코딩) 77M로 떨어졌다.
  • -preset veryslow(아니오 -b)으로 70M (인코딩 시간 : 6m14s)이되었습니다.
  • 모두 -b 512k-preset veryslow, 크기가 77M (단지보다 10 만 작아지게된다 -b 512k).
  • 를 사용하면 5 분 -preset veryslow -crf 2847 초가 걸린 39M 파일을 얻습니다 (시각적 품질 차이 없음).

N = 1이므로 결과를 염두에두고 테스트를 수행하십시오.


Mac 및 Windows Call Handbrake에 대한 응용 프로그램이 있습니다. 이것은 명령 줄 항목이 아니라 빠른 파일 열기-출력 파일 형식 및 대략적인 출력 크기를 선택하는 동시에 비디오에 대한 대부분의 좋은 내용을 유지하면 좋습니다. , 그것은 최선의 ffmpeg의 그래픽보기 일뿐입니다 ... 그것은 그 다이 하드 문자를위한 명령 줄 입력을 지원합니다 .. https://handbrake.fr/downloads.php


ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
  • -i 입력 파일

  • -b : v 비디오 출력 비디오 비트 레이트 (KB) (시도해야 함)

  • -s 출력 비디오의 크기

  • -fs 출력 비디오의 FILESIZE ( KB)

  • -vcodec videocodec (사용 ffmpeg -codecs가능한 모든 코덱을 나열하는 데 사용)

  • -출력 비디오 용 코덱 오디오 코덱 (오디오 스트림 만 복사하고 템퍼링하지 않음)

너무 최근에 이렇게하고 싶었 기 때문에 FFmpeg사용 하여 비디오를 트랜스 코딩하는 동시에 원본 메타 데이터 (파일 수정 타임 스탬프 포함)를 최대한 보존하는 Shrinkwrap 이라는 도구를 만들었습니다 .

Docker 컨테이너로 실행할 수 있습니다.

docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids

어디:

  • / path / to / your / videos /는 변환하려는 비디오가있는 위치입니다.
  • --input-extension은 처리하려는 동영상 유형입니다. 여기 .mp4
  • --ffmpeg-opts는 코드 변환을 사용자 정의하는 데 사용할 임의의 FFmpeg 옵션입니다.

그런 다음 확장자와 일치하는 모든 비디오 파일을 재귀 적으로 찾아서 -tc접미사 가있는 동일한 이름의 파일로 모두 트랜스 코딩합니다 .

더 많은 구성 옵션, GoPro 사전 설정 등은 readme를 참조하십시오 .

이것이 누군가를 돕기를 바랍니다!

참고 URL : https://stackoverflow.com/questions/4490154/reducing-video-size-with-same-format-and-reducing-frame-size

반응형