Automatic Ripping Machine | Headless | Blu-Ray/DVD/CD

The A.R.M. (Automatic Ripping Machine) detects the insertion of an optical disc, identifies the type of media and autonomously performs the appropriate action:

  • DVD / Blu-ray -> Rip with MakeMKV and Transcode with Handbrake
  • Audio CD -> Rip and Encode to FLAC and Tag the files if possible.
  • Data Disc -> Make an ISO backup

It runs on Linux, it’s completely headless and fully automatic requiring no interaction or manual input to complete it’s tasks (other than inserting the disk).  Once it completes a rip it ejects the disc for you and you can pop in another one.

Flowchart of Ripping Process

I uploaded the scripts to GitHub under the MIT license.  As of version 1.1.0 (which pulls in muckngrind4’s changes) the ARM can rip from multiple drives simultaneously, and send push notifications to your phone when it’s complete using Pushbullet or IFTTT.

Instructions to get it installed on Ubuntu 14.04 or 16.04 LTS follows.

Automatic Ripping Machine (Supermicro MicroServer) under my desk

ARM Equipment & Hardware

Blu-Ray Hardware and VMware Settings

You will need a server.  I am using my Datacenter in a Box Build and run the ARM on Ubuntu Linux 16.04 LTS under VMware.  At first I tried using an external USB Blu-Ray drive but the VM didn’t seem to be able to get direct access to it.  My server case has a slim-DVD slot on it so I purchased the Panasonic UJ160 Blu-Ray Player Drive  because it was one of the cheaper Blu-Ray drives.

I wasn’t sure if VMware would recognize the Blu-Ray functions on the drive but it does!  Once physically installed edit the VM properties so that it uses the host device as the CD/DVD drive and then select the optical drive.

VMware Machine Properties, select CD/DVD drive, set Device Type to Host Device and select the optical drive.

Regions…

I kept getting this error while trying to rip a movie:

MSG:3031,0,1,”Drive BD-ROM NECVMWar VMware IDE CDR10 1.00 has RPC protection that can not be bypassed. Change drive region or update drive firmware from http://tdb.rpc1.org. Errors likely to follow.”,”Drive %1 has RPC protection that can not be bypassed. Change drive region or update drive firmware from http://tdb.rpc1.org. Errors likely to follow.”,”BD-ROM NECVMWar VMware IDE CDR10 1.00″

Defective By Design Logo

After doing a little research I found out DVD and Blu-Ray players have region codes that only allow them to play movies in the region they were intended–by default the Panosonic drive shipped with a region code set to 0.

World Map with DVD Region Codes
CC BY-SA 3.0 from https://en.wikipedia.org/wiki/DVD_region_code#/media/File:DVD-Regions_with_key-2.svg

Notice that North America is not 0.

Looking at http://tdb.rpc1.org/ it looks like it is possible to flash some drives so that they can play videos in all region codes.  Fortunately before I got too far down the flash the drive path I discovered you can simply change the region code!  Since I’m only playing North American movies I set the region code to 1 using:

You can only change this setting 4 or 5 times then it gets stuck so if you’re apt to watch movies from multiple regions you’ll want to look at getting a drive that you can flash the firmware.

Install MakeMKV, Handbrake, ABCDE and At

Mount Samba/CIFS Media Share

If you’re ripping to the local machine skip this section, if you’re ripping to a NAS like I am do something like this…

In FreeNAS I created a media folder on my data share at \\zfs\data\media

Edit /etc/fstab

Once that’s in the file mount the folder and create an ARM and an ARM/raw folder.

Install ARM Scripts

Create a folder to install the Automatic Ripping Scripts.  I suggest putting them in /opt/arm.

You should look over the config file to make sure it suits your needs, if you want to add Android or iOS push notifications that’s where to do it.

Figure out how to restart udev, or reboot the VM (make sure your media folder gets mounted on reboot).  You should be set.

Automatic Ripping Machine Usage

  1. Insert Disc.
  2. Wait until the A.R.M. ejects the disc.
  3. Repeat

Test out a movie, audio cd, and data cd and make sure it’s working as expected.  Check the ouput logs at /opt/arm/logs and also syslog if you run into any issues.  If you run into trouble feel free to post an issue here.

Install MakeMKV License

MakeMKV will run on a trial basis for 30 days.  Once it expires you’ll need to purchase a key or while it’s in BETA you can get a free key…  I would love to build this solution on 100% free open source software but MakeMKV saves so much time and is more reliable compared to anything else I’ve tried.  I will most likely purchase a license when it’s out of beta.

Grab the latest license key from: http://www.makemkv.com/forum2/viewtopic.php?f=5&t=1053

Edit the /root/.MakeMKV/settings.conf  and add a line:

How it Works?

When UDEV detects a disc insert/eject as defined by /lib/udev/rules.d/51-automedia.rules it runs the wrapper which in turn runs /opt/arm/identify.sh which identifies the type of media inserted and then calls the appropriate scripts.  (if you ever need it this is a great command get get info on a disk):

Video Discs (Blu-Ray/DVD)

