Trao đổi với tôi

http://www.buidao.com

10/22/13

[Encoding] Hướng dẫn encode Blu-ray/HDTV sử dụng x264

3 nguyên tắc vàng khi encode HD

  • Kiểm tra source trước khi encode, nếu không bạn sẽ tốn khá nhiều thời gian mà sản phẩm còn tệ hơn cả DVD!
  • Luôn luôn update các phầm mềm lên phiên bản mới nhất.
  • Tôn trọng chất lượng ban đầu của source, chỉ "tân trang" source nếu source có lỗi.

Hardware cần thiết


Tối thiểu

  • CPU: Q6600 OC @ 3.00 Ghz
  • Cooler: Air cooler (cái nào cũng được, trừ stock fan, đảm bảo temp dưới 70* khi fullload)
  • RAM: 4GB 800 Mhz
  • HDD: 500GB
  • PSU: Acbel hoặc Cooler Master 500W

Yêu cầu

  • CPU: i7 series OC @ 3.0Ghz hoặc hơn nếu có thể
  • Cooler: Air cooler hoặc Water Cooler (đảm bảo temp dưới 70* khi fullload)
  • RAM: 6GB 1333 Mhz (bus càng cao càng tốt)
  • HDD: 1TB (càng nhiều càng tốt)
  • PSU: Acbel hoặc Cooler Master 650W

Các phần mềm cần thiết và cài đặt:


Yêu cầu

  • OS: Win 7 x64/ Win server 2008 RC2 x64
  • Video Editor: Avisynth, AVSP
  • Video encoder: x264
  • Audio encoder: eac3to
  • Linh tinh: meGUI, Haali Media Spliter, Mkvtoolnix, suprip, mediainfo...

Cài đặt

Tớ chỉ huớng dẫn cài đặt một vài soft mà theo tớ là khó cài thôi, còn lại các bác tự mò nhé.
  • Avisynth: Cài đặt bản avisynth 2.58 xong thì download plugins này: ffmpegsource2, extract và vất các file trong đó vào thư mục plugins của Avisynth. Nếu CPU đa nhân thì nên dùng bản ffms2-mt hỗ trợ multithread
  • Eac3to: Extract ra một thư mục, bỏ vào chỗ nào tiện nhất. Copy file cmd.exe trong thư mục C:\Windows\System32 vào trong thư mục eac3to và tạo shortcut từ file cmd đó. Tiếp tục down bộ codec này về và cài vào máy: Eac3to Decoder Pack. Xong xuôi chạy file shortcut cmd rồi gõ
eac3to -test
Nếu nó report như thế này thì là ổn. 2 cái Sonic và Surcode ko quan tâm
eac3to (v3.22) is up to date
Nero Audio Decoder (Nero 7) works fine
ArcSoft DTS Decoder (1.1.0.7) works fine
Sonic Audio Decoder (3.18.0.0) doesn't seem to be installed
Haali Matroska Muxer (2010-05-20) is up to date
Nero AAC Encoder (1.5.3.0) is up to date
Surcode DTS Encoder doesn't seem to be installed
http://www.surcode.com
MkvToolnix (4.1.1.0, release version) is up to date
Nếu nó report có soft nào mới thì ngay lập tức update theo link report

Xử lý source

  • Source để encode hiện tại chỉ còn 2 loại: BluRay và HDTV cap. Tớ sẽ ko đi sâu vào HDTV cap nhé.
  • BluRay ko phải cái nào cũng đẹp lung linh, có những source khá xấu và yêu cầu phải dùng filter để xử lý. Vấn đề này tớ cũng ko đi sâu vì hiện tại số bluray xấu chiếm khá ít, hơn nữa sử dụng filter khá thiên biến vạn hóa.

Step 1 - Tách các stream bằng eac3to

  • Tách để làm gì? Là để xử lý từng stream của blu-ray: video, audio, sub. Bây giờ bạn bật CMD shortcut lên rồi gõ câu lệnh sau:
