Tôi đang tự hỏi làm thế nào để sử dụng FFMpeg để grap khung giữa của video. Tôi đã viết C# để lấy một khung tại một thời điểm nhất định (tức là kéo một khung ở giây thứ 3). Nhưng tôi vẫn chưa tìm ra cách tìm đoạn video giữa bằng cách sử dụng lệnh FFMpeg.Sử dụng FFMpeg để tải khung hình ở giữa?
Trả lời
Điều này có thể được đơn giản hóa, nhưng đây là một số mã PHP cũ mà tôi đã nói dối mà nên làm các thủ thuật. (Thêm vị trí để ffmpeg nếu nó không có trong đường dẫn của bạn)
$output = shell_exec("ffmpeg -i {$path}");
preg_match('/Duration: ([0-9]{2}):([0-9]{2}):([^ ,])+/', $output, $matches);
$time = str_replace("Duration: ", "", $matches[0]);
$time_breakdown = explode(":", $time);
$total_seconds = round(($time_breakdown[0]*60*60) + ($time_breakdown[1]*60) + $time_breakdown[2]);
shell_exec("ffmpeg -y -i {$path} -f mjpeg -vframes 1 -ss " . ($total_seconds/2) . " -s {$w}x{$h} {$output_filename}");
FFmpeg giúp bạn nhận được tốc độ khung hình và độ dài của video, vì vậy bạn có thể nhân với nhau và chia cho 2 để lấy số khung ở giữa.
tức là đối với video 30 giây chạy ở 15 khung hình/giây: 30 * 15 = 450/2 = 225, có nghĩa là bạn cần lấy khung thứ 225.
bash này hoạt động lệnh như một nét duyên dáng (thử nghiệm):
avconv -i 'in.mpg' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 420x300 -ss avconv -i in.mpg 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F ':' '{print ($3+$2*60+$1*3600)/2}' out.jpg
Ví dụ
Giả sử bạn đang sử dụng Linux bạn có thể sử dụng ffprobe
để có thời lượng, bc
để tính một nửa điểm, sau đó là ffmpeg
để tạo khung:
eval "$(ffprobe -v error -of flat=s=_ -show_entries format=duration input.mp4)"
ffmpeg -ss "$(echo "$format_duration/2" | bc)" -i input.mp4 -q:v 2 -frames:v 1 half.jpg
này giúp loại bỏ bất kỳ nhu cầu sử dụng awk
, tr
, grep
, sed
vv
Ngoài ra, bạn có thể sử dụng select filter và loại bỏ bc
, nhưng chọn lọc có thể chậm.
Một lưu ý về thời gian
Thời gian từ ffprobe
có thể không chính xác nếu các tập tin bị hư hỏng hoặc cắt ngắn không đúng. Thời gian có thể được xác nhận bởi hoàn toàn giải mã đầu vào với ffmpeg
sau đó ghi nhận time=
trong dòng thứ hai-to-cuối cùng trong giao diện điều khiển đầu ra:
ffmpeg -i input -f null -
…
frame= 2600 fps=569 q=-0.0 Lsize=N/A time=00:01:48.50 bitrate=N/A
video:244kB audio:20344kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Trên Windows/Cygwin tôi đã phải xử lý văn bản kludge xấu xí của đầu ra của eval/ffprobe để loại bỏ một cửa sổ dòng mới từ cuối $ format_duration: 'eval '$ (ffprobe -v error -of flat = s = _ -show_entries format = thời gian tmp.mp4) "' 'echo $ format_duration> tmp.txt' ' vang/2 >> tmp.txt' 'dos2unix tmp.txt' format_duration = '' tr -d '\ n'
Có một bộ backticks xung quanh việc gán biến sau khi format_duration trong phần cuối của bình luận của tôi (được loại bỏ ở đây bằng cách phân tích cú pháp markdown). –
- 1. cách sử dụng ffmpeg
- 2. Tổng số khung hình có ffmpeg
- 3. Drawtext, drawbox hoặc lớp phủ trên chỉ là một khung hình duy nhất sử dụng FFmpeg
- 4. Điều chỉnh tốc độ khung hình MPG4 trong ffMpeg
- 5. Đặt khung B trong video có ffmpeg
- 6. Cách nhanh nhất để trích xuất khung bằng ffmpeg?
- 7. ffmpeg chia avi thành các khung có tỷ lệ khung hình đã biết
- 8. Làm thế nào để chuyển đổi một khung hình FFMPEG AVFrame trong YUVJ420P thành AVFoundation cVPixelBufferRef?
- 9. sử dụng GIỮA ở WHERE condition
- 10. Hiểu và sử dụng cài đặt ffmpeg
- 11. webm để chuyển đổi mp4 sử dụng ffmpeg
- 12. trở ở giữa một khối sử dụng
- 13. Làm thế nào để sử dụng FFMPEG với java?
- 14. Đặt UIView ở giữa màn hình
- 15. Hình ảnh ở giữa bị mờ
- 16. Làm cách nào để làm cho khung hình trên cùng của tôi hiển thị ở giữa màn hình của tôi?
- 17. Sử dụng FFMPEG để ghép hai tệp MTS với nhau
- 18. làm thế nào để sử dụng ffmpeg/libavcodec/libstagefright
- 19. Hiển thị hình ảnh ở giữa trang
- 20. lỗi khi giải mã khung H.264 bằng cách sử dụng ffmpeg
- 21. sử dụng trình bao bọc java-ffmpeg hoặc chỉ cần sử dụng thời gian chạy java để thực thi ffmpeg?
- 22. Sử dụng FFMPEG và url_fopen ví dụ
- 23. Chụp ảnh bằng Android bằng cách sử dụng FFmpeg
- 24. Android Canvas.drawCircle ở chính giữa màn hình
- 25. Sử dụng ffmpeg với Python 2.7
- 26. Có thể sử dụng FFMPEG để tạo video F4V không?
- 27. Sử dụng ffmpeg để thêm văn bản phụ đề
- 28. FFMPEG 2 Video được chuyển mã và cạnh nhau trong 1 khung hình?
- 29. Values Set Webkit Khung hình Sử dụng Javascript Biến
- 30. Căn giữa hình nền, sử dụng CSS
Cảm ơn, Đó chỉ là những gì tôi đang tìm kiếm! –
@Derek Gathright Vui lòng cho tôi chi tiết cơ bản để bắt đầu làm việc với ffmpeg. Vui lòng xem [câu hỏi] của tôi (http://stackoverflow.com/questions/10071408/how-to-get-frames-of-video-file-in-android). –