ffmpeg로 파일 크기를 제한하는 방법은 무엇입니까?


10

길이가 60 초인 비디오를 대상 또는 최대 크기 인 10MB 로 인코딩하고 싶습니다 .

내가 아는 두 가지 접근 방식이 있습니다. 하나는 FFMPEG-Wiki에 설명되어 있고 다른 하나는 문서에서 발견되었습니다. 불행히도, 나는 언제 어떤 방법을 사용 해야하는지에 대한 설명을 찾지 못했습니다.

이러한 방법 중 권장되는 방법이 있습니까? 그렇지 않다면, 각 방법의 단점은 무엇입니까?

1) ffmpeg-wiki에 설명 된대로 비디오의 길이와 일치하도록 비트 전송률을 계산하고 설정하십시오.

(10MB * 8192 [MB를 킬로 비트로 변환]) / 60 초 = ~ 1365kbits / s 총 비트 전송률 1365k-128k (원하는 오디오 비트 전송률) = 1237k 비디오 비트 전송률

ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4

2) -fs 매개 변수를 사용하고 ffmpeg가 알아 내도록하십시오.

ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4

1
첫 번째 예에서 첫 번째 단계는로도 사용해야 libx264합니다 c:v. 이 fs예 에서는 비디오 -c:v copy가 사용 되므로 비디오를 트랜스 코딩하지 않습니다 . 따라서 presetcrf효과도 없습니다.
Gyan

이것은 나를 위해 도움이되었다 : stackoverflow.com/a/34547102/470749
Ryan

답변:


11

fs그것의 값을 명중하면 매개 변수는 인코딩을 중지합니다. 따라서 10MB15 초를 인코딩하는 동안 출력이 마크에 도달하면 출력 파일의 지속 시간입니다.

전체 파일이 인코딩되었지만 설정된 대상 크기를 초과하지 않도록하려면 비트 전송률 방법을 사용하십시오. 대상 크기 내의 멀티플렉싱 오버 헤드 및 기타 데이터를 수용하려면 비디오 비트 전송률을 1-2 % 정도 약간 낮게 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.