Tốc độ khung hình tối thiểu cho codec H264


7

Khi tạo video từ các tệp hình ảnh đơn lẻ trong khi mỗi tệp hình ảnh sẽ hiển thị trong khoảng một giây, việc mã hóa video với tốc độ khung hình cực thấp như 1 khung hình mỗi giây là điều hợp lý. Đối với loại ứng dụng này, mọi tốc độ khung hình lớn hơn mức này sẽ gây lãng phí tài nguyên.

Tôi tự hỏi liệu codec H264 (hoặc bất kỳ triển khai cụ thể nào, chẳng hạn như x264) có giới hạn thấp hơn cho tốc độ khung hình dưới đây mà nó gặp phải các vấn đề kỹ thuật hoặc một số loại không ổn định. Trong trường hợp không có vấn đề gì với mã hóa, chúng ta có thể mong đợi các trình phát video xử lý chính xác tốc độ khung hình thấp bất thường như vậy không?

Cảm ơn vì đã chia sẽ kinh nghiệm của bạn!


Câu trả lời:


2

Tôi với AJ. Trừ khi bạn biết đặc điểm của mọi người chơi có thể xem điều này, sẽ không khôn ngoan khi dựa vào một mẫu kết quả thử nghiệm nhỏ. Sử dụng tốc độ khung hình tiêu chuẩn như 24 khung hình / giây với khoảng thời gian khung hình chính là 24 khung hình sẽ cung cấp cho bạn về cơ bản điều tương tự mà không ảnh hưởng đến khả năng tương thích. Các khung trung gian sẽ nhỏ nhất vì sẽ không có thay đổi có thể phát hiện được để mã hóa.


1
yup, một khung giống hệt bit chỉ mất khoảng 15 byte. Tất cả macroblocks = Skip và CABAC nén mẫu bit lặp lại cho điều đó rất tốt.
Peter Cordes

2
Tuy nhiên, tôi chỉ lo lắng về các trình phát phần cứng cho rằng họ sẽ phát tín hiệu TV 60 hoặc 50Hz. h.264 không quan tâm đến thời gian, nó chỉ là khung hình, ngay cả trong video VFR. Khung thời gian là một vấn đề container. Các định dạng container rất linh hoạt. Có thể dễ dàng có một khung hình duy nhất được hiển thị trong 1 phút, sau đó 150 khung hình / giây cho một số khung hình, sau đó một khung hình khác được hiển thị trong một thời gian hoặc bất cứ điều gì bạn thích. Lưu trữ video VFR trong mkv, mp4 và một số container hiện đại khác là một vấn đề được giải quyết.
Peter Cordes

5

Tôi không chắc nó sẽ hoạt động như thế nào ở tốc độ khung hình rất thấp, nhưng điều đáng nói là điều này cũng sẽ giới hạn các tùy chọn của bạn về cách thức và thời điểm bạn có thể thay đổi khung hình vì chúng sẽ phải tuân theo chu kỳ đồng hồ. Những gì có khả năng làm việc trong trường hợp này là một khoảng thời gian keyframe dài. Phần lớn các khung trong một nén như H.264 chỉ lưu trữ các thay đổi từ khung trước đó. Trong trường hợp ảnh tĩnh, tỷ lệ nén sẽ rất lớn do rất ít (không có) thay đổi xảy ra giữa các khung. Tôi không chắc chắn rằng bạn thực sự sẽ nhận đủ tiền tiết kiệm từ việc giảm tốc độ khung hình để xứng đáng với sự mất kiểm soát khi bạn có thể thay đổi khung hình.

Đặt cược tốt nhất sẽ là thử nó với phương tiện truyền thông của bạn và xem kết quả. Nén là một thứ phụ thuộc nội dung cao và chất lượng và độ nén tốt nhất cho bất kỳ clip cụ thể nào sẽ phụ thuộc rất nhiều vào bản chất của clip đó, vì vậy thử nghiệm vẫn là cách tốt nhất để kiểm tra.


Có một nhược điểm nén ngoài nhận xét trước đây của tôi về một câu trả lời khác đã nói: Nếu có nhiều dư thừa giữa các hình ảnh khác nhau (nghĩa là vẫn là video chứ không phải trình chiếu), việc đệm bằng các hình ảnh giống hệt nhau sẽ khiến cho bộ mã hóa khó tìm và khai thác điều đó. Tùy thuộc vào cài đặt mã hóa, bộ mã hóa sẽ chỉ giữ một số số khung cũ như các tham chiếu có thể có cho các khung mới và chỉ có thể tìm kiếm trong GOP (ví dụ: 250 khung mặc định cho x264). Nếu tất cả các ứng cử viên đó là cùng một hình ảnh, điều đó không cung cấp cho nó nhiều tùy chọn để tìm một tài liệu tham khảo tốt hơn cho mỗi khối ...
Peter Cordes

