Sử dụng ffmpeg để mã hóa video chất lượng cao [đã đóng]


92

Tôi có một tập hợp các khung video được lưu dưới dạng hình ảnh trong một thư mục và tôi đang cố gắng mã hóa chúng thành một video chất lượng tốt, tuy nhiên mọi cài đặt và mọi định dạng tôi thử đều tạo ra các hiện vật rất đáng chú ý.

Lệnh cơ bản là:

ffmpeg -r 25 -i %4d.png myvideo.mpg

và tôi đã thử cờ minrate và maxrate. Mọi định dạng {mpg, avi, mov, flv} đều được.

Bất kỳ đề xuất cho cài đặt? Kích thước tệp cuối cùng không phải là một vấn đề.


7
Trên máy Mac của tôi, tôi sử dụng lệnh sau: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Tôi thấy rằng để buộc tốc độ khung hình, tôi phải chỉ định nó cho cả tệp đầu vào và tệp đầu ra. Codec này dường như phù hợp với tôi - bạn có thể không cần chỉ định nó. Tôi chỉ muốn bao gồm những gì tôi đã làm vì tôi đã dành rất nhiều thời gian để làm việc đó. Nhược điểm duy nhất là hình ảnh đầu vào của tôi có độ tương phản cao (các quả bóng màu xanh và đỏ trên nền trắng) và sau đó trong phim, các quả bóng bắt đầu trở thành cùng một màu tối - một hiệu ứng tương phản không mong muốn.
jvriesem

Cảm ơn @jvriesem! Nó hiệu quả tuyệt vời đối với tôi.
Dan Loewenherz

Tôi đề nghị đặt câu hỏi này trong StackOverflow cho Hệ thống Đa phương tiện
Hamed

c ++ phiên bản stackoverflow.com/a/43464269/6180077 hãy truy cập liên kết này để làm việc với ứng dụng ghi màn hình định dạng FFMPEG c ++ mp4.
Abdullah Farweez

kiểm tra liên kết này mà minh chứng cho file video bằng văn bản sử dụng FFMPEG libs programatically: stackoverflow.com/a/43464269/6180077
Abdullah Farweez

Câu trả lời:


64

Đôi điều:

  • Bạn cần đặt tốc độ bit của video. Tôi chưa bao giờ sử dụng tốc độ tối thiểu và tốc độ tối đa nên tôi không biết chúng hoạt động chính xác như thế nào, nhưng bằng cách đặt tốc độ bit bằng -bnút chuyển, tôi có thể có được video chất lượng cao. Bạn cần đưa ra một tốc độ bit mang lại sự cân bằng tốt giữa chất lượng nén và video. Bạn có thể phải thử nghiệm điều này vì tất cả phụ thuộc vào kích thước khung hình, tốc độ khung hình và lượng chuyển động trong nội dung video của bạn. Hãy nhớ rằng DVD có xu hướng trung bình khoảng 4-5 Mbit / s cho 720x480, vì vậy tôi thường bắt đầu từ đó và quyết định xem mình cần nhiều hơn hay ít hơn và sau đó chỉ cần thử nghiệm. Ví dụ: bạn có thể thêm -b 5000kvào dòng lệnh để có được nhiều hơn hoặc ít hơn tốc độ bit video DVD.

  • Bạn cần chỉ định codec video. Nếu bạn không, ffmpeg sẽ mặc định thành MPEG-1, khá cũ và không cung cấp lượng nén gần như MPEG-4 hoặc H.264. Nếu phiên bản ffmpeg của bạn được tạo với hỗ trợ libx264, bạn có thể chỉ định -vcodec libx264như một phần của dòng lệnh. Mặt khác -vcodec mpeg4cũng sẽ hoạt động tốt hơn MPEG-1, nhưng không tốt bằng x264.

  • Có rất nhiều tùy chọn nâng cao khác sẽ giúp bạn tạo ra chất lượng tốt nhất ở tốc độ bit thấp nhất. Hãy xem ở đây cho một số ví dụ.


6
Tốc độ bit không đổi có hại cho chất lượng. Sử dụng hệ số tốc độ không đổi là tốt hơn (đó là một trong các chế độ hoạt động của x264). Ví dụ: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 là CRF với mức giảm chất lượng rất thấp, nhưng tốc độ bit có thể sẽ thấp. Và bạn có thể thử các giá trị CRF lớn hơn nếu bạn cần kích thước tệp nhỏ hơn. Và như bạn thấy, điều này khá đơn giản.
Tên hiển thị

lưu ý rằng -b phải ở trước video nhưng sau đầu vào -i
mateuszb.

45

Bạn cần chỉ định tùy chọn -vb để tăng tốc độ bit của video, nếu không, bạn sẽ nhận được tùy chọn mặc định tạo ra video nhỏ hơn nhưng có nhiều giả hơn.

Hãy thử một cái gì đó như sau:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
Đây là công việc tốt cho tôi, cảm ơn;)
thiago.adriano26

15

Đảm bảo rằng các PNG hoàn toàn mờ trước khi tạo video

Ví dụ: với imagemagick, cung cấp cho chúng một nền đen:

convert 0.png -background black -flatten +matte 0_opaque.png

Từ các thử nghiệm của tôi, không có tốc độ bit hoặc codec nào đủ để làm cho video trông đẹp nếu bạn cung cấp các tệp PNG ffmpeg với độ trong suốt


Điều này giải quyết các vấn đề đối với tôi.
Matěj Kripner

0

Trừ khi bạn thực hiện một số công việc xử lý hậu kỳ, video sẽ không bao giờ tốt hơn những khung hình ban đầu. Cũng giống như sách lật, nếu bạn có một "bước nhảy" lớn giữa các khung hình chính, nó sẽ trông rất buồn cười. Nói chung, bạn cần có đủ "cột" giữa các khung hình chính để tạo ra hình ảnh động mượt mà. HTH


Những hình ảnh là từ một chuỗi video ban đầu. Họ chỉ có một chút cắt xén, chia tỷ lệ và những gì chưa làm được với imagemagick. Các hiệu ứng chắc chắn là tạo tác nén. Bây giờ tôi đã nhìn thấy bài này, mà dường như có một câu trả lời: stackoverflow.com/questions/3158235/...
CakeMaster

@CakeMaster Tôi không đề cập đến việc nén mất dữ liệu vì bạn có hình ảnh ".png" trong ví dụ của mình. .png có thể bị lỗ, nhưng tôi thấy chúng thường không. .jpg's hầu như luôn luôn bị mất mát do đó tạo tác phẩm khi sử dụng chúng. Nếu có thể, bạn có thể lưu lại tệp .png của mình bằng cách nén không mất dữ liệu.
JustBoo
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.