동일한 형식으로 비디오 크기를 줄이고 프레임 크기를 줄입니다.
이 질문은 매우 기본적인 것입니다.
손실 압축 (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 28
47 초가 걸린 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를 참조하십시오 .
이것이 누군가를 돕기를 바랍니다!
'IT TIP' 카테고리의 다른 글
jQuery는 클래스 속성이없는 모든 div를 가져옵니다. (0) | 2020.11.03 |
---|---|
독립형 Java 애플리케이션에서 Spring 3 autowire 사용 (0) | 2020.11.03 |
지정된 컨테이너에서 고정 된 수의 수평 탐색 항목을 균등하고 완전히 늘리는 방법 (0) | 2020.11.03 |
Eclipse에서 클래스 및 해당 파일의 이름을 바꾸는 방법 (0) | 2020.11.03 |
Windows 7 : DLL을 등록 할 수 없음-오류 코드 : 0X80004005 (0) | 2020.11.03 |