eac3to Đường-dẫn-đến-source
vd:
eac3to D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits
  • Lưu ý đường dẫn ko được phép có một ký tự trống nào cả, nếu có sẽ báo lỗi. Sau khi enter, eac3to sẽ report tất cả playlist có trong source:
C:\Users\EPiK\eac3to>eac3to D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.
DTS-HD.MA5.1-CHDBits
1) 01015.mpls, 00052.m2ts+00050.m2ts+00051.m2ts, [COLOR="DeepSkyBlue"]2:49:29'''
  - Chapters, 20 chapters
  - h264/AVC, 1080p24 /1.001 (16:9)
  - DTS Master Audio, English, multi-channel, 48khz
  - AC3, German, multi-channel, 48khz
  - AC3, Spanish, multi-channel, 48khz
  - AC3, French, multi-channel, 48khz
  - AC3, Italian, multi-channel, 48khz

2) 01027.mpls, 00050.m2ts, [COLOR="DeepSkyBlue"]2:48:21'''
  - Chapters, 20 chapters
  - h264/AVC, 1080p24 /1.001 (16:9)
  - DTS Master Audio, English, multi-channel, 48khz
  - AC3, German, multi-channel, 48khz
  - AC3, Spanish, multi-channel, 48khz
  - AC3, French, multi-channel, 48khz
  - AC3, Italian, multi-channel, 48khz
  • Lưu ý các số 1)2) là những số thứ tự playlist, và runtime của playlist đó. Thông thuờng có một số blu-ray có nhiều bản cut (DC, TC, EC), ta sẽ dựa vào runtime để chọn playlist thích hợp. Ở truờng hợp source này, playlist 1 có đoạn intro và outro của hãng phim còn playlist 2 không có. Ta sẽ chọn playlist 1.
  • Nhấn phím lên trong cửa sổ CMD để load lại câu lệnh cũ, gõ thêm 1) vào cuối câu lệnh để đi vào playlist 1
eac3to D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits 1)
eac3to sẽ report các stream có trong playlist 1
C:\Users\EPiK\eac3to>eac3to D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits 1)
M2TS, 1 video track, 5 audio tracks, 15 subtitle tracks, 2:49:29, 48p /1.001
1: Chapters, 20 chapters
2: h264/AVC, 1080p24 /1.001 (16:9)
3: DTS Master Audio, English, 5.1 channels, 24 bits, 48khz
  (core: DTS, 5.1 channels, 24 bits, 1509kbps, 48khz)
4: AC3, German, 5.1 channels, 640kbps, 48khz, dialnorm: -27dB
5: AC3, Spanish, 5.1 channels, 640kbps, 48khz, dialnorm: -27dB
6: AC3, French, 5.1 channels, 640kbps, 48khz, dialnorm: -27dB
7: AC3, Italian, 5.1 channels, 640kbps, 48khz, dialnorm: -27dB
8: Subtitle (PGS), Danish
9: Subtitle (PGS), German
10: Subtitle (PGS), English
11: Subtitle (PGS), Spanish
12: Subtitle (PGS), French
13: Subtitle (PGS), Italian
14: Subtitle (PGS), Dutch
15: Subtitle (PGS), Norwegian
16: Subtitle (PGS), Finnish
17: Subtitle (PGS), Swedish
18: Subtitle (PGS), English
19: Subtitle (PGS), German
20: Subtitle (PGS), Spanish
21: Subtitle (PGS), French
22: Subtitle (PGS), Italian
  • Để ý các số 1:, 2:, 3...., đó là số thứ tự các stream. Bây giờ bạn sẽ tách các stream ra và xử lý chúng. Format như sau:
