Tôi có một số cảnh quay 4K 3840x2160 ở định dạng MP4 mà tôi cần để giảm xuống 1080p. Tôi đã thử chạy
ffmpeg -i orig.mp4 -vf scale=1920:1080 smaller.mp4
nhưng kết quả là chất lượng rất kém, với toàn bộ hình ảnh được tạo thành từ các "ô vuông" như thể tôi đang phóng to 4: 1.
Đây là đầu ra của việc chạy lệnh này:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origs/P1000003.MP4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
Duration: 00:05:14.48, start: 0.000000, bitrate: 95903 kb/s
Stream #0.0(und): Video: h264 (High), yuvj420p, 3840x2160 [PAR 1:1 DAR 16:9], 95792 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 125 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x22a3420] w:3840 h:2160 pixfmt:yuvj420p
[scale @ 0x22a3ce0] w:3840 h:2160 fmt:yuvj420p -> w:1920 h:1080 fmt:yuv420p flags:0x4
Output #0, mp4, to '1-short.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp42avc1
creation_time : 2015-02-19 17:10:38
encoder : Lavf53.21.1
Stream #0.0(und): Video: mpeg4, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Metadata:
creation_time : 2015-02-19 17:10:38
Stream #0.1(und): Audio: libvo_aacenc, 48000 Hz, stereo, s16, 200 kb/s
Metadata:
creation_time : 2015-02-19 17:10:38
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame= 125 fps= 6 q=31.0 Lsize= 968kB time=5.00 bitrate=1586.7kbits/s
video:842kB audio:123kB global headers:0kB muxing overhead 0.421047%
Tôi biết từ kinh nghiệm rằng ffmpeg là một công cụ tuyệt vời, vì vậy tôi phải làm rối tung các tùy chọn / tham số bằng cách nào đó ...
Tôi có thể làm cái này như thế nào?
-c:a copy
, vì bạn không muốn hoặc không cần mã hóa lại luồng âm thanh. Sử dụng -map 0
để sao chép bất kỳ siêu dữ liệu chương hoặc nội dung khác. (ffmpeg chỉ mất 1 vid + 1 aud theo mặc định.)
-sws_flags lanczos+print_info
sẽ sử dụng một thuật toán tỷ lệ tốt hơn so với mặc định (song song tôi nghĩ). Câu trả lời của stlb bao gồm phần mã hóa video của quy trình.
scale=1920:-2:flags=lanczos
. Tôi cũng sẽ đề cập đến -2
thang đo trong câu trả lời không tồn tại của tôi. Đối với những người không biết bạn có thể đặt -2
chiều rộng hoặc chiều cao và nó sẽ tự động cung cấp giá trị chính xác trong khi duy trì tỷ lệ khung hình và làm cho giá trị chia hết cho 2 (yêu cầu bởi libx264 cho đầu ra yuv420p).
-t 10
để tạo đầu ra 10 giây. Tại sao bạn muốn giảm giá? Trường hợp sử dụng cho đầu ra tỷ lệ của bạn là gì? Thông tin này sẽ giúp tôi cung cấp một câu trả lời chính xác hơn.