Tôi đang cố gắng chụp một bộ ảnh được chụp trong khoảng thời gian 1 giây để tạo thành video timelapse. Tôi hình dung điều này sẽ dễ dàng với ffmpeg, nhưng tôi đang gặp phải các lỗi khó hiểu.
Tất cả các hình ảnh là yuv420 jpeg, được lấy từ máy ảnh Android. Chúng được lưu dưới dạng các tệp jpeg riêng lẻ trong một thư mục, chúng đều có kích thước và định dạng giống hệt nhau. Chúng được đặt tên là một chuỗi các tên gồm 7 chữ số, bắt đầu từ 0 (vì vậy "0000000.jpg" đến "0001000.jpg", là một ví dụ).
Đây là chuỗi của tôi (tên thư mục được điều chỉnh lại cho rõ ràng):
avconv -r 1 -f image2 -i %07d.jpg -vcodec libx264 -crf 18 -preset slower video.mp4
Có vẻ tuyệt vời, tôi thấy rất nhiều bài viết từ những người nói rằng làm việc cho họ.
Tuy nhiên ffmpeg cho tôi điều này (in đậm chỉ ra lỗi)
phiên bản ffmpeg 0.8.5-6: 0.8.5-1, Bản quyền (c) 2000-2012 các nhà phát triển Libav được xây dựng vào ngày 13 tháng 1 năm 2013 12:05:48 với gcc 4.7.2 *** CHƯƠNG TRÌNH NÀY ĐƯỢC ĐĂNG KÝ *** Chương trình này chỉ được cung cấp để tương thích và sẽ được gỡ bỏ trong phiên bản tương lai. Vui lòng sử dụng avconv thay thế. [mjpeg @ 0x233aea0] đọc quá 8 Đầu vào # 0, image2, từ '% 07d.jpg': Thời lượng: 00: 00: 00.04, bắt đầu: 0,000000, bitrate: Không áp dụng Luồng # 0,0: Video: mjpeg, yuvj420p, 640x480 [PAR 1: 1 DAR 4: 3], 25 tbr, 25 tbn, 25 tbc Tệp 'video.mp4' đã tồn tại. Ghi đè? [y / N] y [bộ đệm @ 0x233b340] w: 640 h: 480 pixfmt: yuvj420p [libx264 @ 0x2339fa0] bằng SAR = 1/1 [libx264 @ 0x2339fa0] bằng cách sử dụng các khả năng của cpu: MMX2 SSE2Fast FastShuffle SSEMalign LZCNT [libx264 @ 0x2339fa0] hồ sơ Chính, cấp 3.1 [libx264 @ 0x2339fa0] 264 - lõi 123 r2189 35cf912 - H.264 / MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - tùy chọn: cabac = 1 ref = 8 deblock = 1: 0: 0 analyse = 0x1: 0x131 me = umh subme = 9 psy = 1 psy_rd = 1,00: 0,00 hỗn hợpf = 0 me_range = 16 chroma_me = 1 trellis = 2 8x8dct = 0 cqm = 0 deadzone = 21,11 1 chroma_qp_offset = -2 chủ đề = 1 lát cắt_threads = 0 nr = 0 decimate = 1 xen kẽ = 0 Bluray_compat = 0 ràng buộc_intra = 0 bframes = 3 b_pyramid = 0 b_adapt = 2 b_bias = 0 b = keyint = 250 keyint_min = 25 perspectiveecut = 40 int numfresh = 0 rc_lookahead = 60 rc = crf mbtree = 1 crf = 18.0 qcomp = 0.60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1.25 aq = 1: 1.00 Đầu ra # 0, mp4, thành 'video.mp4': Metadata: bộ mã hóa: Lavf53.21.1 Luồng # 0,0: Video: libx264, yuvj420p, 640x480 [PAR 1: 1 DAR 4: 3], q = -1--1, 25 tbn, 25 tbc Ánh xạ dòng: Luồng # 0,0 -> # 0,0 Nhấn ctrl-c để dừng mã hóa [mjpeg @ 0x233aea0] đọc quá 8 khung = 0 khung hình / giây = 0 q = 0,0 Lsize = 0kB thời gian = 10000000000.00 bitrate = 0,0kbits / s video: 0kB âm thanh: 0kB tiêu đề toàn cầu: 0kB muxing trên cao 610.000000%
Các dòng nhập (hiển thị màu đỏ) là những dòng có nội dung " [mjpeg @ 0x233aea0] đã đọc quá 8 ".
Điều này khiến tôi nghĩ rằng có lẽ nó đang cố đọc các hình ảnh dưới dạng jpeg chuyển động thay vì các tệp jpeg đơn giản và bằng cách nào đó đã thất bại. Tôi đã thử với / không "-f image2", với kết quả tương tự. Và tôi cũng đã thử sử dụng avconv, với kết quả tương tự.
Tôi nên lưu ý rằng các hình ảnh là hợp lệ và nếu tôi chuyển đổi tất cả chúng thành * .png (một quá trình tốn kém và mất thời gian) thì toàn bộ hoạt động. Nhưng tôi muốn chỉ có thể sử dụng jpeg mà không cần chuyển đổi trung gian. Rốt cuộc, đó là những gì ffmpeg dành cho, chuyển mã.
Có ai có cách tốt để chuyển đổi * .jpg sang video bằng ffmpeg không?
convert <input> <output>
không?
ffmpeg
từ Libav (một ngã ba FFmpeg) được cung cấp cùng với Ubuntu. Thay vào đó, vui lòng sử dụng bản dựng tĩnh gần đây từ trang tải xuống của họ hoặc tự biên dịch nó , sau đó thử lại. Rất có thể là một lỗi đã được sửa chữa từ lâu. Lưu ý rằng MJPEG là tốt như bộ giải mã.