Làm cách nào để trích xuất dấu thời gian được liên kết với khung trích xuất ffmpeg từ video với tùy chọn -r?


12
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

Là lệnh tôi đang sử dụng để trích xuất khung và nó hoạt động như tôi mong đợi. Tuy nhiên tôi cũng muốn xem dấu thời gian của các khung. Tại bất cứ điều gì chính xác. 100 triệu giây là đủ tốt cho tôi. Ffmpeg có thể làm điều này?

Cung cấp thêm chi tiết,

Khi tôi chạy lệnh trên, tôi nhận được khoảng 100 JPEG, tôi đoán có sự tương ứng 1 đến 1 (hoặc nhiều đến 1) giữa các JPEG và khung hình của video. Tôi muốn biết dấu thời gian của khung hình được xuất ra dưới dạng hình ảnh JPEG 'i'.

Ngoài ra, tôi đã thử ffprobe nhưng tôi thấy nó báo cáo thời lượng video không chính xác :(


Như những gì? AFAIK jpeg không có siêu dữ liệu như vậy. Dấu thời gian EXIF ​​là dành cho capturethời gian.
Rajib

Chắc chắn JPEG không có siêu dữ liệu, nhưng mp4 có thể. Tôi có thể chỉ đạo ffmpeg để kéo nó cùng với các khung mà sau này mã hóa thành JPEGS và bỏ dấu thời gian trong một tệp không?
Srini

Vui lòng bao gồm ffmpegđầu ra giao diện điều khiển hoàn chỉnh từ lệnh của bạn.
llogan

ffprobe có thể cung cấp cho bạn thông tin dấu thời gian từ luồng video mp4. Bạn đang hỏi như thể các khung hình có thể bị trùng lặp hoặc bỏ đi thì sự tương ứng với các dấu thời gian mp4 ban đầu là gì? Trong trường hợp đó, tôi sẽ khám phá việc tăng cài đặt mức độ chi tiết để xem liệu bạn có thể lấy khung theo khung trong khi thực hiện hay không. Bạn có thể mở rộng ý của bạn bằng "dấu thời gian liên quan đến khung".
dstob

@dstob Dấu thời gian được liên kết với khung là dấu thời gian trình bày của video đầu vào, tức là khi mỗi khung hình sẽ được hiển thị, liên quan đến bắt đầu của video.
slhck

Câu trả lời:


13

Những gì bạn có thể làm là "mô phỏng" quá trình viết ảnh bằng cách lọc với fpsbộ lọc, sau đó sử dụng ffprobeđể hiển thị dấu thời gian của các khung được tạo. Điều này có nghĩa là ở 25 khung hình / giây, khung hình thứ 50 (như hình ảnh thứ 50 của bạn) sẽ có PTS là 2,00 giây.

Bạn làm như thế này:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

Sẽ xuất:

0
0.04
0.08
0.12
0.16
...

Đây là các dấu thời gian cho mỗi hình ảnh đầu ra. Bạn thực sự có thể kết hợp danh sách các khung và dấu thời gian:

hình ảnh ls -1 - *. jpeg> hình ảnh
ffprobe -f lavfi -i "movie = input.mp4, fps = fps = 25 [out0]" -show_frames -show_entries frame = pkt_pts_time -of csv = p = 0> frames.txt
dán photos.txt frames.txt> merg.txt

Sẽ tạo một tệp với:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

Lưu ý rằng điều này có thể dẫn đến các dòng không liên quan nếu có quá nhiều khung hoặc quá nhiều dòng thông tin đầu ra. Có vẻ như một chút không chính xác ở đó.


Đây có phải là dấu thời gian liên quan đến tốc độ khung hình không đổi được đặt trên đầu ra hoặc sự tương ứng của các jpeg được xuất ra với dấu thời gian mp4 ban đầu có thể là bất kỳ tốc độ khung hình nào và có bất kỳ giá trị dấu thời gian nào không?
dstob

Dấu thời gian này dựa trên tốc độ khung hình đầu ra được yêu cầu. Nó liên quan đến cả hình ảnh đầu ra cũng như khung hình video đầu vào ban đầu mà những hình ảnh đó đến từ hệ thống chỉ có một cơ sở thời gian. Điều này hoạt động vì khi thay đổi tốc độ khung hình, ffmpeg sẽ (tất nhiên) sẽ không phát video nhanh hơn, nhưng "kéo dài" thời gian trình bày của từng khung hình và bỏ các khung không cần thiết.
slhck

Tại sao chỉ có một cơ sở thời gian khi bạn đang tự tạo cơ sở thời gian đầu ra? Điều này sẽ không phải luôn luôn như vậy, nhưng trên video 60 khung hình / giây đầu tiên tôi đã ném vào nó, ffmpeg chỉ tạo cơ sở thời gian của riêng mình mà bỏ qua các dấu thời gian của đầu vào.
dstob

Không chắc chắn tôi hiểu chính xác những gì bạn đang nhận được. ffmpeg chọn làm cơ sở thời gian đầu vào bất cứ điều gì nó phân tích cú pháp như cơ sở thời gian của tệp đầu vào . Tất nhiên bạn cũng có thể yêu cầu ffmpeg loại bỏ các dấu thời gian đầu vào -vsync drop, nhưng điều đó xảy ra sau khi lọc, IIRC.
slhck
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.