eac3to Đuờng-dẫn-đến-source số-playlist) số-stream: đuờng-dẫn-đến-thư-mục-lưu\file.format
ví dụ
C:\Users\EPiK\eac3to>eac3to D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits 1) 1: D:\SOURCE\Ryan\chapter.txt 2: D:\SOURCE\Ryan\source.mkv 3: D:\SOURCE\Ryan\audio.dts -core 8: D:\SOURCE\Ryan\dan.sup 9: D:\SOURCE\Ryan\ger.sup 10: D:\SOURCE\Ryan\eng.sup 11: D:\SOURCE\Ryan\spa.sup 12: D:\SOURCE\Ryan\fre.sup 13: D:\SOURCE\Ryan\ita.sup 14: D:\SOURCE\Ryan\dut.sup 15: D:\SOURCE\Ryan\nor.sup 16: D:\SOURCE\Ryan\fin.sup 17: D:\SOURCE\Ryan\swe.sup
  • Lưu ý:
    • Chapter thuờng nằm ở vị trí số 1, đuôi mở rộng là .txt
    • Video thuờng nằm ở vị trí số 2, đuôi mở rộng là .mkv
    • Audio nằm ở vị trí kế tiếp, bạn phải chọn ngôn ngữ gốc của phim. Đuôi mở rộng là .dts, .ac3, .aac tùy nhu cầu sử dụng. Lưu ý nếu muốn tách dts từ DTS HD MA nhớ add thêm lệnh -core
    • Sub có đuôi mở rộng là .sup



Step 2 - xử lý video

  • Công đoạn này tuy đơn giản nhưng góp phần hết sức quan trọng trong sản phẩm cuối. Fail hay ko fail là ở chỗ này đó
  • Đầu tiên mở file source.mkv bằng AVSP. Mặc định nó sẽ dùng filter DirectShowSource để đọc file, bạn thay filter này bằng ffmpegsource2:
DirectShowSource("D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits\source2.mkv")
thành
ffmpegsource2("D:\SOURCE\Saving.Private.Ryan.1998.BluRay.1080p.AVC.DTS-HD.MA5.1-CHDBits\source2.mkv")
  • Nhấn phím F5 một phát rồi chờ nó index file source. Việc này tốn khoảng 1-3p tùy runtime của source và tốc độ HDD của bạn. Sau khi index xong trong thư mục sẽ xuất hiện file source.mkv.ffindex, bạn ko được xóa file đó đi nhé. Tiếp tục xem qua cửa sổ của AVSP bạn sẽ thấy toàn cảnh từng frame của source.
  • Chọn cảnh sáng nhất mà bạn có thể quan sát cả 4 góc của frame để tiến hành crop (nếu source có blackbar). Lệnh crop như sau:
Crop(a,b,c,d)

a= trái
b= trên
c= phải (số âm)
d= dưới (số âm)
  • Ví dụ source bạn có 2px đen ở trái và phải, 132px đen ở trên và dưới thì lệnh crop sẽ như sau
Crop(2,132,-2,-132)
  • Nếu ko có dải đen nào hết thì ko dùng lệnh này...Thế còn số lẻ thì sao? Mặc định lệnh crop ko cho bạn crop số lẻ nên bạn sẽ dùng function crop của filter Spline36Resize. Ví dụ bạn có 1px đen ở trái và phải, 131px đen ở trên và dưới. Tính nhẩm bạn sẽ thấy độ phân giải còn lại sẽ là 1918x818, vậy lệnh sẽ như sau:
Spline36Resize(1918,818,1,131,-1,-131)
  • Lưu ý độ phân giải cuối cùng của source lúc nào cũng phải chia hết cho 2, tức ko có chuyện 1919x817 (vd thế). Gặp trừong hợp đó bạn phải crop thêm 1px bên trái/phải và trên/duới.
Nếu bạn encode 1080p thì như vậy là xong, chọn save file AVS.
  • Nếu muốn encode 720p thì thêm một buớc resize nữa. Cách resize là bạn tính chiều cao x của sản phẩm 720p đích thông qua qui tắc tam xuất sau:
w/h = 1280/x ---> x = 1280*h/w

w= chiều rộng source sau khi crop hết blackbar
h= chiều cao source sau khi crop hết blackbar

