Cách mã hóa video ở 30 FPS từ hình ảnh được chụp ở 7 FPS


21

Tôi không có kiến ​​thức gì về mã hóa video, tôi có một ứng dụng được viết bằng OpenGL và tôi đang lưu các khung mà nó tạo ra thành pnghình ảnh. Các khung hình từ ứng dụng của tôi ở mức 7 FPS và tôi đang cố gắng tạo một video từ những khung hình đó.

Với mục đích đó tôi sử dụng ffmpeg như thế này

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

được lấy từ trang này , tuy nhiên tôi đã tự hỏi liệu có thể có một video cho thấy hoạt hình ở 30 FPS không?



Chỉ cần điều chỉnh -frameratetham số để có được kết quả mong muốn.
nullptr

Câu trả lời:


21

Tôi đang sử dụng đoạn mã dưới đây để làm điều tương tự.

ffmpeg -framerate 30 -i img%03d.png -c:v libx264 -pix_fmt yuv420p -crf 23 output.mp4

Phá vỡ lệnh:

ffmpeg             <- call ffmpeg
  -framerate 30    <- set the input framerate to 30
  -i img%03d.png   <- read PNG images with filename img001, img002, img003, etc..
                     img can be changed to another prefix
                     %03d can be changed to %04d for 0001, %05d for 00001 formats, etc...
  -c:v libx264     <- Set the codec to libx264
  -pix_fmt yuv420p <- Set the pixel format to planar YUV 4:2:0, 12bpp
  -crf 23          <- set the Constant Rate Factor to 23 (default value)
  -output.mp4      <- the output filename

Điều này đọc đầu vào ở 30 khung hình / giây ( -framerate 30tùy chọn) và mã hóa nó bằng cách sử dụng libx264codec với hệ số tốc độ không đổi là 23 ( -crf 23tùy chọn).


26

Có hai tốc độ khung hình để xem xét: đầu vào và đầu ra.

Theo mặc định, tốc độ khung hình đầu vào là 25 và đầu ra sẽ sử dụng cùng tốc độ khung hình như đầu vào trừ khi bạn nói khác đi.

Tốc độ khung hình giống nhau cho đầu vào và đầu ra

Nếu bạn muốn đầu vào đầu ra có cùng tốc độ khung hình, thì chỉ cần cung cấp tốc độ khung hình đầu vào. Ví dụ này sẽ đặt tốc độ khung hình 30000/1001 (video NTSC):

ffmpeg -framerate 30000/1001 -i input output.mp4
  • Ngoài ra, trong ví dụ này, bạn có thể sử dụng ntscthay vì 30000/1001, nhưng không sử dụng 29.97vì điều đó không chính xác hoặc chính xác. Xem các bí danh tốc độ khung hình khác .

  • Bởi vì tốc độ khung hình đầu vào mặc định là 25 và nếu bạn chỉ đặt tốc độ khung hình đầu ra, thì các khung hình sẽ bị loại bỏ hoặc nhân đôi để bù lại. Đó là lý do tại sao tốc độ khung hình đầu vào được đặt trong tình huống này.

Tốc độ khung hình khác nhau cho đầu vào và đầu ra

Đôi khi bạn có thể muốn tốc độ khung hình đầu vào và tốc độ khung hình đầu ra khác nhau. Ví dụ: bạn có thể muốn nhập các khung ở một tốc độ nhất định, sau đó sao chép hoặc thả các khung để đầu ra có tốc độ khung khác nhau. Bạn có thể muốn làm điều này do vấn đề tương thích với bộ chứa định dạng đầu ra, trình phát và / hoặc thiết bị của bạn:

ffmpeg -framerate 10 -i input -r 25 output.mp4
  • Trong ví dụ này, các khung sẽ được nhân đôi để đi từ 10 đến 25. Đầu ra của bàn điều khiển sẽ cho bạn biết nếu các khung bị bỏ hoặc trùng lặp.

  • Trình giải mã tệp hình ảnh sử dụng -framerate, trong khi tốc độ khung hình đầu ra được đặt bằng cách sử dụng -r.

  • Bạn có thể phải thêm -pix_fmt yuv420ptùy chọn trong một số trường hợp nếu bạn xuất video H.264 ( ffmpegđầu ra của bàn điều khiển sẽ cảnh báo bạn nếu bạn cần). Điều này sẽ sử dụng sơ đồ mẫu phụ sắc độ tương thích với tất cả người chơi.


2
phiên bản ffmpeg 3.2.2 cho tôi biết Option framerate not found.:-(
erik

Vâng, bạn đúng. Nhưng tuy nhiên tùy chọn -frameratekhông tồn tại nữa. Tôi sẽ xóa bình luận của mình, vì nó thực sự không liên quan gì đến việc chuyển đổi một loạt hình ảnh thành video với tốc độ khung hình nhất định.
erik

4
@erik -frameratekhông tồn tại. Nó được sử dụng bởi các trình giải mã hình ảnh và rawvideo và một số thiết bị đầu vào như x11grab và v4l2.
llogan

1
-framerateTài liệu ở đâu là tài liệu? Tôi đã đọc man ffmpegtrang này, nhưng tôi không thể tìm thấy nó. Bất kỳ con trỏ, có lẽ?
Đã kết thúc vào

1
OK, tìm thấy nó ... FFMPEG-DEVICES(1).
Đã kết thúc

1
ffmpeg -framerate 30 -i img%03d.png output.mp4  

sẽ có đủ trong phiên bản mới nhất của ffmpeg.

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.