... Ví dụ: sau khi một đối tượng tiền cảnh di chuyển trước một số chi tiết nền, bộ mã hóa có thể lưu các bit bằng cách tham chiếu giao diện của nó trong một khung cũ hơn trước khi nó bị che khuất. h.264 có thể chọn các khung tham chiếu trên cơ sở mỗi khối. Đây là một hiệu ứng tương đối nhỏ; Bộ mã hóa h.264 tốt làm tốt chỉ với 1 khung tham chiếu, nhưng nó vẫn có hại cho hiệu quả nén
Peter Cordes

Chắc chắn, bạn vẫn cần cài đặt mã hóa phù hợp, nhưng bạn có thể tăng kích thước GOP của mình thay vì giảm tốc độ khung hình nếu mọi thứ đều tĩnh. Nếu họ không, thì giảm tốc độ khung hình không phải là một lựa chọn tuyệt vời để bắt đầu. Tôi tự hỏi nếu đã có bất kỳ công việc trên một định dạng GOP biến.
AJ Henderson

Tôi nghĩ rằng hình ảnh lặp đi lặp lại vẫn sẽ làm giảm cơ hội cho các kim tự tháp B hữu ích và nhiều tùy chọn khung P tham chiếu. Nhưng tôi đoán rằng một bộ mã hóa có thể giữ một khung P cũ từ bất cứ nơi nào trong GOP, do đó, mất đi các khung B tham chiếu có lẽ là tất cả trên lý thuyết, nhưng thực tế là IDK.
Peter Cordes

1
Các bộ mã hóa MPEG-2 tốt có thể đưa ra các quyết định khung hình chính dựa trên các phối cảnh và các quyết định khung P vs B dựa trên nội dung. : mpeg2videoBộ mã hóa của P ffmpeg liệt kê một -sc_thresholdtùy chọn và -b_strategytùy chọn để kiểm soát chiến lược lựa chọn I / P / B. Nhưng dù sao, h.265 rất gọn gàng, với các khối DCT lên tới 32x32 và các đơn vị dự đoán 64x64 rất lớn có thể chia thành các khối nhỏ hơn nếu cần. sonnati.wordpress.com/2014/06/20/h265-part-i-t kỹ thuật-tổng quan . so với các macroblocks h.264 16x16 chỉ với các khối DCT 4 x 4 hoặc 8 (chỉ cấu hình cao). Ngoài ra forum.doom9.org/showthread.php?t=167081
Peter Cordes

2

Tôi đã chơi xung quanh với việc biến một loạt ảnh tĩnh thành trình chiếu h.264, chủ yếu là để so sánh hiệu quả nén của JPG so với h.264. Tôi đã nhận được một số câu trả lời hữu ích về ý nghĩa kỹ thuật của việc này từ x264 dev trên doom9. ví dụ: buộc x264 không sử dụng khung B cho việc này, vì các hình ảnh không liên quan sẽ cần rất nhiều macroblocks và mã hóa chúng trong khung B đắt hơn.

Trước đây, hành vi của người chơi phần mềm với video tốc độ thấp không phải là lý tưởng. Tôi nghĩ rằng một người chơi lớn tuổi hơn chỉ kiểm tra đầu vào bàn phím khi nó hiển thị một khung. Vì vậy, có độ trễ giữa đầu vào của người dùng và phản ứng của người chơi. mplayer2 và mpv không có vấn đề này. Ngoài ra, những người chơi chỉ có thể tìm kiếm các khung hình chính sẽ tìm kiếm trong các khối thực sự lớn (2 phút hoặc lâu hơn!) Nếu bạn không giảm khoảng cách khung hình chính. x264 sẽ không chèn IDR (ranh giới GOP) ở mọi nơi nếu các hình ảnh có liên quan với nhau.

Sử dụng x264 -tune stillimage. Nó tăng cường tối ưu hóa psy , bởi vì sự ổn định theo thời gian không phải là vấn đề đối với trường hợp sử dụng này. Kết quả tìm kiếm thêm: từ google .

Tôi đồng ý với các đề xuất khác để có một số khung hình trùng lặp, để đưa FPS lên tối thiểu 5 hoặc một cái gì đó, chỉ trong trường hợp người chơi xấu. Tuy nhiên, điện thoại thông minh / máy tính bảng sẽ không gặp vấn đề gì khi phát video FPS biến đổi, vì chúng thường ghi theo cách đó khi mức độ ánh sáng giảm. Vì các video FPS biến đổi từ điện thoại hiện đã có, nên hỗ trợ trình phát phần cứng cho chúng. Tôi sẽ không mong đợi vấn đề, nhưng tôi cũng sẽ không ngạc nhiên nếu có ít nhất một số người chơi phần cứng cũ không xử lý tốt.

