Làm cách nào để giới hạn kích thước tệp với ffmpeg?


10

Tôi muốn mã hóa video, có độ dài 60 giây, tới mục tiêu hoặc kích thước tối đa là 10 MB .

Có hai cách tiếp cận tôi biết. Một cái được giải thích trong FFMPEG-Wiki, và cái khác tôi tìm thấy trong tài liệu. Thật không may, tôi không tìm thấy lời giải thích khi nào nên sử dụng phương pháp nào.

Có bất kỳ phương pháp được đề nghị? Nếu không, những mặt trái / mặt trái của từng phương pháp là gì?

1) Tính toán và đặt Bitrate phù hợp với độ dài của video như được giải thích trong ffmpeg-wiki

(10 MB * 8192 [chuyển đổi MB thành kilobits]) / 60 giây = ~ 1365 kbits / s tổng bitrate 1365k - 128k (bitrate âm thanh mong muốn) = bitrate video 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) Sử dụng -fs tham số và để ffmpeg tìm ra nó.

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

1
Trong ví dụ đầu tiên của bạn, bước đầu tiên cũng nên sử dụng libx264như c:v. Trong fsví dụ này, bạn không chuyển mã video, vì -c:v copyđược sử dụng. Vì vậy, presetcrfcũng không có bất kỳ ảnh hưởng.
Gyan

Điều này hữu ích cho tôi: stackoverflow.com/a/34547102/470749
Ryan

Câu trả lời:


11

Các fstham số sẽ dừng việc mã hóa một lần nó chạm giá trị của nó. Vì vậy, nếu đầu ra chạm 10MBmốc trong khi mã hóa giây thứ 15, thì đó là thời lượng của tệp đầu ra của bạn.

Nếu bạn muốn đảm bảo rằng toàn bộ tệp được mã hóa nhưng nó không vượt qua kích thước mục tiêu đã đặt, thì hãy sử dụng phương pháp bitrate. Để phù hợp với chi phí kết nối và dữ liệu khác trong kích thước mục tiêu, hãy đặt tốc độ bit video của bạn thấp hơn một chút, giả sử, 1-2%

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.