2015-06-22 17 views
11

Tôi muốn đặt khoảng thời gian khung hình chính của video đầu vào thành 5 giây. Chỉ khi đó tôi mới có thể đạt được phân đoạn HLS 5 giây liên tục bằng FFmpeg. Làm thế nào để thiết lập khoảng khung hình chính đến 5 giây bằng cách sử dụng FFmpeg? (Mã dòng nhắc FFmpeg được đánh giá cao)cách thay đổi khoảng thời gian khung hình chính trong ffmpeg

Trả lời

16

Bạn sẽ cần phải mã hóa lại. Đặt tham số keyint của x264 thành 5 * fps và tắt scenecut. Nếu fps của bạn là 24 ví dụ:

ffmpeg -i <input> -vcodec libx264 -x264-params keyint=120:scenecut=0 -acodec copy out.mp4 

Điều này rõ ràng không tối ưu về chất lượng nhưng nó sẽ phù hợp với nhu cầu của bạn.

Đã chỉnh sửa để thay đổi no-scenecut thành scenecut=0, theo gợi ý về tiếng thở dài-cậu bé.

+1

Cảm ơn vì điều này ... và bạn nói đúng, thường xuyên hơn không, rối tung với khoảng thời gian khung hình chính là rối tung với chất lượng. –

+0

Bạn có bất kỳ nguồn nào nói rằng "nếu chúng tôi đặt khoảng thời gian khung chính, điều gì đó xấu xảy ra với chất lượng"?! –

+1

Điều này làm giảm chất lượng hoặc tốc độ bit. Mã hóa thông minh sẽ đặt khung hình chính khi có một khung cảnh để các khung trong tương lai có thể có tham chiếu rõ ràng. Nếu bạn buộc khoảng thời gian này, khung hình chính sẽ không được tối ưu ở tất cả các khung trong tương lai và điều này sẽ làm tổn thương toàn bộ luồng. – Ely

9

Thở dài.

Thông tin sai lệch về tùy chọn không có cảnh sát đã diễn ra lâu hơn tôi có thể nhớ. Không bao giờ nhập giá trị cho no-scenecut.

Có thể tìm thấy liên kết đến tài liệu here.

Đối FFmpeg bạn cần phải sử dụng hai công tắc sau:

-g 120 sẽ xác định một GOP 120 khung hình để tạo ra một Năm thứ hai GOP cho 23.976fps nội dung. Điều này hoạt động cùng với tùy chọn không có phối cảnh ..

-x264chọn không có cảnh sát sẽ buộc các khung hình chính được tạo theo giá trị GOP mà FFmpeg sử dụng. Mặc định cho libx264 là tạo khung hình chính khi phát hiện thay đổi cảnh. Nếu bạn kiểm tra tệp đầu ra bằng cách sử dụng MediInfo mà không có tùy chọn đó sẽ thấy "scenecut = 40". Khi thực hiện đúng cách đó sẽ là "scenecut = 0". Nếu tùy chọn này không được sử dụng thì khung hình chính sẽ được căn lề cho nội dung ABR và kích thước đoạn sẽ không thể đoán trước.

Không dùng từ ngữ của tôi cho nó, hãy chạy phần dưới đây dưới một bash shell trong đó $ inputfile là tên của tệp bạn muốn phân tích. Nếu bạn sử dụng hai thiết bị chuyển mạch được hiển thị ở trên thì bạn sẽ thấy một nhịp rất đồng đều của các khung hình chính đổ vào dấu nhắc lệnh.

ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv $inputfile | grep -n I | cut -d ':' -f 1 

Bạn cũng có thể tham khảo bài viết tôi đã viết về cách tạo nội dung phù hợp khung ABR phù hợp here.

+0

Để có độ chính xác đầy đủ, bạn nên sử dụng 'frame = key_frame'. Có thể có I-frames không phải là khung hình chính. – Mulvya

Các vấn đề liên quan