Có cách nào để tạm dừng và tiếp tục mã hóa FFmpeg không?


13

Tôi ghi lại một vài giờ quay video mỗi ngày, mà tôi đặt trong hàng đợi để mã hóa ffmpeg. Tôi sử dụng veryslowcài đặt sẵn với x265, vì vậy một giờ video có thể mất tới 20 giờ hoặc hơn để mã hóa.

Vì máy tính của tôi hoạt động cả ngày lẫn đêm, tôi tự hỏi liệu ffmpegcó cách nào để tạm dừng và tiếp tục mã hóa không? Tôi đang sử dụng Terminalcho OS X.

Nếu vậy, tôi cũng có thể tiếp tục mã hóa ngay cả sau khi tắt Terminal và khởi động lại máy tính không? Tôi nghĩ rằng phiên Terminal được khôi phục khi bạn đăng nhập lại trong OS X, ít nhất là lịch sử Terminal.

Câu trả lời:


14

Đình chỉ

Một phương pháp đơn giản là tạm ngưng nó với ctrl+ z. Hoặc bạn có thể nhận được PID pgrep ffmpegsau đó sử dụng kill -s SIGSTOP <PID>để tạm dừng.

Sau đó tiếp tục với fglệnh hoặc kill -s SIGCONT <PID>.

Thật không may, điều này sẽ không tồn tại một khởi động lại.

Máy ảo

Nếu bạn sử dụng máy ảo, với một cái gì đó như VirtualBox, bạn có thể thực hiện mã hóa của mình trong một máy khách VM. Nó sẽ cho phép bạn "lưu trạng thái máy" bất cứ lúc nào có thể sống sót khi khởi động lại. Nó cũng có thể cho phép bạn chỉ định tài nguyên CPU tối đa cho khách để máy chủ của bạn sẽ luôn có sẵn tài nguyên.

Có thể quá mức cần thiết, nhưng nếu bạn đã quen với máy ảo hoặc đã sử dụng máy ảo thì đó là một giải pháp khả thi.


Tuy nhiên, tôi thích giải pháp VM đó trừ khi bạn đang sử dụng một giải pháp khá rắc rối.
user24601

Cách VirtualBox không hiệu quả với tôi. Đã thử chỉ để lưu trạng thái ở giữa mã hóa và cố gắng tạm dừng bằng [Ctrl] + [z] và sau đó lưu trạng thái. Sau khi khôi phục lại nhà nước và cố gắng để tiếp tục, ffmpegdừng lại với một lỗi ( decode_band_types: Input buffer exhausted before END element foundhoặc Invalid NAL unit sizeError writing trailer/ Protocol error). Có lẽ nó liên quan đến bước nhảy trong thời gian, tôi không biết.
Jāni Elmeris

@ JānisElmeris Tôi dường như không thể lặp lại vấn đề đó. Tôi đã thử nó trên Ubuntu 18.04 VM và nó đã hoạt động.
llogan

OK, tôi có lẽ không đủ may mắn. :) Đã thử với Linux Mint 19.1 mới (dựa trên Ubuntu 18.04) VirtualBox VM.
Jāni Elmeris

ffmpeg của tôi có nhiều threds và càng nhiều PID. Tôi có phải SIGSTOP và SIGCONT mỗi người trong số họ không? Có một hạn chế kịp thời?
wuppi

10

Nó dường như không thể kể từ ngày 30 tháng 9 năm 2015 . Tôi sẽ đề nghị phân đoạn tệp nguồn, mã hóa các phân đoạn và sau đó ghép các tệp kết quả.

Đây không phải là một cơ sở tạm dừng / tiếp tục thực sự nhưng bộ phận từng phần sẽ cho phép bạn nghỉ mã hóa.

Tổng quan sơ bộ về các lệnh cần phát hành:

Chia fullfile thành nhiều phần

ffmpeg -i recording.mp4 -c copy -flags +global_header -segment_time n -f segment file%03d.mp4

Điều này sẽ tạo file000.mp4, file001.mp4, v.v. Do cách trình phân đoạn hoạt động - nó chỉ cắt ở các khung hình I - các tệp này sẽ không ndài chính xác vài giây và phần video có thể không phát đúng, nhưng tất cả dữ liệu đều ở đó và bạn có thể chuyển đổi từng phần

ffmpeg -i file001.mp4 -{filter/encoding parameters} -fflags +genpts file001-new.mp4

Tham gia lại các phần được mã hóa

Tạo một tệp văn bản và đặt tên của mỗi tệp được hiển thị như thế này

file 'file000-new.mp4'
file 'file001-new.mp4'
.... 
file 'filelast-new.mp4'

Và chạy

ffmpeg -f concat -i textfile -c copy -fflags +genpts recording-encoded.mp4