All tracks get ripped using MakeMKV and placed in the /mnt/media/ARM/raw folder as soon as ripping is complete the disk ejects and transcoding starts with HandBrakeCli transcoding every track into /mnt/media/ARM/timestamp_discname.  You don’t have to wait for transcoding to complete, you can immediately insert the next disk to get it started.

FileBot Screenshot Selecting files for rename

There is some video file renaming that needs to be done by hand.  The ARM will name the folder using the disc title, but this isn’t always accurate.  For a Season of TV shows I’ll name them using FileBot and then move them to one of the Movie or TV folders that my Emby Server looks at.  Fortunately this manual part of the process can be done at any time, it won’t hold up ripping more media.  The Emby Server then downloads artwork and metadata for the videos.

Screenshot of Emby's Movies Page

Audio CDs

If an audio track is detected it is ripped to a FLAC file using the abcde ripper.  I opted for the FLAC format because it’s lossless, well supported, and is un-proprietary.  If you’d prefer a different format ABCDE can be configured to rip to MP3, AAC, OGG, whatever you want.  I have it dropping the audio files in the same location as the video files but I could probably just move it directly to the music folder where Emby is looking.

emby_beethovens_last_night

Data Disks (Software, Pictures, etc.)

If the data type is ISO9660 then a script is run to make a backup ISO image of the disc.

Screenshot of TurboTax ISO file

Morality of Ripping

Two Evils: Piracy vs. DRM

I am for neither Piracy or DRM.  Where I stand morally is I make sure we own every CD, DVD, and Blu-Ray that we rip using the ARM.

I don’t advocate piracy.  It is immoral for people to make copies of movies and audio they don’t own.  On the other hand there is a difference between Piracy and copying for fair use  which publisher’s often wrongly lump together.

What really frustrates me is DRM.  It’s waste of time.  I shouldn’t have to mess with region codes, and have to use software like MakeMKV to decrypt a movie that I bought! And unfortunately the copy-protection methods in place do nothing to stop piracy and everything to hinder legitimate customers.

For me it doesn’t really even matter because I don’t really like watching movies anyway–there’s not much more painful than sitting for an hour to get through a movie.  I just like making automatic ripping machines.

Well, hope you enjoy the ARM.

War Games DVD in Tray

 

 

