ffmpeg를 사용하여 비디오 크기를 줄이는 방법은 무엇입니까?

ffmpeg를 사용하여 비디오 크기를 줄이는 방법은 무엇입니까?

어떻게 사용하나요?ffmpeg품질을 줄여서 비디오 크기를 줄이시겠습니까? (여유 공간이 많지 않은 모바일 장치에서 실행해야 하므로 당연히 가능한 가장 작은 크기로)?

동영상에서 자막(*.srt 또는 *.sub)을 사용할 수 있는 경우 이를 변환된 동영상 파일에 적합한 매개변수로 변환하고 싶다는 사실을 언급하는 것을 깜빡했습니다.

답변1

2020 업데이트: 이 답변은 2009년에 작성되었습니다. 2013년부터 H.264보다 더 나은 비디오 형식, 즉 H.265가 널리 사용됩니다(동일한 품질로 더 많이 압축하거나 동일한 크기로 더 높은 품질을 제공한다는 점에서 더 좋습니다). 이를 사용하려면 libx264 코덱을 libx265로 교체하고 CRF 값을 늘려(예: 4 또는 6 추가) 압축 레버를 더 밀어야 합니다. H.265의 합리적인 범위는 아마도 24~30일 것이기 때문입니다. 참고하세요줄이다CRF 값은 다음과 같습니다.더 높은비트 전송률로 인해더 높은고품질 비디오.

ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4

libx265를 지정할 수도 있습니다.기본, 이는 파일 크기와 품질에 영향을 미칩니다.


이전 H.264 형식을 사용하여 적용된 이 기술을 보려면 다음을 참조하세요.이 답변, 편의상 다음과 같이 인용됩니다.

대상 크기(비트 단위)를 비디오 길이(초 단위)로 나누어 필요한 비트 전송률을 계산합니다. 예를 들어 대상 크기는 1GB(1GB)입니다.바이트, 즉 8GB입니다.조금) 및 10,000초의 비디오(2시간 46분 40초), 800,000비트/초(800kbit/s)의 비트 전송률 사용:

ffmpeg -i input.mp4 -b 800k output.mp4

고려해 볼 만한 다른 옵션은 다음과 같습니다.일정한 비율 요소, 이는 평균 비트 전송률을 낮추지만 더 나은 품질을 유지합니다. CRF를 18에서 24 사이로 변경하세요. 낮을수록 비트 전송률은 높아집니다.

ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4

답변2

모바일 장치에 더 많은 비디오를 담기 위해 파일 크기를 줄이고 싶다고 말씀하셨는데, 이것이 제 사용 사례이기도 합니다. 여기에 있는 모든 답변은 압축 품질을 줄이는 것에 관한 것이지만 비디오 프레임 크기를 줄이는 것에 대해서는 아무도 언급하지 않았습니다. 훨씬 더 빠르고, 소스에 따라 최대 몇 배 더 빠르며, 인코딩할 픽셀 수가 적기 때문에 해상도는 더 낮습니다. 결과적으로 파일 크기를 크게 줄일 수 있습니다.

단점은 픽셀 수가 적다는 것은 이미지의 세부 묘사가 적다는 것을 의미하므로 품질도 많이 떨어진다는 것입니다. 그러나 소형 장치로 변환하는 경우 이는 허용될 수 있습니다.

FFmpeg 문서를 참조하세요더 많은 정보를 알고 싶습니다.

절반 크기로 조정하려면:

ffmpeg -i input.mkv -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" half_the_frame_size.mkv

1/3 크기:

ffmpeg -i input.mkv -vf "scale=trunc(iw/6)*2:trunc(ih/6)*2" a_third_the_frame_size.mkv

쿼터 사이즈:

ffmpeg -i input.mkv -vf "scale=trunc(iw/8)*2:trunc(ih/8)*2" a_fourth_the_frame_size.mkv

5분의 1 크기:

ffmpeg -i input.mkv -vf "scale=trunc(iw/10)*2:trunc(ih/10)*2" a_fifth_the_frame_size.mkv

이 예에서는 픽셀 크기가 일부 코덱(H265 포함)에서 요구하는 2의 배수가 되도록 크기를 값의 두 배로 나누고 2를 곱합니다.

-2또한 한 매개변수에서 특정 크기로 크기를 조정하고 다른 매개변수에 대해 동일한 크기를 자동으로 유지할 수도 있습니다. 예를 들어 한 방향의 360픽셀은 다음을 사용합니다.

-vf "scale=-2:360"