Chỉ có bộ nhớ 6GB và thời gian ước tính là 12h để mã hóa từ x264 đến x265 và không bị hỏng (máy tính để bàn), tôi không thể sử dụng thủ thuật VM, nhưng điều này nghe thật tuyệt! Tôi chỉ mong đợi bước tham gia là nhanh, nhưng vì sẽ không có mã hóa trên đó, tôi nghĩ rằng nó sẽ được. Phải thử đi, thx vm!
Sức mạnh Bảo Bình

nó tạo ra một cảnh báo khi tham gia: "Codec cho luồng 0 không sử dụng tiêu đề toàn cầu nhưng định dạng vùng chứa yêu cầu tiêu đề toàn cầu" nhưng kết quả cuối cùng là một video có thể sử dụng được, tôi không thấy có vấn đề gì cả
Aquarius Power

10

Trên Windows, nhấn phím "Tạm dừng / Nghỉ" (phím trên cùng bên phải) sẽ tạm dừng nó. Nhập sẽ tiếp tục.

Nếu nó không hoạt động, bấm vào cửa sổ nhắc lệnh để tập trung vào nó.


Đây là câu trả lời dễ nhất và tốt nhất cho Windows (được xác minh trên Windows 10).
lidsinker

1
Điều này giải phóng hoàn toàn cpu nhưng ram vẫn bị nghẽn. Trong trường hợp của tôi, tôi có ram 8gb và nó vẫn sử dụng gần như tất cả trong khi hoạt động bị tạm dừng. Bất kỳ sửa chữa cho điều đó? Tôi có thể chuyển cái này sang hdd không? Tôi không bận tâm một chút về việc mọi thứ sẽ diễn ra khi tôi không có lý do.
thả diều

4

Tôi sugest thay vì tạm dừng, bạn dành cho quá trình mã hóa mức độ ưu tiên hệ thống tối thiểu (hay còn gọi là " renice "), để bạn có thể làm việc thoải mái hàng ngày và quá trình mã hóa sẽ diễn ra trong nền với các nguồn tài nguyên hệ thống không sử dụng. Vì vậy, mã hóa của bạn sẽ diễn ra liền mạch 24/7 mà không bị gián đoạn, không xung đột với công việc hàng ngày

vì AFAIK OSX thiếu lệnh pidof, bạn cần biết số tiến trình ffmpeg (PID)

sau đó bạn có thể renice quá trình này để nền nhàn rỗi với

sudo renice 20 yourPID

nếu cần, bạn cũng có thể đổi mới quy trình thành ưu tiên tiền cảnh hơn

sudo renice -10 yourPID

Chào! Gợi ý tốt. Sẽ phải thử nó.
Winterflags

4

Tạm dừng Thread cũng hoạt động trên Windows, không phải với ctrl+ Z, nhưng trong trình quản lý tài nguyên, bạn cũng có thể tiếp tục nó ở đó.


1

(Cái này cho Linux)

Như bạn có thể biết, nhấn 'q' sẽ kết thúc tệp ghi âm.

ffplay có khả năng 'p'. Tại sao ffmpeg không có điều tương tự? Có lẽ bởi vì nó có thể dẫn đến sự không đồng bộ giữa video và âm thanh? ...

Tôi chỉ mã hóa ffmpeg thành x264-aac-mkv với crf (23) và luôn có cùng điều kiện video, 'thoát' (q) các bản ghi và tham gia tất cả các phân đoạn trong một thư mục cụ thể, nơi tập lệnh này nằm trong 1 tệp trong chế độ streamcopy với bash-script này:

#!/bin/bash

# FFMPEG MERGE

# File path must be absolutely absolute...

ffmpeg -f concat -safe 0 -i <(printf "file '%s'\n" /home/me/Videos/FFmpeg/FFmpeg_Merge/*.mkv) -c copy merged.mkv

exit 

Sau đó tôi kiểm tra video được hợp nhất kết quả và dán nó vào một thư mục khác. Các phân đoạn được loại bỏ khỏi thư mục hợp nhất.

Nhưng, nút 'Tạm dừng & Tiếp tục' rắc rối thực sự sẽ được hoan nghênh;)


0

Đây chỉ là một ý tưởng, nhưng nếu bạn có một số ngân sách, bạn nên nâng cấp bộ xử lý (lên Intel thế hệ thứ 8) hoặc thậm chí tốt hơn, thẻ video (lên NVIDIA GTX 1050 trở lên) để bạn có thể mã hóa h.265 / HEVC với khả năng tăng tốc phần cứng thay vì sử dụng nhiều CPU x265. Mã hóa video của bạn sẽ được hoàn thành trong vòng chưa đầy 20 giờ, giúp bạn tiết kiệm chi phí điện.

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.