Một khung của tất cả các macroblocks "bỏ qua" chỉ mất khoảng 20byte ở 1080p, IIRC. Tuy nhiên, một lý do tôi không thích các khung trùng lặp là vì nó cản trở bước đơn để đi qua các hình ảnh theo cách thủ công.


Tuy nhiên, có một nhược điểm nén khi sao chép các khung : Nếu có nhiều dư thừa giữa các hình ảnh khác nhau (nghĩa là vẫn là video chứ không phải trình chiếu), việc đệm bằng các hình ảnh giống hệt nhau sẽ khiến bộ mã hóa khó tìm và khai thác hơn.

Tùy thuộc vào cài đặt mã hóa, bộ mã hóa sẽ chỉ giữ một số số khung cũ như các tham chiếu có thể có cho các khung mới và chỉ có thể tìm kiếm trong GOP (ví dụ: 250 khung mặc định cho x264). Nếu tất cả các ứng cử viên đó là cùng một hình ảnh, điều đó không cung cấp cho nó nhiều tùy chọn để tìm một tài liệu tham khảo tốt hơn cho mỗi khối.

ví dụ: Sau khi một đối tượng tiền cảnh di chuyển trước một số chi tiết nền, bộ mã hóa có thể lưu các bit bằng cách tham chiếu giao diện của nó trong một khung cũ hơn trước khi nó bị che khuất. h.264 có thể chọn các khung tham chiếu trên cơ sở mỗi khối. Đây là một hiệu ứng tương đối nhỏ; Bộ mã hóa h.264 tốt vẫn hoạt động tốt chỉ với 1 khung tham chiếu, nhưng nó vẫn có hại cho hiệu quả nén và lãng phí thời gian sử dụng pin / pin / thời gian CPU để sao chép bộ nhớ xung quanh giải mã và hiển thị thêm khung.


Khôi phục VFR sau khi NLE buộc tất cả các clip của bạn đạt tốc độ khung hình cao:

FFmpeg có một mpdecimatebộ lọc loại bỏ các khung tương tự. Bạn có thể đặt giới hạn cho số lượng khung hình có thể giảm. Với ngưỡng tương tự chặt chẽ, bạn nên làm cho nó chỉ giảm các bản sao thực tế.

ví dụ: ffmpeg -i input.mp4 -vf mpdecimate=max=9:hi=400 -c:a copy -c:v libx264 -preset veryslow -tune film output_vfr.mkvgiảm tối đa 9 khung hình liên tiếp và chỉ khi khối khác biệt nhất khác nhau dưới "400" và (mặc định): không quá 33% số khối khác nhau bởi các đơn vị "320". IIRC, về cơ bản, nó là SAD 8x8 trên các thành phần pixel.

(FFmpeg mặc định là CFR cho .mp4đầu ra, tuy nhiên, vì vậy hãy sử dụng -vsync 2cho .mp4đầu ra tốc độ khung hình thay đổi . Tôi nghĩ rằng điều đó an toàn: Sự cố với tốc độ khung hình khi chuyển đổi video bằng ffmpeg với libx264 )


1

Hầu hết các NLE sẽ cho phép bạn nhập một hình ảnh tĩnh dưới dạng thời gian bạn muốn nó xuất hiện trong dòng thời gian giả sử bạn đã đặt các thuộc tính dự án thành một số tốc độ khung hình tiêu chuẩn như 30 khung hình / giây / giây, v.v.

Trong Vegas Pro, tôi có thể đặt thời gian hình ảnh tĩnh sẽ xuất hiện trên dòng thời gian, từ một phần giây đến vài giây. Nếu tôi đặt thành 1 giây thì khi tôi kéo và thả hình ảnh tĩnh trong dòng thời gian, Vegas sẽ tạo đủ khung để đáp ứng yêu cầu của tôi. Tôi thường chỉnh sửa với video 30 khung hình / giây và khi tôi thêm hình ảnh tĩnh, tôi đang trộn dòng thời gian với video 30 khung hình / giây đã có sẵn (AVCHD 1080p).

Để cho bạn một câu trả lời cụ thể, tôi sẽ cần biết NLE bạn đang sử dụng cái gì.


Tôi chỉ áp dụng một phần mềm mã hóa thô như ffmpeg, hoặc avconvvì vậy không cần phải nói về bất kỳ NLE nào. Tôi nghĩ rằng câu hỏi đã được trả lời khá nhiều với "Chỉ cần đi theo tốc độ khung hình tiêu chuẩn mà tất cả người chơi có thể xử lý đúng. Không có 'lãng phí tài nguyên' thực sự, bởi vì sơ đồ mã hóa đủ tốt để xử lý hiệu quả với hình ảnh tĩnh".
Jan-Philip Gehrcke
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.