Tôi biết đây là một câu hỏi cũ nhưng không có câu trả lời hiện tại nào là cách được đề xuất nữa.
Không mất dữ liệu (video)
Như đã lưu ý trong các bình luận, có một cách để làm điều này mà video không phải
được mã hóa lại. Nó yêu cầu làm lại tập tin theo định dạng MKV khác và sau đó chuyển lại tập tin thành MP4. Dưới đây là một ví dụ thay đổi video thành 12 khung hình / giây:
mkvmerge --default-duration 0:12fps --fix-bitstream-timing-information 0 original-video.mp4 -o temp-video.mkv
ffmpeg -i temp-video.mkv -c:v copy slow-video.mp4
Nếu video chứa âm thanh, bạn cũng có thể làm chậm nó mà không thay đổi cao độ, nhưng đó không phải là một chuyển đổi không mất mát. Ví dụ dưới đây giả sử video nguồn là 24 khung hình / giây để âm thanh cần được giảm tốc độ xuống một nửa (0,5) bằng bộ lọc atempo của ffmpeg .
mkvmerge --default-duration 0:12fps --fix-bitstream-timing-information 0 original-video.mp4 -o temp-video.mkv
ffmpeg -i temp-video.mkv -c:v copy -c:a aac -filter:a "atempo=0.5" slow-video-with-audio.mp4
Hướng dẫn Wiki FFMPEG
Đây là hướng dẫn từ wiki ffmpeg . Lưu ý rằng tất cả các tùy chọn này đều yêu cầu mã hóa lại video.
Tăng tốc / làm chậm video
Bạn có thể thay đổi tốc độ của luồng video bằng bộ lọc video setpts. Lưu ý rằng trong các ví dụ sau, luồng âm thanh không bị thay đổi, vì vậy lý tưởng nhất là nên tắt với -an.
Để tăng gấp đôi tốc độ của video, bạn có thể sử dụng:
ffmpeg -i input.mkv -filter:v "setpts=0.5*PTS" output.mkv
Bộ lọc hoạt động bằng cách thay đổi dấu thời gian trình bày (PTS) của từng khung hình video. Ví dụ: nếu có hai khung thành công được hiển thị ở dấu thời gian 1 và 2 và bạn muốn tăng tốc video, thì các dấu thời gian đó cần phải trở thành 0,5 và 1, tương ứng. Do đó, chúng ta phải nhân chúng với 0,5.
Lưu ý rằng phương pháp này sẽ thả khung hình để đạt được tốc độ mong muốn. Bạn có thể tránh các khung hình bị rớt bằng cách chỉ định tốc độ khung hình đầu ra cao hơn đầu vào. Ví dụ: để chuyển từ đầu vào 4 FPS sang tốc độ tăng gấp 4 lần (16 FPS):
ffmpeg -i input.mkv -r 16 -filter:v "setpts=0.25*PTS" output.mkv
Để làm chậm video của bạn, bạn phải sử dụng hệ số nhân lớn hơn 1:
ffmpeg -i input.mkv -filter:v "setpts=2.0*PTS" output.mkv
Trơn tru
Bạn có thể làm mịn video chậm / nhanh với bộ lọc video minterpolate. Điều này còn được gọi là "nội suy chuyển động" hoặc "dòng quang".
ffmpeg -i input.mkv -filter "minterpolate='mi_mode=mci:mc_mode=aobmc:vsbmc=1:fps=120'" output.mkv
Các tùy chọn khác bao gồm SlowmoVideo và Butterflow. Tăng tốc / làm chậm âm thanh
Bạn có thể tăng tốc hoặc làm chậm âm thanh với bộ lọc âm thanh atempo. Để tăng gấp đôi tốc độ của âm thanh:
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
Bộ lọc atempo bị giới hạn trong việc sử dụng các giá trị trong khoảng 0,5 đến 2,0 (vì vậy nó có thể làm chậm nó xuống không dưới một nửa tốc độ ban đầu và tăng tốc độ không quá gấp đôi đầu vào). Nếu bạn cần, bạn có thể khắc phục giới hạn này bằng cách xâu chuỗi nhiều bộ lọc atempo lại với nhau. Sau đây với tốc độ âm thanh tăng gấp bốn lần:
ffmpeg -i input.mkv -filter:a "atempo=2.0,atempo=2.0" -vn output.mkv
Sử dụng một bộ lọc phức tạp, bạn có thể tăng tốc video và âm thanh cùng một lúc:
ffmpeg -i input.mkv -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mkv