Difference between revisions of "Bluray"
Line 1: | Line 1: | ||
− | State of play as of December | + | State of play as of December 2012. |
== Rip == | == Rip == | ||
− | Until recently the only way to rip Bluray discs on a PC was with AnyDVD HD in Windows, which | + | Until recently the only way to rip Bluray discs on a PC was with AnyDVD HD in Windows, which copies the contents of the disc into a folder after removing the encryption and DRM. You then had to use something else to select streams from the M2TS files, and remux them into a sensible container (Matroska). |
− | Now you can skip several steps by using [http://www.makemkv.com/ MakeMKV] instead. This will produce a Matroska file with the desired streams you select, leaving out all the subtitles and foreign language dub tracks you don't need. | + | === Use MakeMKV === |
+ | Now you can skip several steps by using [http://www.makemkv.com/ MakeMKV] instead. This will produce a Matroska file straight from the disc, with the desired streams you select, leaving out all the various subtitles and foreign language dub tracks you don't need. | ||
== Transcode == | == Transcode == | ||
Line 10: | Line 11: | ||
=== Transcode to H.264 === | === Transcode to H.264 === | ||
− | + | ;NOTE: ffmpeg developers fed up with Michael Niedermayer forked it in March 2011 and formed the ''libav'' project, with its ''avconv'' tool. Most of the key ffmpeg developers now contribute to this project instead. Like XFree86 and God knows how many other forked open source projects, Asperger's Syndrome strikes again. | |
− | + | In this example, I am processing my [http://www.blu-ray.com/movies/Baraka-Blu-ray/1529/#Review Bluray copy] of [http://www.imdb.com/title/tt0103767 Baraka]. | |
− | + | ||
+ | Having obtained a Matroska file containing the main title of the disc, we can use avconv to squash the video track from 28 GB down to about 10 GB using the constant rate factor quality setting: | ||
+ | avconv -i Baraka-rip.mkv -c:v libx264 -crf 21 Baraka.mkv | ||
=== Crop === | === Crop === | ||
+ | We can determine the crop using the autocrop video filter, which will output some numbers we can then use in the encode: | ||
+ | avconv -vf autocrop Baraka-rip.mkv | ||
+ | |||
Since Baraka has 102 pixels of letterbox top and bottom, we crop thus: | Since Baraka has 102 pixels of letterbox top and bottom, we crop thus: | ||
ffmpeg -i Baraka-rip.mkv -acodec copy -vcodec libx264 -crf 20 \ | ffmpeg -i Baraka-rip.mkv -acodec copy -vcodec libx264 -crf 20 \ |
Revision as of 13:56, 16 November 2012
State of play as of December 2012.
Rip
Until recently the only way to rip Bluray discs on a PC was with AnyDVD HD in Windows, which copies the contents of the disc into a folder after removing the encryption and DRM. You then had to use something else to select streams from the M2TS files, and remux them into a sensible container (Matroska).
Use MakeMKV
Now you can skip several steps by using MakeMKV instead. This will produce a Matroska file straight from the disc, with the desired streams you select, leaving out all the various subtitles and foreign language dub tracks you don't need.
Transcode
Transcode to H.264
- NOTE
- ffmpeg developers fed up with Michael Niedermayer forked it in March 2011 and formed the libav project, with its avconv tool. Most of the key ffmpeg developers now contribute to this project instead. Like XFree86 and God knows how many other forked open source projects, Asperger's Syndrome strikes again.
In this example, I am processing my Bluray copy of Baraka.
Having obtained a Matroska file containing the main title of the disc, we can use avconv to squash the video track from 28 GB down to about 10 GB using the constant rate factor quality setting:
avconv -i Baraka-rip.mkv -c:v libx264 -crf 21 Baraka.mkv
Crop
We can determine the crop using the autocrop video filter, which will output some numbers we can then use in the encode:
avconv -vf autocrop Baraka-rip.mkv
Since Baraka has 102 pixels of letterbox top and bottom, we crop thus:
ffmpeg -i Baraka-rip.mkv -acodec copy -vcodec libx264 -crf 20 \ -croptop 102 -cropbottom 102 -aspect 1920:876 Baraka.mkv
Note in the -aspect option we need to subtract the crops from the normal 1920:1080 aspect ratio.
User defined H.264 preset
For best quality, we can improve the H.264 options by creating our own H.264 ffmpeg preset.[1] To do this, we stick a bunch of gnarly good quality x264 options in a file called /usr/share/ffmpeg/libx264-gnarly.ffpreset. Then we simply go
ffmpeg -i Baraka-rip.mkv -acodec copy -vcodec libx264 -crf 20 \ -vpre gnarly \ -croptop 102 -cropbottom 102 -aspect 1920:876 Baraka.mkv
Since quality is paramount, we should use B frames as references, turn CABAC and trellis encoding on, bump up the motion estimation and subpixel search methods, increase the motion estimation range (especially for HD resolutions), turn on the 8x8 DCT, enable weighted B frame prediction, bump up the B frame options, use mixed reference frames (especially if using multiple B frame references), and disable the fast P frame skip for smoother skies and plain areas. This produces a great quality, highly efficient encode (small file size), at the expense of much longer encoding time and higher CPU demand when decoding. Here's my preset file:
g=250 keyint_min=25 sc_threshold=40 i_qfactor=0.71 qcomp=0.6 qmin=10 qmax=51 qdiff=4 me_range=24 me_method=umh subq=7 cmp=+chroma partitions=+parti8x8+parti4x4+partp8x8+partb8x8 refs=5 bf=16 wpredp=2 b_strategy=2 directpred=3 coder=1 trellis=2 flags=+loop flags2=+bpyramid+wpred+mixed_refs+dct8x8-fastpskip
Single pass constant rate factor (CRF) is best, since two-pass is only relevant if we care about exact file size. A good CRF range is 18-23, with 0 being lossless and 51 being maximum compression and probably awful. We can also use multiple threads to speed it up:
ffmpeg -i Baraka-rip.mkv -acodec copy -vcodec libx264 -crf 20 \ -vpre gnarly \ -threads 4 \ -croptop 102 -cropbottom 102 -aspect 1920:876 Baraka.mkv
Cartoons
For anime and cartoons, bump up the deblocking and noise reduction filters:
ffmpeg -deblockalpha 2 -deblockbeta 2 -nr 150 ...
Subtitles
Bluray subtitle streams currently need converting to SUB/IDX format before they will reliably go in Matroska files. This conversion can easily be done with BDSup2Sub[2]. Choose Lanczos3 for best quality if changing resolution.
M2TS files
Bluray video is stored in a modified version of the MPEG-TS container format in the BDMV/STREAM folder. The modification is an extra 4 byte time code on each MPEG-TS packet, increasing the packet size from 188 bytes to 192 bytes, apparently in order to better support buffering and out-of-order writing to random-access media. It is unclear whether this is an MPEG Committee sanctioned modification, but there appears to be some standardisation through something called AVCHD. So in theory, a decrypted M2TS file should be sufficient for playback, but many players still choke on it expecting the normal MPEG-TS format.
TS Muxer
We can also use tsmuxer[3] to deal with M2TS files, and in particular extract the AC3 and DTS cores from TruHD and HD Master Audio tracks respectively.
Adding a MIME type
Ubuntu still doesn't see these files as video files - edit /usr/share/mime/packages/bluray.xml and copy in this:
<?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> <mime-type type="video/bluray"> <alias type="application/bluray"/> <alias type="video/avchd"/> <sub-class-of type="video/mpeg"/> <comment>Blu-ray/AVCHD Video</comment> <magic priority="50"> <match value="\x47\x40\x00\x10\x00\xb0\x00\x11" type="string" offset="4"/> </magic> <generic-icon name="video-x-generic"/> <glob pattern="*.m2ts"/> <glob pattern="*.mts"/> </mime-type> </mime-info>
Then update your MIME database:
sudo update-mime-database
You should then be able to open M2TS files with an mplayer-based media player.
Playback
NVidia has VDPAU. Dear ATI, where's that fancy video acceleration you promised? In the meantime, we can speed up playback using multithreaded mplayer[4]:
git clone git://repo.or.cz/mplayer cd mplayer git checkout origin/mt git submodule init git submodule update sudo apt-get build-dep mplayer ./configure --prefix=/usr make sudo checkinstall --fstrans=no --install=no --pkgname=mplayer-mt --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1" --default
mplayer -lavdopts threads=4 Baraka.mkv
And if it still sucks,
mplayer -lavdopts skipframe=nonref:skiploopfilter=all:fast=1:threads=4 Baraka.mkv