nếu x ra số lẻ thì lấy số chãn gần nó nhất. VD 545.5 lấy 546, 534.5 lấy 534
  • Sau khi tính ra x, bạn dùng lệnh sau để resize (nếu truớc nó đã có lệnh crop với các thông số chẵn). VD
Crop(2,132,-2,132)
Spline36Resize(1280,546)
  • Nếu bạn đã dùng lệnh Spline36 để crop số lẻ thì làm như sau:
Spline36Resize(1918,818,1,131,-1,-131)
áp dụng qui tắc tính x sửa lại thành
Spline36Resize(1280,546,1,131,-1,-131)
Chọn save file AVS

Testing và Encode video

  • Như vậy bây giờ trong thư mục project của bạn đã có file source.mkv, file avs, file audio.ac3(hoặc dts) và các file sup. Để encode bạn cần có thêm các file sau: avs2yuv.exe, x264.exe và file encode.bat. File encode.bat là file lưu giữ các setting bạn cần encode. Mình sẽ cho anh em một template mẫu, còn setting chính xác như thế nào thì còn phải qua công đoạn test:
avs2yuv source.avs -o - | x264.exe --stdin y4m --pass 1 --bitrate '''X''' --stats ".stats" --level 4.1 --ref '''X''' --bframes '''X''' --b-adapt 2 --direct auto --deblock -3:-3 --aq-strength '''X''' --no-mbtree --output NUL - 2> pass1.log

avs2yuv source.avs -o - | start /b /low x264.exe --stdin y4m --pass 2 --bitrate '''X''' --stats ".stats" --level 4.1 --ref '''X''' --no-fast-pskip --bframes '''X''' --direct auto --deblock -3:-3 --subme 9 --trellis 2 --psy-rd '''X.X:X.X''' --me umh --aq-strength '''X''' --no-dct-decimate --no-mbtree --output "encode.mkv" - 2> pass2.log 
  • Lưu ý:
    • Các setting mình sẽ giải thích khi làm video demo
    • với bitrate bạn có thể chọn thông qua meGUI: Mở meGUI, chọn Tool/Bitrate Calculator , chọn số framerate, điền số frame của source vào (xem file source.avs trong AVSP, góc dưới bên phải), Select file audio trong thư mục project, ở ô filesize thì chọn target size mà bạn thích (DVD5, DVD9...)

  • Copy đoạn setting trên bỏ vào file txt, sau đó save lại thành file encode*bat . Sau đó mở file source.avs lên, add thêm đoạn lệnh sau vào cuối file để test : SelectRangeEvery(5000,300). Giải thích câu lệnh này: Cứ mỗi 5000 frames của source sẽ lấy ra 300 frames để test. Như vậy file test sẽ có time = 1/16 time của source gốc. Save lại và chạy file encode.bat
  • Sau khi có kết quả là đến bước kiểm tra thành phẩm, nghĩa là compare với source. Dùng AVSP mở file source.avs và encode.mkv lên, nhớ thay DirectShowSource bằng ffmpegsource2 ở tab encode, đồng thời add thêm câu lệnh ffinfo() ở tab encode đê xem thông tin về frametype. Nhấn F5 để review, sau đó chọn đến frame bất kỳ và chuyển qua lại giữa 2 tab để so sánh. Lưu ý là luôn so sánh B type, còn I và P ko nên so vì chúng lúc nào cũng cho chất lượng tốt.
Nếu ok về chất lượng rồi thì bạn có thể gỡ câu lệnh SelectRangeEvery(5000,300) ở file source.avs ra và tiến hành encode hoàn chỉnh. Còn nếu chưa ưng ý thì chỉnh lại setting và encode file test tiếp

http://wiki.hdvnbits.org/index.php?title=H%C6%B0%E1%BB%9Bng_d%E1%BA%ABn_encode_Blu-ray/HDTV_s%E1%BB%AD_d%E1%BB%A5ng_x264