어떻게 사용하나요?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에 비트 전송률을 낮추라고 지시하는 것만으로는 원하는 결과를 얻지 못할 수 있습니다.
정보 내용을 줄이는 또 다른 방법은 색상 심도를 줄이는 것입니다. 이를 수행하는 방법은 논의되지 않았습니다.