Làm cách nào để tôi dịch các tùy chọn HandbrakeCLI sang các tùy chọn FFmpeg?


10

Tôi có một loạt các cài đặt dòng lệnh hoạt động cho phanh tay, nhưng đôi khi trên một số video (tôi không biết tại sao) phanh tay lại ném "Ngoại lệ bộ nhớ". Tôi đã tự hỏi nếu tôi có thể tìm thấy các phím tùy chọn tương tự và làm điều đó với FFmpeg, nhưng có vẻ như điều đó không dễ thực hiện.

FFmpeg đôi khi không có các tùy chọn đó hoặc không có công cụ theo mặc định. Ví dụ: tôi không biết cách tạo biến dạng tùy chỉnh với FFmpeg. Đối với tôi, điều rất quan trọng là các video kết quả sẽ tốt như thể chúng được thực hiện với phanh tay. Đây là dòng dành cho Handbrake:

HandBrakeCLI.exe --input "d:\input.mpg" --output "d:\output.mp4" --rate 29.97 --cfr --arate 44.1 --format mp4 --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0 --encoder x264 --vb 5200 --aencoder faac --ab 128 --mixdown stereo -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200:level=42:bframes=2:min-keyint=60:keyint=60:ref=4:me=umh:merange=64:subme=7:8x8dct:cabac=1  -v3 -2 -a none

Làm thế nào để tôi biến điều này thành một lệnh FFmpeg?

Câu trả lời:


16

Phanh tay sử dụng bộ mã hóa x264 để chuyển đổi video. Có một trang web với tổng quan về tất cả các tùy chọn x264 và các đối tác FFmpeg của chúng . Tuy nhiên, đây là một số ít phản đối và một số tùy chọn này không hoạt động nữa hoặc có thể đã được đổi tên. Bạn nên sử dụng các cấu hình x264 cho hầu hết các tùy chọn chi tiết, nhưng chúng tôi sẽ đến đó.

Nhiều tùy chọn Handbrake cơ bản (ví dụ tốc độ khung hình) không dành riêng cho x264 và chúng nằm rải rác trong tài liệu trực tuyến FFmpeg .

Trước khi chúng tôi bắt đầu, vui lòng kiểm tra xem bạn có sử dụng phiên bản FFmpeg gần đây không. Trang web tải xuống của họ có bản dựng tĩnh cho tất cả các hệ điều hành chính.

Đi nào:

  • --input "d:\input.mpg" --output "d:\output.mp4"

    Cú pháp FFmpeg là ffmpeg -i input.mpg … d:\output.mp4.

  • --rate 29.97

    Chỉ định tốc độ khung hình video với -r 29.97. (Handbrake --cfrchỉ đặt tốc độ khung hình không đổi. Không cần ở đây).

  • --arate 44.1

    Đặt tốc độ mẫu âm thanh với -ar 44100(tính bằng Hz).

  • --format mp4

    Không cần thiết vì FFmpeg biết bạn muốn MP4.

  • --width 1920 --height 1080 --custom-anamorphic --display-width 1920 --keep-display-aspect --modulus 8 --crop 0:0:0:0

    Điều này không làm gì ngoài việc đặt kích thước thành 1920 × 1080. Trong FFmpeg, hãy thực hiện với -s:v 1920x1080hoặc nếu bạn muốn sử dụng các bộ lọc , -filter:v "scale=1920:1080".

  • --encoder x264 --vb 5200

    Đặt bộ mã hóa với -c:v libx264và tốc độ bit thành không đổi với -b:v 5200K. Lưu ý rằng chúng tôi chưa có khi nói đến cài đặt chất lượng.

  • --aencoder faac --ab 128 --mixdown stereo

    Tương tự như trên, với -c:a libfaac -b:a 128K -ac 2. Lưu ý rằng FAAC không được hỗ trợ trong FFmpeg nữa; thay vào đó, sử dụng bộ mã hóa FFmpeg tích hợp -c:a aac -b:a 128Kthay thế.

  • -x bitrate=5200:vbv-bufsize=5200:vbv-maxrate=5200

    Điều này đặt chế độ mã hóa thành VBV nhằm vào kịch bản phát trực tuyến thay vì chỉ tốc độ bit hoặc chất lượng không đổi. Chất lượng không đổi cũng được gọi là CRF , mặc định cho x264 - nó được gọi là Yếu tố tỷ lệ đường mật trong Handbrake. Mặc dù CRF thường cung cấp cho bạn mã hóa chất lượng tốt nhất, chế độ VBV cung cấp cho bạn một tệp phù hợp hơn để phát trực tuyến hoặc cho một số thiết bị có khả năng hạn chế.

    Để đặt VBV, hãy sử dụng -maxrate 5200K-bufsize 5200Kcác tùy chọn trong ffmpeg.

    Để đặt CRF, sử dụng -crf 23trong ffmpeg.

  • level=42

    Sử dụng -level 42. Đây là cấp độ H.264 .

  • bframes=2:min-keyint=60:keyint=60:ref=4

    Đặt số lượng khung B với -bf 2. Khoảng thời gian khung hình tối thiểu được đặt với -keyint_min 60và khoảng thời gian tối đa với -g 60. Số lượng hình ảnh tham khảo được thiết lập với -refs 4.

  • me=umh:merange=64:subme=7:8x8dct:cabac=1

    Đây là các tùy chọn mà bạn có thể đặt trong ffmpeg ngoài ra -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1- giống như bất kỳ cài đặt bộ mã hóa x264 nào khác không được ánh xạ trực tiếp vào các tùy chọn ffmpeg.

    Đây là phiên bản "TL; DR" nếu bạn lười biếng, không quan tâm đến các chi tiết hoặc nếu mọi thứ không hoạt động: Sử dụng -preset:v medium(hoặc bỏ nó đi, vì cài đặt trước trung bình là mặc định). Các cài đặt trước x264 chọn một tập hợp các tùy chọn trao đổi tốc độ mã hóa để đạt hiệu quả nén. Họ đang thuận tiện đặt tên từ ultrafast, superfast, veryfast, faster, fast, mediumđể slow, slowerveryslow. Chọn bất cứ điều gì bạn cảm thấy thoải mái.

Vì vậy, để tóm tắt, phiên bản dài:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -level 42 -bf 2 -keyint_min 60 -g 60 -refs 4 -x264-params me=umh:merange=64:subme=7:8x8dct:cabac=1 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Hoặc cái ngắn tôi sẽ sử dụng (với mã hóa VBV và một vài tùy chọn chi tiết bị xóa):

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -b:v 5200K -maxrate 5200K -bufsize 5200K -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Thay đổi thành mã hóa chất lượng không đổi để chuyển đổi đa mục đích, sử dụng mã này và thay đổi -crftham số từ 18 thành 28, trong đó thấp hơn có nghĩa là chất lượng tốt hơn và 23 là mặc định:

ffmpeg -i input.mpg -c:v libx264 -r 29.97 -s:v 1920x1080 -crf 23 -c:a aac -b:a 128K -ar 44100 d:\output.mp4

Haha @slhck, giống như tôi đang hoàn thiện câu trả lời của mình, bạn đi và đưa ra một câu hỏi hay hơn.
evilsoup
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.