해상도 변경에 주의하세요.언제나레코딩이 필요하므로 다른 답변의 모든 내용이 여기에도 적용되며 이러한 예는 H265 옵션과 호환됩니다(예: -c:v libx265 -crf 28

답변3

이 질문에 대해 제안된 다른 답변 대부분을 테스트했습니다. 테스트 데이터의 결론은 다음과 같습니다. 제가 테스트한 제안 답변은 다음과 같습니다.

(BR) 비트 전송률을 수정하려면 다음을 사용하세요.

ffmpeg -i $infile -b $bitrate $newoutfile 

(CR) 고정율 요소를 변경하려면 다음을 사용하십시오.

ffmpeg -i $infile -vcodec libx264 -crf 23 $outfile

(SZ) 비디오 화면 크기를 변경하려면(예: 픽셀 크기의 절반으로) 다음을 사용합니다.

ffmpeg -i $infile -vf "scale=iw/2:ih/2" $outfile

(BL) 다음 명령을 사용하여 H.264 프로필을 "기준"으로 변경합니다.

ffmpeg -i $infile -profile:v baseline $outfile

(DF) 기본 ffmpeg 처리를 사용하려면 다음을 사용하십시오.

ffmpeg -i $infile $outfile

데이터

  • "크기" - 원본 비디오를 기준으로 변환된 비디오의 픽셀 크기 비율입니다.
  • "비트 전송률" - 원본 비디오와 변환된 비디오의 비트 전송률입니다.
  • "정의" - 비디오의 픽셀 크기입니다.
  • "변환" - 비디오를 변환하는 데 걸리는 시간(초)입니다.

제안된 방법을 이용하여 (BL)의 목표 비트레이트를 계산하였다.

=== 파일 A - 노드가 Angular-Fnbixa7Ts6M.mkv에 전력을 공급하는 방법 ===

            original    BR         CR         SZ         BL         DF
            --------    ---        --         --         --         --
size        64152 kb    214%       76%        40%        83%        76%
bitrate     411 kb/s    883        313        165        342        313
definition  1920x1080   1920x1080  1920x1080  960x540    1920x1080  1920x1080
convert     --          648        509        225        427        510

=== 파일 B - Angular와 함께 GraphQL 사용_ 작성자: Lee Costello-OGyFxqt5INw.mkv ===

            original    BR         CR         SZ         BL         DF
            --------    ---        --         --         --         --
size        410301 kb   33%        109%       28%        143%       109%
bitrate     2687 kb/s   880        2920       764        3843       2920
definition  3840x2160   3840x2160  3840x2160  1920x1080  3840x2160  3840x2160   
convert     --           2307       3188       1116       2646       3278

결론적으로

  • (SZ) 방법은 확실히 가장 빠른 방법입니다. 2~4배 더 빠릅니다. 다른 모든 방법은 비디오의 실제 길이보다 변환하는 데 시간이 더 오래 걸리기 때문에 이는 HD 비디오의 경우 큰 문제가 될 수 있습니다! 예를 들어 (CR) 방식을 사용하면 21분짜리 동영상을 변환하는 데 53분이 걸렸습니다.

  • 비디오의 해상도가 비디오가 표시될 화면의 해상도보다 큰 경우 (SZ) 방법이 가장 좋은 방법입니다. 예를 들어, 휴대폰이 1080p 사진만 표시할 수 있다면 3840x2160 비디오를 보내는 것은 낭비일 뿐입니다. 크기를 1080p로 절반으로 줄이는 것이 좋습니다.

  • 제안된 답변 중 일부는 실제로 일부 동영상의 크기를 늘립니다. 예를 들어 (BR) 방법은 1080p 샘플 크기를 두 배 이상 늘립니다. 그러나 2160p 크기는 1/3로 줄어듭니다. HD 샘플의 경우 (CR), (BL) 및 (DF) 방법은 모두 비디오 크기를 증가시킵니다.

정답(또는 가장 좋은) 답변

먼저 대상 모니터가 지원하는 최대 해상도로 해상도를 줄이는 것이 좋습니다.

파일 크기를 더 줄이고 싶다면 개인 선택에 달려 있습니다. 정보 내용을 줄이거나 압축을 늘릴 수 있습니다.

  • 걱정하지 않으신다면 해상도를 더 낮추셔도 됩니다.

  • 비디오에 빠른 액션 장면이 포함되어 있지 않으면 프레임 속도를 줄여야 할 수도 있습니다.

  • 강력한 프로세서가 있고 공간이 유일한 문제인 경우 압축 비율을 높일 수 있습니다.

  • 비트레이트는 여러 요인의 조합입니다. 따라서 ffmpeg에 비트 전송률을 낮추라고 지시하는 것만으로는 원하는 결과를 얻지 못할 수 있습니다.

  • 정보 내용을 줄이는 또 다른 방법은 색상 심도를 줄이는 것입니다. 이를 수행하는 방법은 논의되지 않았습니다.

답변4

특정 비트 전송률을 찾고 있지 않는 한 이 -crf옵션을 권장합니다.

x264이는 에 설명된 대로 인코딩 에 가장 일반적으로 사용됩니다.이 기사.

존재하다짧은: CRF(Constant Rate Factor) 23은 DVD 품질의 영화(~700MB - 1GB)를 생성하고, CRF 값이 낮을수록 품질이 높아집니다(대형 파일).

링크된 기사의 예:

ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4

관련 정보