103 thoughts on “Automatic Ripping Machine | Headless | Blu-Ray/DVD/CD”

    1. Unfortunately you can’t buy it, you have to build it. I have the same frustration, some of my movies won’t play in a DVD/Blu-Ray player. Sometimes they’ll play but the chapters are all out of order. My theory is the newer movies get updated with newer technology so you have to keep buying newer players every year to keep up. My Automatic Ripping Machine processes them fine so far.

  1. Your process seems pretty neat, I’ve been looking for a way to automate. I stumbled across this:

    GitHub: https://github.com/JasonMillward/Autorippr
    Install: http://docs.jcode.me/autorippr/

    For movies and TV series, it seems to take your method one step further. Maybe you should take a look at it and it could improve your setup possibly…

    I’m currently testing it, but running into a couple of issues, but it could be because I’m running it in VM on top of Windows…

    1. So just an update, I wrote a script to install the above autorippr to make it easier and I did get it functioning. Now I just wish we could somehow combine your project and the one I referenced. Because the other project only handles movies/tv series and automates the naming function that yours does not. But your process handles CD’s and data discs. So if we could somehow combine them, it would be amazing!!!

      Just a thought…

      1. Good find, Steven! It looks like Jason’s Autoripper is pretty advanced … taking a quick look at his setup all you’d need to do to combine them is edit my identify.sh script on line 13 and replace the call to “/opt/arm/video_rip.sh” with “python /whereveryouhaveitinstalled/Autorippr/autorippr.py –all –silent ”

        Let me know if you try it!

        1. Question about your script, do you have to transcode? Or is there a way you can disable it? The reason I ask is because I don’t want to compress, I want to store it lossless. I haven’t yet tried your script, but thinking about doing so soon. Because I have a feeling I may have to name things manually after all anyways…

          Have you thought of building an install script? I built one for Autorippr, I could also build one for yours…

          1. In video_rip.sh comment out this line to prevent it from Transcoding. That will result in the raw MakeMKV files.

            # echo /opt/arm/video_transcode.sh $DEST $ID_FS_LABEL $TIMESTAMP | batch

            Is FileBot not going to be a fully automatic solution for renaming?

            An install script would be great, feel free to do a pull request on GitHub for your install script and if it looks okay to me I’ll merge it in.

  2. Tired using this and it keeps kicking the disc out (dvd). Sometimes it will use make mlb but doesn’t pick up the correct tracks and just does the extras.

    1. Hi, Cliff. Sorry it’s not working right. Does the ejecting disc issue happen on every DVD or just a certain ones? Is this a clean (undamaged) disc? It should rip every track including the main track. Can you try ripping manually in MakeMKV to see if it works there? If it fails in MakeMKV it’s likely an issue with decryption, or a damaged disc. If it works manually can you post the output of /opt/arm/log and I’ll see if I spot anything that could determine where the issue is. Also after inserting the disc post the output of “udevadm info -q env -n /dev/sr0” — my script uses udev parameters to decide what to do so it’s possible the disc isn’t identifying itself properly, it may be identifying itself as a disc type I’ve never come across before so my script doesn’t account for it, or it could be your particular DVD drive can’t read that information (I’m just shooting in the dark here). Feel free to post any info I could use to help troubleshoot it.

    1. Actually someone else modified the scripts to support multiple devices. He should be doing a GitHub pull request soon so if you can hang tight it will be merged in soon… if you can’t wait, UDEV is already passing in the device as DEVNAME aso you can change the scripts yourself so that every reference from /dev/sr0 to ${DEVNAME} … so for example on data_rip.sh you’ll need to change:

      makemkvcon mkv dev:/dev/sr0 all $DEST -r

      to

      makemkvcon mkv dev:${DEVNAME} all $DEST -r

      You’ll also want to make sure every command where I didn’t specify a device (like eject, abcde, etc.) is passed the ${DEVNAME} parameter.

  3. So I am up and running with the new settings. Great work! Now my only problem is who’s script to use in the back end. Yours or Don Melton’s. Don’s creates a little bigger file then yours.

  4. I have ran into a unique problem. I have videos that are .avi format and the disc is formatted as a UDF. So far the ARM keeps kicking the disc out. Looks like it doesn’t know how to handle the file since it’s looking to send UDF’s to the MakeMKVCON. Can you help me write a IF statement to copy the avi files to the destination folder?

    1. Can you insert the disc with an AVI on it and run

      udevadm info -q env -n /dev/sr0 (or whatever your device is)

      and paste the output here? You might need to comment out the eject command in the script. I’m hoping we can find some way to differentiate your UDF AVI discs and UDF movie discs.

  5. DEVLINKS=/dev/disk/by-uuid/1002062420554446 /dev/dvdrw /dev/disk/by-label/Mar\x2031\x202016 /dev/cdrw /dev/dvd /dev/disk/by-path/pci-0000:00:1f.2-ata-2 /dev/disk/by-id/ata-PLDS_DVD+_-RW_DS-8ABSH_23HW67363943P51UDA00 /dev/cdrom
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sr0
    DEVTYPE=disk
    ID_ATA=1
    ID_ATA_SATA=1
    ID_ATA_SATA_SIGNAL_RATE_GEN1=1
    ID_BUS=ata
    ID_CDROM=1
    ID_CDROM_CD=1
    ID_CDROM_CD_R=1
    ID_CDROM_CD_RW=1
    ID_CDROM_DVD=1
    ID_CDROM_DVD_PLUS_R=1
    ID_CDROM_DVD_PLUS_RW=1
    ID_CDROM_DVD_PLUS_R_DL=1
    ID_CDROM_DVD_R=1
    ID_CDROM_DVD_RAM=1
    ID_CDROM_DVD_RW=1
    ID_CDROM_MEDIA=1
    ID_CDROM_MEDIA_DVD_R=1
    ID_CDROM_MEDIA_SESSION_COUNT=2
    ID_CDROM_MEDIA_SESSION_NEXT=2
    ID_CDROM_MEDIA_STATE=appendable
    ID_CDROM_MEDIA_TRACK_COUNT=2
    ID_CDROM_MEDIA_TRACK_COUNT_DATA=1
    ID_CDROM_MRW=1
    ID_CDROM_MRW_W=1
    ID_FOR_SEAT=block-pci-0000_00_1f_2-ata-2
    ID_FS_LABEL=Mar_31_2016
    ID_FS_LABEL_ENC=Mar\x2031\x202016
    ID_FS_TYPE=udf
    ID_FS_USAGE=filesystem
    ID_FS_UUID=1002062420554446
    ID_FS_UUID_ENC=1002062420554446
    ID_MODEL=PLDS_DVD+_-RW_DS-8ABSH
    ID_MODEL_ENC=PLDS\x20DVD+\x2f-RW\x20DS-8ABSH\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    ID_PATH=pci-0000:00:1f.2-ata-2
    ID_PATH_TAG=pci-0000_00_1f_2-ata-2
    ID_REVISION=AD11
    ID_SERIAL=PLDS_DVD+_-RW_DS-8ABSH_23HW67363943P51UDA00
    ID_SERIAL_SHORT=23HW67363943P51UDA00
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    TAGS=:systemd:seat:uaccess:
    USEC_INITIALIZED=1159718

  6. Thanks, Cliff. Unfortunately UDF data discs and video discs are indistinguishable in udev as far as I can tell. However, I think, that all video DVDs, have a VIDEO_TS folder, so the script might be able to check for the existence of a VIDEO_TS folder and if it has one send it to MAKEMKV, if not to the data rip script. I’m not sure if there’s a similar method to determine whether a Blu Ray disc is data or video, if there is it should be an easy modification to the identify.sh script. I’ll try to dig up a few of my Blu Ray discs this weekend to see if there’s a way to distinguish those from data blu-rays.

  7. You might also want to add the device name into abcde commandline too, so

    abcde

    goes to

    abcde -d $DEVNAME

    As I had a slight issue when my external drive decided to get device name /dev/sr1 rather than /dev/sr0

  8. Hi Ben, I’d like to use your ARM on a dedicated hardware. Can you suggest some simple and cheap hardware that can run in a minimalistic case (so it doesn’t get too hot in the case but has enough power for transcoding BluRays)?

    1. Hi, Reinhard. I’m using this build: https://b3n.org/supermicro-x10sdv-f-build-datacenter-in-a-box/ it’s using a Xeon D-1540 SOC CPU that provides the power of a Xeon but runs cool. I got the 8 core version but you can also get that motherboard in a 6C, 4C or 2C to save money. I think the Xeon D series is a good balance between running cool without losing performance (which is what would happen if you went down to Atom class). The case I got is meant for NAS and only has a slot for one optical drive so you may want to find a different case (maybe one that can hold multiple drives) for it depending on your needs.

  9. Very handy bit of integration you have done. For a cheap but slow dedicated box to run it on I wonder of you could use a Raspberry PI ? It would be slow compared to a Xenon etc, but it has the advantage it is cheap and uses little power and runs cool…

    1. Hi, Rob. I’m not sure that MakeMKV or Handbrane can run on an ARM processor. You’ll probably be better off with x86 architecture, I haven’t tried it myself but maybe the: Intel Compute Stick I’m not that familiar with Handbrake’s settings but you might be able to change the preset from “High Profile” to “Normal” to save time encoding… I honestly can’t tell the difference in quality between the two.

  10. I’m really frustrated. Your ARM does not work with my DVDs. I’ve “The Simpsons” and “Elsa the Snow Queen” here and when inserting the DVDs they get ejected immediately. Lost in space I’ve set the region code to 2 (I come from germany), which seems to be not necessary. Looking with udevadm there is no ID_FS_TYPE and no ID_FS_LABEL for these video DVDs. But a self-burned DVD-R show these attributes. What’s wrong there?

    1. Hi, Reinhard. So far I have not run across a single DVD without IF_FS_TYPE. My wife happens to have “Frozen” on DVD (which she thinks is the North American version of “Elsa the Snow Queen”, I just popped it in and it does have the ID_FS_TYPE. I wonder if the ID_FS_TYPE field is named something else in some regions? If the variable is a different name I can add that to the check, or if it’s missing entirely I can change the script to use another method to identify the type like checking for the existence of a VIDEO_TS or BDMV folder to identify it as a video.

      Can you do me a quick favor and post the log that gets created when you insert The Simpsons or Elsa the Snow Queen? It should be in /opt/arm/logs and probably is called empty.log if it’s not picking up a ID_FS_LABEL. Can you also make sure makemkv is able to rip it successfully? Use this command replacing /dev/sr0 with your device: makemkvcon mkv dev:/dev/sr0 all “/tmp/” –minlength=120 -r

      Here’s a sample of the log I want:

      Deleting 0 old log files:
      DEVLINKS=/dev/disk/by-uuid/2014-01-21-12-23-52-00 /dev/disk/by-id/ata-VMware_Virtual_IDE_CDROM_
      Drive_10000000000000000001 /dev/cdrom /dev/disk/by-label/FROZEN /dev/dvd /dev/dvdrw /dev/cdrw /
      dev/disk/by-path/pci-0000:00:07.1-ata-2
      DEVNAME=/dev/sr0
      DEVPATH=/devices/pci0000:00/0000:00:07.1/ata2/host1/target1:0:0/1:0:0:0/block/sr0
      DEVTYPE=disk
      ID_ATA=1
      ID_ATA_FEATURE_SET_PM=1
      ID_ATA_FEATURE_SET_PM_ENABLED=1
      ID_BUS=ata
      ID_CDROM=1
      ID_CDROM_BD=1
      ID_CDROM_CD=1
      ID_CDROM_CD_R=1
      ID_CDROM_CD_RW=1
      ID_CDROM_DVD=1
      ID_CDROM_DVD_PLUS_R=1
      ID_CDROM_DVD_PLUS_RW=1
      ID_CDROM_DVD_PLUS_R_DL=1
      ID_CDROM_DVD_R=1
      ID_CDROM_DVD_RAM=1
      ID_CDROM_DVD_RW=1
      ID_CDROM_MEDIA=1
      ID_CDROM_MEDIA_DVD=1
      ID_CDROM_MEDIA_SESSION_COUNT=1
      ID_CDROM_MEDIA_STATE=complete
      ID_CDROM_MEDIA_TRACK_COUNT=1
      ID_CDROM_MEDIA_TRACK_COUNT_DATA=1
      ID_FOR_SEAT=block-pci-0000_00_07_1-ata-2
      ID_FS_LABEL=FROZEN
      ID_FS_LABEL_ENC=FROZEN
      ID_FS_TYPE=udf
      ID_FS_USAGE=filesystem
      ID_FS_UUID=2014-01-21-12-23-52-00
      ID_FS_UUID_ENC=2014-01-21-12-23-52-00
      ID_MODEL=VMware_Virtual_IDE_CDROM_Drive
      ID_MODEL_ENC=VMware\x20Virtual\x20IDE\x20CDROM\x20Drive\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
      ID_PATH=pci-0000:00:07.1-ata-2
      ID_PATH_TAG=pci-0000_00_07_1-ata-2
      ID_REVISION=00000001
      ID_SERIAL=VMware_Virtual_IDE_CDROM_Drive_10000000000000000001
      ID_SERIAL_SHORT=10000000000000000001
      ID_TYPE=cd
      MAJOR=11
      MINOR=0
      SUBSYSTEM=block
      TAGS=:uaccess:seat:systemd:
      USEC_INITIALIZED=1419132
      identified udf
      found FROZEN on /dev/sr0
      identified udf as video
      Obtained Title Frozen (2014)

      Thanks,
      Ben

  11. Thanks for your reply. You’re right, the correct ID_FS_LABEL is “FROZEN”, also here in Germany. I’ve tested a bit more. My host system is OpenMediaVault 3 (based on Debian 8), aka OMV. Running udevadm on host system returns ID_FS_LABEL/TYPE for some video DVDs (like “Rio” and “Dora the Explorer”), but not for all (like Frozen or The Simpsons, where these information are missing). Inside OMV I’ve setup Virtualbox and a guest machine using Xubuntu. When passthrough the DVD drive to the guest, all is fine!?!? Inside the virtual machine I can query ID_FS_LABEL/TYPE for “Frozen” and “The Simpsons” via udevadm. But not on host!? That’s weired having a virtual machine installed to run ARM instead of running it on host directly.

  12. It seems, that there is no way to let headless Debian 8.6 read these encrypted DVDs. On Ubuntu 16.04 all is fine and get can ID_FS_LABEL from the related DVDs so you scripts can work. But I’ve found a workaround:

    root@baldur:~# dd if=/dev/sr0 of=dvd.iso bs=512k count=1
    1+0 Datensätze ein
    1+0 Datensätze aus
    524288 Bytes (524 kB) kopiert, 1,47543 s, 355 kB/s
    root@baldur:~# blkid -p dvd.iso
    dvd.iso: UUID=”2014-02-13-13-08-58-00″ LABEL=”FROZEN” TYPE=”iso9660″ USAGE=”filesystem”
    root@baldur:~# dd if=/dev/sr0 of=dvd.iso bs=514k count=1
    1+0 Datensätze ein
    1+0 Datensätze aus
    526336 Bytes (526 kB) kopiert, 1,38484 s, 380 kB/s
    root@baldur:~# blkid -p dvd.iso
    dvd.iso: UUID=”2014-02-13-13-08-58-00″ LABEL=”FROZEN” TYPE=”udf” USAGE=”filesystem”

    As you can see, when reading raw 514kB of the DVDs which do not return ID_FS_LABEL under Debian, one can get label and type from this block. So, a solution could be to replace the grep for ID_FS_LABEL from udevadm with above snippet.

  13. G’day mate.
    Having a little problem with the final copy.
    Ive set the armpath to /armtemp/ and rawpath to /raw/ as I wanted to keep all the “working” files local, then media_dir is the mounted samba share from my actual media (plex) server.
    I seem to send up with a properly named folder in /armtemp/ but thats it. The first DVD I tried was American Beauty (hey, im starting a whole collection alphabetically) the folder /armtemp/American Beauty/ has three random mkv files in it.

  14. Sure, they are installed in the latest version from backports repository. But as I’ve said, the libdvdcss2 seems to be needed only if you want to play a DVD in a movie player on desktop. “Native” access on the shell bypasses this library so it does not seem to be needed.
    When there is little time, I’ll try this approach and if makemkv can handle these DVDs now, when your scripts are able to detect the correct content type.

    1. Sounds good, let me know what happens. If it doesn’t we can look into adding the blkid for Debian (if you would like feel free and make the change and do a pull request and I’ll merge it in–I’d just want some logic in there to check to make sure the OS is debian or a flag to enable blkid identification method).

  15. I assume you just want the last ‘bit’?
    x264 [info]: Weighted P-Frames: Y:2.7% UV:0.9%
    x264 [info]: ref P L0: 62.1% 12.1% 18.1% 7.5% 0.2%
    x264 [info]: ref B L0: 84.4% 13.8% 1.8%
    x264 [info]: ref B L1: 94.9% 5.1%
    x264 [info]: kb/s:1054.98
    [02:00:25] ac3-decoder done: 0 frames, 0 decoder errors, 0 drops
    [02:00:25] ac3-decoder done: 0 frames, 0 decoder errors, 0 drops
    [02:00:25] mux: track 0, 252948 frames, 1334155422 bytes, 1054.88 kbps, fifo 4096
    [02:00:25] mux: track 1, 474279 frames, 202596954 bytes, 160.19 kbps, fifo 8192
    [02:00:25] mux: track 2, 316187 frames, 485663232 bytes, 384.00 kbps, fifo 4096
    [02:00:25] libhb: work result = 0

    Encode done!
    HandBrake has exited.
    Nothing here…
    STAT: AMERICAN_GANGSTER transcoded in 5 hours, 32 minutes and 14 seconds.
    Pushbullet notifications not enabled
    IFTTT notifications not enabled

    I’ve uploaded the full log here: http://dsotp.net/misc/americangansta.txt
    The thing that did occur to me was perhaps Plex’s scanner killed the copy? Although I can copy manually,
    cp American\ Gangster\ \(2008\)/ /mnt/media/American\ Gangsta\ \(2008\)/ -r
    But a ‘regular’ user and Sudo can copy/write to the network drive fine.
    Is having /armtemp/%movie title%/Random file name.mkv, Random file name.mkv, Random file name.mkv correct?

  16. Also, now that I’ve finally had a chance to look at the files – Random file name.mkv and Random file name.mkv (which are actually title00.mkv and title01.mkv) are just two copies of the file, one twice the size of the other)

    1. I think it’s working properly. It will drop files named {title}{nn}.mkv file in a folder, the individual files will be named the title name found on the disk (which is often just “title”) plus the ripped track number, and the folder is named the “video title (year)” if it can determine the title and year, otherwise it will be named the label on the disc which may or may not resemble the name of the video. What I will usually do is create an “Extras” sub-folder for the movie and move all the bonus tracks in there.

  17. Ahh – ok, so it doesnt seem to be making the Extras folder. I noticed with American Gangsta, it had two copies on the ‘Making of’ as title01 and title 02.
    I wonder if the script could be amended to rename the main feature file?

    1. Is “DVD_VIDEO” the name of the folder it put the Titles in? If so yes. If getmovietitle.py can’t get a match then it grabs the label off the DVD. Sometimes the label on the DVD resembles the name of the video, sometimes it’s something generic or random. The movie industry has very little, if any consistency in how they label discs which is why we went to the getmovietitle.py method.

    1. Hi, Cliff. Make two abcde config files, say /root/.abcde.mp3.conf and /root/.abcde.flac.conf and set the OUTPUTTYPE in each file to mp3 and flac respectively. Then on identify.sh find this line:

      abcde -d “$DEVNAME”

      And change it to:

      abcde -d “$DEVNAME” -c /root/.abcde.mp3.conf
      abcde -d “$DEVNAME” -c /root/.abcde.flac.conf

  18. Hi Reinhard, gute Arbeit! I also run a OMV, mine is still version 2.2.13 based on kernel 3.16. I would think about upgrading my OMV if it is confirmed that the automatic ripping machine works with it. I would also be interested in how to run a virtual machine on the OMV. On my other PCs (and Mac) I run Lubuntu.

  19. @Benjamin (bvrulze) I think I’ll implement another solution. I’m going to use Docker for some add-ons for OMV (VirtualBox consumes too much ressources in my opinion) and with Docker it’s also able to use Ubuntu as “client” OS in Docker container. It’s a hard way to get ARM running in this environment and I think I’ve got a first solution (without working email notification), but I’m still not happy and working on it.

  20. Hey Reinhard, I also had this solution in mind and successfully installed the docker GUI and “pulled” a handbrake-cli image for usage with docker. But I have no idea how to use this since I have no experience with docker. Ryecoaaron from the OMV forum told me that docker is more for “running services” and he uses handbrake inside a VM (http://forum.openmediavault.org/index.php/Thread/12552-Is-it-possible-to-install-handbrake-cli-on-omv/).

  21. Hi, Cliff. If you pull down master (I should warn you that master has had a lot of changes recently and has not been fully tested so it may be a bit buggy, we’re hoping to get a few more features in and have it fully tested for a stable release in the next month or two) we’ve added an “HB_ARGS” parameter to the config file so you can put in your own HandBrake arguments, I’m not sure what needs to be put in but maybe this thread would help https://www.reddit.com/r/techsupport/comments/14wa9h/handbrake_experts_cli_question/ (perhaps “-a 3 2 1” ?)

    The problem is I don’t know if the 5.1 audio track is always the 3rd track. I only have a mono-speaker (stereo and surround give me a headache) so it’s not something I even thought about, but if we need to make code changes I’m all for getting that feature in as I’m sure most people would want that ability.

    If this doesn’t work we can take a look at what Don Melton is doing, or even add an option to call his scripts for transcoding, I’m not sure if he’s using HB or something else for transcoding.

    Ben

  22. Thanks for the reply Ben. I looked at this information before I wrote on this page and asked this question. I came to same conclusion that I am not sure it’s always the 3rd track. I am not too good with the scripts but early on I was calling his scripts with your scripts. But updating your scripts and his was a headache to keep them working. i like your scripts but his are pretty advanced and calls for surround as the first audio track. Thanks for the help.

  23. Firstly, awesome guide and kudos to all of the work you’ve put in. I tried the install this evening. Everything seemingly went well with the install, however, I’ve put in two separate DVDs and got the same error shortly after putting the disc in the drive: ‘Scsi error – MEDIUM ERROR:UNRECOVERED READ ERROR’. I have this running on an Ubuntu 16.04 virtualbox on a Windows 10 host. I can run MakeMKV on the same disc with no issues on the host and extract the entire movie.

    Any idea what might be going on here? The discs are not scratched and play just fine in various players. Thanks for any assistance.

    1. Hi, Brad. The ARM is now using HandBrake instead of MakeMKVs to rip DVDs (MakeMKV is still used for BluRays), can you see if trying to rip it manually using HandBrakeCLI produces any errors? Also, can post your config file and the output log (under /opt/arm/log?)

  24. Ben, If the script is altered to RIP first using MakeMKV and then convert the existing file, you can solve this because you can use MakeMKV’s profile to select the audio desired, ie 5.1 or 2.0 or combination of both…

  25. Now I love this as I have a big music and dvd/bluray library I would like to digitize and will definitely try this out especially if I can get multi drives to work.

    I would love to see the reverse as an option, if I had an ISO I could burn it using multi burners, as I do filming for schools and have to produce 50+ DVDs at times of the year and it could same me a huge amount of time burning 5 at a time and being able to utilize the same system for ripping and burning would save me a bunch of cash as well

    1. Auto-burning is a completely separate type of process so I wouldn’t add it to the auto-ripping machine, but it should be much simpler, you would probably just need to figure out what the command line is to burn an ISO and write a script to check a folder and if an ISO is present, burn it for each new disk that’s inserted.

    1. Requirements should be very minimal if you’re not transcoding. You probably want a x86 or x64 CPU, even an old one should work, and 1GB memory (512 might work). You technically should be able to transcode on older hardware, it would just take a long time.

    1. Should just be a matter of customizing HB_ARGS in your /opt/arm/config file.

      Here is what mine looks like which brings in subtities from every language, but makes the default subtitle track the one in my native language only when people are speaking a foreign language, and all English audio tracks (my wife likes to watch the directors cuts), you can probably just use what I have below and remove “–audio-lang-list eng” to pull in all languages.

      HB_ARGS=”–native-language eng –subtitle scan,1,2,3,4,5,6,7,8,9,10 –subtitle-default=1 –subtitle-forced=1 –audio-lang-list eng –all-audio”

      Also, see: https://handbrake.fr/docs/en/latest/cli/cli-guide.html

  26. Thank you so much for the reply. I was not sure where to start looking, if it was MakeMKV or Handbrake that i needed to adjust. One last question, Is there a easier way to handle TV shows? When they get ripped they just get placed in the movies folder and then I have to watch the first video in the folder and compare that to the DVDs to be sure they are labeled correctly. The raw folder sometimes keeps the disk number and season number. Sorry for the questions I’m not a programmer but I have tied looking at the code but its over my head.

    1. You’re welcome. TV Shows are pretty much impossible to handle automatically. Sometimes as you saw the disc has properly labled season and episodes but it’s not consistent, sometimes even different dics in the the same TV show won’t be consistent with each other in their naming conventions, then you might also have to deal with pilot episodes, sometimes the episodes are in a different order than airdate. So for now TV Shows have to be handled manually. I use http://www.filebot.net/ which makes naming TV episodes pretty easy. @muckngind4 on Github has spent quite a bit of research on this and is working on some changes to make the TV Workflow a little easier but it’s not going to be fully automatic.

  27. So, I tried this over the weekend and it seemed to fail, I don’t know if it was something I did or didn’t do.

    Does this need to run on a Server OS of Ubuntu or can it run on the desktop version ?
    Is there any way of seeing if it is working, I couldn’t see any files being generated or log files
    I tried both CD and DVD and I could see the files in Mnt folder but nothing was generated elsewhere that I could see

    1. From my experience, using a desktop install of Ubuntu seams to causing problems with detecting the disk being inserted. What you can do is run Virtual Box and then passthrough on the drives and install Ubuntu server 16.04.

      1. So Ive managed to get the ARM to work and it rips my DVD/music fine to the default folder /mnt/media… I tried to change the path in the config file but it says I don’t have permission to save it, I followed the instructions perfectly but I can’t change any of the file permissions or files in /opt or /mnt/media

  28. How can I see what’s in the trans coding queue? it seems to have one stuck in there as all new disks log files end with “sending to trans coding queue” or something similar. Worked great for about 5-6 disks and then the boy (17) tried putting in like 2 or 3 disks that he wants to use that have been scratched to high heaven. Since then new disks will RIP but not transcode or move to final storage location

    1. Hi, Craig. The ARM uses the “batch” command to queue up transcoding, you can use “atq” to view the transcode queue or ps aux and grep for Handbrake process. According to the batch man page it will hold off on running a new transcode job until the system load average drops below 1.5, I did it this way to prevent too many transcode jobs from running at the same time, it could be that you have a long running transcode process (some videos can take a long time on slower hardware…I’m not sure if a scratched disk would cause it to go slower but it could I suppose), or something else is putting load on the server to keep the average above 1.5 which would prevent any new transcode jobs from executing.

      You can use atrm [job number] to remove jobs from the queue or you may need to kill the video_transcode.sh script. If all else fails a reboot should clear it.

  29. As always thanks so much for your quick replies … I think it’s because I am doing too much with low end hw lol (It’s more fun to blame the teen) hopefully last question, I have a few in the raw folder that did not transcode (still shows sent to transcoding in the log) but atq returns nothing. (I did have 4 that completed over night) Would it be easier to delete them or is there a script/command I can just kick off to put them back in the queue?

    Again, you have been amazing for support on this. I’m fairly technical but new to linux (even though most of my stuff at home now runs on linux)

  30. disregard .. forgot to sudo atq the system is just slow (hardware issue) I need to see if I can beef it up or put on a different machine. Thanks again

    1. You’re welcome, glad you enjoy it! So it’s working through the queue very slowly? You could try changing the HB_PRESET in the config from “High Profile” to “Normal” and that should speed up transcoding a little. The quality will be slightly less but you probably won’t even notice.

  31. This worked great on my ESXi host but I would like to give it a try on my Proxmox server. Has anybody here been able to get it to work in a VM or Container under Proxmox?

    1. It should work, make sure you’re putting it in /root/.MakeMKV/settings.conf and not update.conf, also app_Key is case sensitive, and there must be quotes around the key.

      I ended up purchasing a key so I don’t have to pop it in every time it expires.

      Ben

  32. Thanks, this is awesome.

    A couple thoughts:

    1. I find ‘watch ls -al /media//arm/raw/*’ useful for tracking makemkv progress
    2. It might be fun to try and modify this with a hardware transcoding option via ffmpeg. Now to find some time for fun…If I ever do, I’ll let you know
    3. staxrip looks cool except for that pesky .net

    Thanks again for your awesome work on this.

    1. If you do get ffmpeg working we can add it as a transcoding option. Handbrake does make it easy to do some neat things like only transcode only audio tracks in native language, get all the subtitles but only make the forced subtitle the default, identify the main feature of a movie, etc.

  33. I just realized it runs on .net, so that kinda kills that idea. But maybe there would be useful tech there.

    1. .NETis a possibility with .NET Core being open sourced. But it would add another language dependency to the ARM.

      It looks like Handbrake supports some HW acceleration such as Intel QuickSync (might need a Skylake CPU) that the staxrip project takes advantage of… https://handbrake.fr/news.php?article=37 One thing I have read in various forums is that while hardware accelerated encoding is faster, the quality isn’t quite as good. Probably not noticeable but something to consider.

  34. I can’t tell a difference when Plex does it, except of course for the efficiency.

    I’ll have to look into handbrake hardware acceleration. My Google skills did not net me the link you found, so I didn’t think it was possible.

  35. Thanks. Old instructions I found had me putting .MakeMKV/settings in my home directory. Once I put it in root it worked fine.

  36. Anyone having problems with hard drive space being eaten up? I am on Ubuntu 14.4 and my drive is down to 13gb from 120gb. My saved movies are going to an external drive. I cleaned all my apt-get clean, autoclean and autoremove.

  37. I have noticed my BD backups aren’t being deleted when I use mainfeature. Check your raw folder for files that may not have been deleted.

    I think cleanup isn’t working right if you do mainfeature with BluRay right now. I am working an a 3D MVC support pull request (if Ben will have it), and I noticed that the script is using rmdir, but not deleting the individual files first. rmdir can’t delete a non-empty folder, so we should probably use rm -rf here.

    A question for Ben: What is the reason for the “backup” restriction for BD main feature?

    Based on my usage of the Handbrake GUI, I have always been able to do with with an mkv. Based on this, I modified the scripts to allow it and it seems to be working fine. The reason it matters is for 3D support, where I want to rip 3D including the MVC channel, transcode from that mkv for 2D and remote playback, and then keep the mkv file for 3D playback via Kodi on Raspberri Pi.

    So far, it all seems to be working, I just want to test a bit more before doing a pull request.

    1. Yep, I’d be happy to accept that PR Marty as long as my 2D rips keep working. |:-) Also if you don’t mind fixing the rmdir while you’re there that would be great. I don’t actually use mainfeature myself since my wife likes to have all the extra tracks. I didn’t write that part, but I thought the reason for the backup restriction on main feature is because Handbrake is being used to identify the main feature and it doesn’t know how to do it with MKVs. Is that not the case? If you want to ask the question on a GitHub issue and mention @muckngrind4 he might be able to respond with a better answer since he wrote that part.

  38. I’ve already fixed the cleanup code in my scripts, so I’ll include that in the PR.

    I’m guessing the restriction is historical, like perhaps Handbrake didn’t used to be able to do it. It definitely seems to be working now.

  39. Is there a way to make this a simple install script? I need to run it from a LiveUSB as when installing the OS on the PC I want use it will not see all my CD drives due to the SATA card I have in there using the LiveUSB sees them all and works fine. any ideas ?

  40. Sorry for the lack of pull requests. I ran into a couple minor things I want to clean up, but I’ve been very busy at work. Hopefully I’ll find some time soon.

    On a side note, the ‘-e qsv_h264’ option did not cause HandBrakeCLI to choke at the very least. Everything I read online says it is a Windows only option, so I’m somewhat expecting that it is mapping over to the standard h264 option in linux, but I’ll examine transcode times and logs to verify.

    I’m curious, what sort of transcode times are you generally getting for a DVD?

  41. Hello,

    I know that this is an old(er) post but I am having trouble with the notification section… I’ve tried both the IFTTT and Pushbullet keys but I’m not being notified of anything. Any help will be greatly appreciated.

  42. Hello,
    how can I change the audio language, cause while ripping after the coppy process, he removes all the different languages, and I will keep them.

    thank you

    BR
    Bernd

Leave a Reply