cắt với kết quả ffmpeg trong vài giây màn hình đen, làm cách nào để khắc phục điều này?


8

Tôi đang sử dụng lệnh này để cắt một đoạn từ video từ dòng lệnh

ffmpeg -i %1 -vcodec copy -acodec copy -ss %2 -t %3 %~n1_cut%~x1

và tôi gọi nó như thế

cut.bat video.mp4 001:23:45:678 10

và như mong đợi, tôi nhận được một video_cut.mp4 với 10 giây của video gốc, vấn đề là vài giây của tệp kết quả là màn hình đen với âm thanh, tại sao điều này xảy ra và làm cách nào để khắc phục nó?


% ~ n1_cut% ~ x1 phần này của lệnh có nghĩa là gì?
ScipioAfricanus

@ScipioAfricanus %~n1mở rộng% 1 thành Tên tệp hoặc nếu chỉ có một đường dẫn (không có dấu gạch chéo ngược) - thư mục cuối cùng trong đường dẫn đó và chỉ %~x1mở rộng% 1 thành tệp eXtension - nguồn .txt: superuser.com/questions/ 224416 / Lọ
Shaya

Câu trả lời:


8

Hầu hết các video sử dụng codec thực hiện nén theo thời gian, do đó, một điểm cắt được chỉ định có thể dựa vào các khung trước (và sau) điểm cắt đó để được giải mã chính xác. Vì vậy, khi bạn sử dụng ffmpeg để cắt video và sử dụng copychế độ, ffmpeg phải bao gồm tất cả các khung trước và sau phân đoạn được cắt cần thiết để giải mã chính xác phân đoạn.

Vì vậy, bạn có hai tùy chọn, sử dụng chế độ sao chép nhưng đặt một công tắc cho phép tất cả người chơi phát chính xác các tệp này

ffmpeg -ss %2 -t %3 -i %1 -vcodec copy -acodec copy -avoid_negative_ts make_zero %~n1_cut%~x1

(điều này có thể sẽ dẫn đến đầu ra bắt đầu trước điểm cắt của bạn)

hoặc mã hóa lại các luồng

ffmpeg -ss %2 -t %3 -i %1 %~n1_cut%~x1

Mặc dù mã hóa lại chậm hơn, nhưng nó sẽ tạo ra kết quả tốt hơn, bởi vì với giải pháp khác, video có thể dài hơn những gì được chỉ định trong -ttùy chọn.
totymedli

@Gyan %làm gì? Tôi đã thử tìm kiếm ffmpeg.org/ffmpeg.html nhưng tôi không thể tìm thấy cách sử dụng.
Shaya

Như câu trả lời của bạn đề nghị tôi đã sử dụng cả trước -ss-ttrước -ivà nó đã hoạt động, trước đó, tôi chỉ đặt -sstrước -i-tsau nó để nó không hoạt động.
Shaya

1

https://github.com/mifi/lossless-cut/pull/13

Khi tôi chạy ffmpeg với các đối số theo thứ tự này -i ... -ss ... -t ..., nó tạo ra một tệp video không có video trong vài giây ban đầu. (theo như tôi có thể hiểu điều này là do nó không tìm đến keyframe?)

Nếu tôi thay đổi thứ tự thành -ss ... -i ... -t ..., thì các video cắt kết quả sẽ phát đúng.

Của tôi ffmpeg -version


Tôi đã thử -sstrước đây -inhưng nó không hoạt động trên tập tin mp4 của tôi.
Shaya

Làm việc cho tôi, cảm ơn. Chỉ thay đổi thứ tự của các tham số. phiên bản ffmpeg 3.2.12-1 ~ deb9u1
shukshin.ivan

Trên thực tế, điều này chỉ di chuyển thời lượng trống đến cuối video
Honghao Zhang
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.