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 its 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

Automatic Ripping Machine Features

  • Determines if disc is Video, Data, or Audio
    • If video get the Title
    • Determine if it’s a TV or Movie
    • Rip using MakeMKV
    • Send rip to Handbrake and eject disc asynchronously
    • When done transcoding tell Emby to rescan library, or send notifications using PushBullet or IFTT
  • If audio CD – rip to mp3 or flac using abcde and eject
  • If data disc make an ISO backup
  • Can rip from multiple optical drives simultaneously
  • Completely headless design–no graphical interface.  The only interaction is inserting the disc and it takes it from there, ejecting it when done.
  • Can send push notifications to your phone using Pushbullet or IFTT.

Free Software

I uploaded the scripts to GitHub under the MIT license.  Since then quite a few contributors have made many improvements.  Now the ARM has been rewritten in Python and has a number of options to customize the way different people handle media.

It was originally designed for headless Ubuntu LTS, but people have gotten it to work on other distributions.

Automatic Ripping Machine (Supermicro MicroServer) under my desk

ARM Equipment & Hardware

Blu-Ray Hardware and VMware Settings

A WARNING ABOUT SOME BLU-RAY DRIVES

Most Blu-Ray drives have an anti-feature called “riplock” where it will purposefully cripple the read-speed on DVDs and Blu-Rays to around 2X to 4X instead of the advertised drive speed (I believe this to be false advertising).  If you have a normal 5 1/4″ drive bay I suggest getting the LG WH16NS40 16X blu-ray drive since it is known to not be speed limited.  LG seems to be one of the better drive manufacturers in my experience.

You will need a server.  You can use Ubuntu on bare metal or run it under VMware (some have gotten it to work under Proxmox).   I am using my Datacenter in a Box Build and run the ARM on Ubuntu Linux 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.  Unfortunately my server case only has a slim-DVD slot on it so I’m using an LG BT30N (these can be found on eBay).

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:

sudo apt-get install regionset
sudo regionset /dev/sr0

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

Please follow the instructions in the README.md file in the GitHub repository.

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 TrueNAS I created a media folder on my data share at \\truenas\data\media

sudo apt-get install cifs-utils

Edit /etc/fstab

\\truenas\data\media /mnt/media cifs rw,user,auto,suid,username=your_cifs_username,password=your_cifs_password 0 0

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

sudo mkdir /mnt/media
sudo mount /mnt/media
sudo mkdir -p /mnt/media/ARM/raw

Configure ARM Settings

Configuring ARM is not for the faint of heart. You probably should know Linux really well… and the distros keep changing things around so use the recommended distributions and versions in the README file.

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

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

How to use the Automatic Ripping Machine

  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 logs. 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 ended up purchasing a license key for myself.

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:

app_Key = "whatever_the_latest_key_is"

Get an OMDB API Key

Next you’ll want to get an OMDB API key and put it in your ARM config file.  A free key will let you do 1,000 API queries a day which should be more than enough: http://www.omdbapi.com/apikey.aspx

How it Works?

When UDEV/systemd detects a disc insert 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):

udevadm info -q env -n /dev/sr0

Video Discs (Blu-Ray/DVD)

For video discs the first step is ARM tries to obtain the disc title.   If it’s a blu-ray it can often be extracted from the disc, if it’s a DVD we calculate a hash of the DVD and then query Windows Media Metaservice (which is what Windows Media Player queries when a disc is inserted) to get the title.

Once the title is obtained we send that to the OMDB API which will tell us whether the video is a Movie, or a TV Show.  If the video is a Movie ARM can usually determine the main title feature, and rip that.  And optionally rip all the other titles into an Extras folder.  Once done ARM can automatically tell Emby to rescan the library.  If the video is a TV Show ARM will rip all the titles and you’ll need to use Filebot to rename the shows.

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

Most of the time everything just works, but in some cases if ARM can’t determine the title some video file renaming 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 (or mp3 or whatever you want) 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 ARM determines there is no video on the disc, then a simple script is run to make a backup ISO image of the disc.

Screenshot of TurboTax ISO file

What about the stuff that fails?

So, I built the ARM with the 80/20 rule in mind.  My goal was it to automate 90% of my rips.  There are always oddball discs that don’t quite work right or need to be handled manually.  Here’s a good article with a comparison of ripping software by the TheSweetBits that will do that job.

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.

Pirate vs Customer Experience

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

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

    • 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.

      Reply
  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…

    Reply
    • 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…

      Reply
      • 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!

        Reply
        • 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…

          Reply
          • 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.

    Reply
    • 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.

      Reply
    • 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.

      Reply
  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.

    Reply
  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?

    Reply
    • 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.

      Reply
  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

    Reply
  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.

    Reply
  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

    Reply
  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)?

    Reply
    • 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.

      Reply
  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…

    Reply
    • 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.

      Reply
  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?

    Reply
    • 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

      Reply
  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.

    Reply
  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.

    Reply
  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.

    Reply
  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.

    Reply
    • 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).

      Reply
  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?

    Reply
  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)

    Reply
    • 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.

      
      Frozen (2014)/
       | -- title00.mkv < -- main feature
       | -- extras/
             | -- title01.mkv
             | -- title02.mkv
      
      
      Reply
  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?

    Reply
    • 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.

      Reply
    • 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

      Reply
  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.

    Reply
  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.

    Reply
  20. 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

    Reply
  21. 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.

    Reply
  22. 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.

    Reply
    • 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?)

      Reply
  23. 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…

    Reply
  24. 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

    Reply
    • 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.

      Reply
    • 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.

      Reply
    • 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

      Reply
  25. 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.

    Reply
    • 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.

      Reply
  26. 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

    Reply
  27. 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

    Reply
    • 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.

      Reply
  28. 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)

    Reply
  29. 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

    Reply
    • 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.

      Reply
  30. 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?

    Reply
    • 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

      Reply
  31. 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.

    Reply
    • 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.

      Reply
    • .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.

      Reply
  32. 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.

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

    Reply
  34. 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.

    Reply
  35. 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.

    Reply
    • 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.

      Reply
  36. 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.

    Reply
  37. 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 ?

    Reply
  38. 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?

    Reply
  39. 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.

    Reply
  40. 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

    Reply
  41. First of all,

    Thank you for all your work and support.
    I’ve set this up on a fresh Ubuntu 16.04 install and am having some trouble
    Audio discs work as expected
    Both DVD and Blu-ray fail as described below:
    Files appear in /mnt/media/ARM/raw folder as expected
    These files appear to be complete
    Directories for the discs are created at mnt/media/ARM are created including extras subdirectories as applicable.
    The issue is that no files are in the directory.
    Once ‘transcoding’ is complete the directories in the /mnt/media/ARM/raw folder are removed.

    Reply
  42. Hi, Ben, and thanks for the great work to get this to where it is.

    Can you elaborate on the way that the transcode process is called and how it determines whether or not to run a job?What system load average are you leveraging, and can I adjust it?

    atq shows no information yet the media is still in the “raw” directory, and I have opted to NOT transcode files. So, they should only go through the copy/move/rename piece and I wouldn’t expect system load to impact this.

    Reply
    • Hi, Mark. It just uses batch and the default behavior is to start the process when the system load falls below 0.8. The system load shouldn’t impact not transcoding… unfortunately it’s something I don’t test for since I always transcode so it’s possible it’s not working correctly with transcoding disabled.

      Reply
  43. Line 32 in notify.sh has a typo – it says “Pusover notifications” and should be “Pushover notifications”

    Is there any documentation on how to use this feature?

    Reply
  44. I’ve run into a pretty nasty issue.

    If I use the default config and put all media under a common root directory, everything seems to move through the process very cleanly and end up where it should.

    I have updated the file paths so that there is a “staging” file tree for the rips, transcoding, and Unidentified media. But I have a different tree that’s used for media once completed and identified properly. The logs show the content being moved from the staging areas to the final location, and the -DIRECTORY- gets created, but the mkv file never appears in the destination as it should.

    How can I at least troubleshoot this?

    All storage is located on a remote server being accessed via NFS. And the actual disk is the same even though it’s being mounted through different mount points on the target server. Shares are exported with the same “rw,no_root_squash” options, and as stated – the directory gets created so it should not be a rights issue.

    Reply
      • I think I figured it out… I was NFS mounting a directory on a remote server and then was trying to access a subdirectory that was actually a different drive mounted underneath. NFS doesn’t share content from subdirectories that are mount points.

        Reply
  45. Benjamin, First off, Great work. I am using it on a dedicated server my self with a few tweaks to allow handbrake to use 2 different settings based on the disc. I do have a problem/concern that i was hoping you may have solved already. On some Blu-Rays like Gods of Egypt, The disc will have an obscene number of title tracks that are 24 or more gigs a piece. While i know the physical limit of the disc can’t be that big, studios apparently use it as a deterrent to ripping. Is there a way to only have the script rip the first largest track on the disc? Usually that is the one with the movie in it. Thanks again for cobbling this together.

    Reply
    • Hi, Louis. I like to rip all tracks so my solution is I have lots of TB of storage. But there is a feature to rip only the main feature.. something like MAIN_FEATURE=true which may help, it should be in the config. You may need to play with whether or not it uses the BACKUP_METHOD as well.

      Reply
  46. Any documentation surrounding the audio portion of this? Took me a while to figure out that the output directory is controlled by the “.abcde.config” file in the /opt/arm directory and isn’t controlled by a variable like most other things in the config file.

    I want to output mp3 but don’t know how your scripts are configured to call flac. Should I somehow update how abcde is called to get it to rip directly to mp3 files?

    I tried modifying the abcde call in identify.sh to include a “-o mp3” but it threw errors and never ran.

    Reply
  47. Hi Ben,
    I just wanted to leave you a note to say how much I appreciated your DIY. While I didn’t build a fancy dedicated server to run the ARM on I was able to re-purpose a old AMD dual core Athlon X64 machine and it runs great. I had recently replaced my wife’s desktop PC with a laptop and rather than sending this old PC to the scrap head I thought I would see if it could run the software and while it isn’t very fast at ripping DVDs (I haven’t got a Blueray reader yet), it handles the task just fine. I also installed Emby and have since converted to Emby Premier. With this setup I am able to watch my video collection on my Fire TV sticks, XBOX ONE and XBOX 360 as well as access my collection from outside of the house. I am very happy with the results and so is my family. At some point I may consider upgrading the system to a faster processor with a lot more drive capacity but for a starter ARM system this computer worked out fine. If other people are wondering about hardware I would tell them to give their old PCs a try. If it has at least a dual core processor, 4GB of RAM and several hundred gigs of drive space, you will have enough to play with.

    Reply
    • You’re welcome, Christopher. And thanks for sharing your hardware configuration. How do you like those Fire TV sticks? I don’t have a TV but I’m thinking about getting one if there’s a way it can access Emby.

      Reply
  48. The Fire sticks work great on the bedroom TVs. We watch HULU, Netflix, CBS All Access and Amaxon in addition to Emby. For the price they are a great package. I do have a question for you that relates back to ARM. I was trying to rip all of the Lord of the Rings movies and there were no problems with Fellowship and Two Towers but I got to Return of the King and though the rip worked the transcoding does not. I did some Googling and found that other folks have had the same issue and it has to do with the resulting file size coming close or exceeding 2GB (the original rip is over 7GB). It looks like there is a way to tell Handbrake to deal with this but I am not sure exactly how to do that. I was wondering if I could pass the change to the ARM config file in the line HB_ARGS=”

    Reply
  49. Hey Benjamin, really cool project right here.

    I’m working on an extension of this which involves getting a robotic arm to physically move a disk from a stack, put it in a drive, run your program, and remove it afterwards.

    I already have python scripts that work perfectly for the loading and unloading, so I’ve been messing around with the identify.sh script, calling my python scripts right after/before the disk ejects.

    I’ve run into a fairly major hurdle at this point. The script runs fine when I physically press the tray button, but it doesn’t seem to run when I want to close the disk drive from the terminal (e.g. “eject -t (drivepath)”).

    Looking closely into the log file, there does seem to be some weird behavior when I physically press the button. It seems to rip a CD successfully once, then try to rip again, not recognize the disk, and then eject.

    I’m having a bit of a hard time understanding what’s going on.

    I’ve attached the pastebin dump of a clean log of just one disk.

    https://pastebin.com/yf17VYzc

    Reply
  50. I’m still investigating the issue with the reverse eject close tray command, but I’ve realized that the script is running twice (and failing the second time) when you do one rip because the udev rule action parameter is “CHANGE” which means it triggers on the load AND also on the eject. (I believe it tries to identify the disk type when the disk has already been ejected.)

    Reply
  51. I’m really sorry for the multiple posts, but my question actually boils down to one point.

    Is it possible to run identify.sh manually on a disk drive?

    Reply
    • Hi, David. Unfortunately you can’t run identify.sh manually, it has to be run from udev so that the udev parameters are available since udev has has info about the disc that the ARM uses. This has been sort of problematic since systemd/udev is a pain to work with so We may change this behavior in the future, but currently it’s getting values that I don’t know how to get any other way.

      Are you running this on Ubuntu 16.04 LTS? There are some issues with 17.04 and 17.10. (I am planning on supporting 18.04 LTS when it comes out).

      Reply
  52. Ben,

    What values are you getting via the automatic kickoff of identify.sh that you can’t get manually? The automated routine merely launches identify.sh and does not pass any command line arguments. Running it manually should be perfectly fine, especially if you update it to take a command argument of the drive (which isn’t hard to do).

    Reply
  53. There are multiple environment variables that udev gives identify.sh so that it can identify the drive such as: $DEVNAME, $ID_CDROM_MEDIA_TRACK_COUNT_AUDIO, $ID_FS_TYPE…

    I think there are two ways I could solve this issue:

    1. Remove the udev rule and instead add a second argument to identify.sh that provides the drive path (as you mentioned). Get the aforementioned variables by reading in the output that “udevadm info -q env -n /dev/sr0” gives you.

    I’m having some difficulty with that as the output of that udevadm info command does not seem to include variables such as $ID_CDROM_MEDIA_TRACK_COUNT_AUDIO…

    2. Using udevadm trigger. This seems like it would be the cleanest solution that would require the least amount of modification to identify.sh. For some reason I’m unable to trigger identify.sh with that command, so I’m still looking into that…

    I’ll keep on grinding away at this…

    Reply
  54. David,

    If you follow the logic of the process, loading a disc causes the system to launch arm_wrapper.sh with no variables. arm_wrapper.sh launches identify.sh with a single variable (the path to the config file).

    UDEV creates an environment variable called DEVNAME when it detects that a disc has been inserted into a drive. When identify.sh is called, it is able to pick up this variable and use it in the udevadm command to get variables about the disc that’s in the drive.

    If you run udevadm monitor –property –udev and then insert various discs, you’ll see the attributes that it picks up when they are loaded in.

    I wouldn’t be concerned about not getting any information in the $ID_CDROM_MEDIA_TRACK_COUNT_AUDIO variable unless you’ve actually inserted a music disc.

    As far as modifying the identify.sh script, all that needs to be done is to detect whether the command line variable is a path to the config file or a device name. This can be simplified to look for a SPECIAL first command line variable (like “manual”) and then read in the value of a SECOND command line variable as the path to device to use.

    Reply
  55. Hey

    This all works very well for me. Mainly ripping dvds.
    Congrats on such a nice little project.
    Runs really well in ESXi

    One thing I would like to change is preset. I previously had created a custom preset when i was ripping and i discovered that you cant import this as such but can only load it from the handbrake cli. see –preset-import-file

    Anyway I cheated a bit by simply using the default “High Profile” profile and then changing the HB_ARGS to modify the generated file to include my updated x264 settings, all audio in it’s native codec such as ac3 or dts etc. and all english subs etc. This works well as i think this gets processed last so it overwrites the values from the profile. I have verified this with mediainfo

    The issue is that the built in profiles also adds a default aac track which i would like to exclude and cannot figure out a way to do this. ie. when i overwrite settings it works well but the aac track is an addition from the High Profile and there isn’t a way to say “actually don’t add that crappy aac track”

    If you knew of a way to load a custom profile from within your scripts that would solve it for me.

    Otherwise perhaps you have a good idea for me to try.

    TIA

    Reply
  56. I dug a little more and basically removed the profile from the equation entirely by editing the video_transcode.sh script.

    Still have some issues to iron out but basically it means I am using a custom command line in lieu of generic profiles.

    I will update if anyone is interested once i get some more time to sort it out

    Reply
  57. One last reply.

    I think i sorted it out, the audio issues were related to a typo.

    Thanks again for the great scripts. Time to get busy converting all of the children’s dvds and import them into plex

    Reply
  58. Thanks, I think I’m starting to understand the architecture a bit better.

    I originally thought that ALL udev variables came from the environment variables that were first passed in by the udev rule kicking in when a drive is loaded.

    To be clear, you are saying that the drive path DEVNAME is the only environment variable that is being used, and the rest of the disk info is caught on line 39 of identify.sh: ” udevadm info -q env -n “$DEVNAME” >> “$LOG” ” (I originally thought this line was only used to print disk info to the log for debugging purposes)

    To make this work, I would simply need to specify a DEVNAME variable for identify.sh.

    I’m not sure I understand your last two sentences. Can’t I just add a second variable and call it using $2 considering the config path is called using $1?

    Reply
  59. David,

    In thinking about this more, I think the solution is somewhere in between what you’re thinking and what I was thinking…

    Check for the existence of a second command line variable and use it as the device to run against. The first command line variable should probably always be the location of the config file since there are things in there that need to be used even when run manually.

    Since the script is run using bash, you can use:

    if [ $# -eq 2 ]; then
    CONFIG = $1
    DEVICE = $2
    fi

    This will set the variables as needed based on there being two command-line variables.

    Reply
  60. Oh ok, I see, your solution keeps the original udev rule functionality. I was just going to eliminate that. I’ll work on it tomorrow and see where I get to.

    Reply
  61. It might be useful to be able to “turn the automated piece on and off”, too. For example: When doing a bulk import of media, most items should rip correctly. An odd disc here or there might need to be run manually with different settings. In this scenario, it might be nice to have a CONFIG setting that turns the automation completely off, or possibly off for a specific device. That would allow you to use it in an automated fashion -OR- a manual fashion, depending on your needs.

    There are a number of other config settings that should probably be added to the main config file as well – either a direct pointer to the abcde config file, or parameters that can be used to -generate- an abcde config file for use by the ripping machine. It took me quite a while to make my way through the various different pieces to get to where I could modify the abcde config file so that it would rip MP3 and not FLAC.

    Reply
  62. Hey Mark,

    Really sorry for not getting back to this sooner. A ton of stuff came up during the last two weeks which stopped me from working on this.

    I did follow the advice above (except I just added an else statement where it assigned Config to the first command line variable), but I’m still running into an issue.

    I get one error at the elif line at around 117 (when it identifies audio and lauches abcde:

    line 117: ((: > 0 : syntax error: operand expected (error token is “> 0 “)

    It seems like the variable $ID_CDROM_MEDIA_TRACK_COUNT_AUDIO doesn’t exist. To do a test, right after the udevadm info line, I make it echo the aforementioned variable into the log and a blank line showed up.

    If I run udevadm info -q env -n /dev/sr0 I do indeed get a non zero value for the above variable

    I believe udevadm info is sending the disk info to the log, but it’s not giving identify.sh access to that same exact disk info.

    How would I go about getting identify.sh to parse what udevadm info -q env -n /dev/sr0 throws out? A combination of cat and something else? I’m a bit out of my league in terms of bash coding…

    Reply
    • David,

      Have you tried running the udevadm command within the script and using the “-x” flag to export the variable information to the shell?

      Reply
  63. Ok I have a question:

    I wanted to use this BUT I don’t want makemkv to rip EVERY track with most discs. Specifically I wanted to have it ignore any track that is 50% bigger than another track that meets my min length requirements.

    SO, I wrote my own scripts but I seriously don’t understand how your udev rule tells your script WHICH dvd drive is being loaded…can you explain how that gets into the bash script logic?

    Reply
    • Hi, techpilot. The $DEVNAME environment variable is set by UDEV and it contains the optical drive, also not sure if it’s exactly what you want but you can set MAIN_FEATURE=true and it will only rip the main feature of a movie.

      Reply
  64. I turned off the UDEV rule on my machine, and put `udevadm info -q env -n /dev/sr0 -x` in the beginning of the notify.sh and it ran fine. So, the “-x” piece would seemingly be the piece you need so that the results of the udevadm command will set environment variables.

    Reply
  65. The block command is surrounded by backticks in the script – they don’t show up when you insert them into a post.

    Reply
  66. Are there any better ways to identify movie titles? The python script is terrible and most movies get named incorrectly. This puts me in a position of having to do a LOT of manual work to rename folders and files before placing them in my Plex system.

    Specifically, the python script (which queries Windows Media, seemingly an undocumented database) gets the year of release wrong almost all the time.

    Reply
    • Hi, Mark. I wish… there really isn’t anything like the CDDB database for movies that I’ve found, the only thing I’ve come across is for blue-rays you can get it off an XML file on the disk, and for DVDs I don’t know of any way other than the Windows Media API. One thing that may cause the issue you’re having with the year is the release year of the movie is sometimes a year ahead of the DVD. I don’t know if there’s a way to truly make it automatic… either someone needs to step up and make a CDDB like service for movies (which is less likely to be successful because you don’t have a large number of people ripping movies like you did with CDs) or make some sort of interface where the ARM gives you the top 5 matches.

      Also, the OMDB API which the python script relies on has not been accepting queries without a paid key lately so that may be part of the problem. When it’s accepting free queries I get about a 90% success rate, but there are still a few movies I have to rename manually.

      If you do have some better ideas or find a better way to get a match let me know and I’ll try to incorporate them.

      Ben

      Reply
      • Thanks for the response, Ben.

        TMDB is a pretty good online database for movies, but the problem is more one of being able to get data from the DVD itself to use in a query. As you mentioned, BluRay discs have some information buried in a text file that can be extracted – regular DVD’s do not. Disc titles are not always useful, either. As an example, The Terminator, Special Edition has a disc title of something like TERMSE. I had another disc with a title of PI30NNW1. Good Day For It is titled GDFI_DVD. Plenty of not-terribly-helpful titles out there. :)

        Filebot can already leverage TMDB to attempt to get and use the correct naming of a movie. I wonder if there’s a way to just let Filebot do the work?

        Reply
  67. Ben,

    I am running in to a problem with your Identify script. For some reason, it doesn’t mount the Blu-Ray drive to mnt like your script looks for, I have 2 drives (sr0,sr1) everything else is able to see the drives but since the identify script doesn’t work, the movies keep getting dropped in the unidentified folder.i have included the email output that root gets from the script and the identify portion of the log. I did add the -x to udevadm as suggested in a earlier comment. Let me know if there is another script I should be looking at to resolve this. I am also running Ubuntu 16.04 with the latest patches as of this post. Thanks in advance.

    /opt/arm/config
    /opt/arm/identify.sh: line 109: ((: > 0 : syntax error: operand expected (error token is “> 0 “)

    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=’/dev/disk/by-path/pci-0000:00:12.2-usb-0:1:1.0-scsi-0:0:0:0 /dev/dvdrw /dev/disk/by-uuid/8D332D2ED82ED803 /dev/disk/by-id/usb-HL-DT-ST_BD-RE_WH16NS40_0000000000006417-0:0 /dev/disk/by-label/THE_FORCE_AWAKENS /dev/cdrw’
    DEVNAME=’/dev/sr1′
    DEVPATH=’/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.0/host7/target7:0:0/7:0:0:0/block/sr1′
    DEVTYPE=’disk’
    ID_BUS=’usb’
    ID_CDROM=’1′
    ID_CDROM_BD=’1′
    ID_CDROM_BD_R=’1′
    ID_CDROM_BD_RE=’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_BD=’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_12_2-usb-0_1_1_0-scsi-0_0_0_0′
    ID_FS_LABEL=’THE_FORCE_AWAKENS’
    ID_FS_LABEL_ENC=’THE_FORCE_AWAKENS’
    ID_FS_TYPE=’udf’
    ID_FS_USAGE=’filesystem’
    ID_FS_UUID=’8D332D2ED82ED803′
    ID_FS_UUID_ENC=’8D332D2ED82ED803′
    ID_INSTANCE=’0:0′
    ID_MODEL=’BD-RE_WH16NS40′
    ID_MODEL_ENC=’BD-RE\x20\x20WH16NS40\x20′
    ID_MODEL_ID=’5678′
    ID_PATH=’pci-0000:00:12.2-usb-0:1:1.0-scsi-0:0:0:0′
    ID_PATH_TAG=’pci-0000_00_12_2-usb-0_1_1_0-scsi-0_0_0_0′
    ID_REVISION=’1.00′
    ID_SERIAL=’HL-DT-ST_BD-RE_WH16NS40_0000000000006417-0:0′
    ID_SERIAL_SHORT=’0000000000006417′
    ID_TYPE=’cd’
    ID_USB_DRIVER=’usb-storage’
    ID_USB_INTERFACES=’:080250:’
    ID_USB_INTERFACE_NUM=’00’
    ID_VENDOR=’HL-DT-ST’
    ID_VENDOR_ENC=’HL-DT-ST’
    ID_VENDOR_ID=’1234′
    MAJOR=’11’
    MINOR=’1′
    SUBSYSTEM=’block’
    TAGS=’:systemd:seat:uaccess:’
    USEC_INITIALIZED=’100461620′
    /dev/sr1
    identified udf
    found THE_FORCE_AWAKENS on /dev/sr1
    identified udf as video
    Obtained Title The Force Awakens (2016)
    got to here
    HAS_NICE_TITLE is true
    video title is now The Force Awakens (2016)
    video type is fail
    Video Title is The Force Awakens (2016)

    Reply
    • Hi, Louis, there’s a discussion of this on GitHub, the OMDb API is no longer free (now costs $1/month), and that’s what the ARM was relying on to identify whether the video was a movie or TV show …when that fails it drops it into unidentified.

      Reply
      • Basically, ARM drops everything into Unidentified now. I have written a “handling” script that leverages Filebot to rename the media files correctly and then move them into my Plex media directories so the media server sees them. What I’ve found with Filebot is that the filename of the media itself is important for matching. The more words in the title you have in the filename, the better it matches on the first try.

        My script leverages the name of the directory that the files are dropped into to rename the file itself, then Filebot attempts to identify the file based on its name. I was previously getting about a 50/50 split with accurate matches. I now get closer to about 90/10. And I’ve coded in a “Repair” option that allows me to manually override the directory and filename directly, even after it has been migrated into a holding directory. That way, I can look the movie up myself and give it the correct naming so that Plex will import it correctly.

        Reply
          • I’d be happy to, once it’s complete and commented appropriately. I’m still tuning it, and will be making more changes so that it will work for more folks (I use a promotion model to go from Unidentified -> Renamed -> Approved -> Imported).

  68. Ben,

    Let me know if you can’t decrypt this. I don’t want to post in clear text because I want you to tinker and test before possibly making it part of your git repository.

    If you think it’s good to go after testing on your system, feel free to add it in.

    —–BEGIN PGP MESSAGE—–
    Version: BCPG C# v1.6.1.0

    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
    =UIEq
    —–END PGP MESSAGE—–

    Reply
  69. I encounter the exact same problem as Reinhard. It seems indeed to be the case that protected DVDs cannot be read on headless Debian Jessie systems. There is also an unsolved question on SuperUser. I will try to implement Reinhard’s solution and see how it goes.

    Reply
  70. HELP! Complete newbie fumbling his way through his first vm and first linux experience. I’m going on two weeks, and I think I am really close!

    I would like to use a custom HandBrake preset for H.265 that I setup in the GUI (ghb). I have exported to a .json file. How do I get A.R.M. to use this custom setting? The files rip with MKV just fine, and if I use the standard config file, they will transcode to H.264…but I want H.265 with a quality of 18 and HandBrake does not appear to have a preset for that.

    When I run HandBrakeCLI -z, the custom preset is not listed. I have tried modifying line 91 of the video_transcode.sh, replacing “–preset..” with –preset-import-file “~/.config/ghb/TechSpot_DVD.json” -i…” I received an error that -i was missing (it wasn’t)

    I also tried modifying the config file settingfrom: HANDBRAKE_CLI=HandBrakeCLI to: HandBrakeCLI –preset-import-file “~/.config/ghb/TechSpot_DVD.json” and I tried changing from: HB_PRESET=”High Profile” to: HB_PRESET=”TechSpot_DVD”, I always get an error in the log that it can’t find TechSpot_DVD.

    In both of the above cases, I tried –preset-import-file and –preset-import-gui. Neither worked. I also tried with “~” and with “/home/ubuntu/…” None of those worked, either.

    Can this be done? Do I need to place the .json file in a different folder? Is there a different file I need to modify (ex: some HandBrake file so with the .json text)?

    Below is a snippet of the log file:
    Encode done!
    HandBrake has exited.
    Transcoding file title01.mkv
    [20:22:05] hb_init: starting libhb thread
    [20:22:05] thread 7f49e9e51700 started (“libhb”)
    Preset import failed, file (“home/ubunto/.config/ghb/TechSpot_DVD.json”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected

    Please help! I think I am sooooo close! :)

    Reply
    • Larry,

      The proper way to invoke what you’re asking using purely HandBrakeCLI would be to have:

      [code]–preset-import-file=”/path/to/preset.json” –preset=”My preset”[/code]

      on the command line. So, try setting the profile to the name of your custom preset and then pass the [code]–preset-import-file=”/path/to/preset.json”[/code] portion as an additional command-line argument from the config file.

      Reply
  71. I am having a tough time getting all of this to work. It may be my hardware setup. I have 3 internal DVD and 1 external BD. When I drop 4 discs in, folders are created and most of the time the logs say the movie has been sent to the transcode quue. Randomly, one of the movies may get transcoded. Most of the time, nothing – especially blu ray. Is there a way to see the HB queue? Please be specific on HOWTO – I’m a*NIX newbie LOL. Any other ideas? Thank you!

    Reply
    • Larry,

      Check your “CONFIG” file and see if you have SKIP_TRANSCODE set to “TRUE”. You should also look at the setting for MAINFEATURE as setting this to TRUE will skip transcoding on all but one file (when it does transcode).

      Reply
  72. Thank you for the quick reply, Mark!

    I tried a fresh config file and a fresh video_transcode.sh. This did not help. I all four combinations of mkv/backup with main feature on and off. I rebooted the VM and Windows each time.

    I seem to consistently get this error in the log file of any blu ray:

    MSG:5069,128,0,”Backup failed”,”Backup failed”
    MSG:5080,516,0,”Backup failed.”,”Backup failed.”
    STAT: TRON_LEGACY ripped in 0 hours, 0 minutes and 7 seconds.
    /opt/arm/video_transcode.sh “/media/sf_ARM/ARM/MKV//Tron – Legacy (2010)_20170802_195024” “Tron – Legacy (2010)” “true” “fail” 20170802_195024
    TRON_LEGACY sent to transcoding queue…

    HandBrake does not transcode it, though.

    This is an external blu-ray. Do you think that would make a difference?

    Any ideas what the MSG’s mean?

    Thank you!

    Reply
    • Larry,

      Look further up in the log file – I suspect you’ll see an entry that says something about the Shareware features of MakeMKV being disabled because your key is no longer valid. You’ll need to update the key from the MakeMKV web site in order to get it work again. The previous key expired on Sunday.

      Reply
  73. Hello Benjamin,
    This is a great programme, is there a way to put some feedback on the screen like the bar that goes across the screen, no need to be accurate – just to indicate something is happening – such as “Ripping your DVD” and “Transcoding your DVD”?

    Reply
      • Serious question: Why?

        This is intended to be a headless (no monitor) system that requires no user intervention. I could see developing a web application for it that would allow monitoring and control from a remote device, but that’s a project in and of itself.

        Reply
        • Hello Mark,
          Thanks for the reply – I’m building a standalone media server which is accesses by web browser and one of the requirements is to rip dvds and put them into the library. (The user and I are well aware of the legal aspects of this and only legally acquired material would be ripped!)

          Reply
          • Understood.

            In my limited experience, media servers are similar in that they, too, are headless. Hence, the web access method. So, I still see no need to try and build a system to put notifications on the screen. You -COULD- (if you’re using Linux) use the console notifications to pop generic messages to the screen of things like “Starting content rip”, “Completed disc rip”, etc.

            If you’re looking for some sort of very basic progress indicator, maybe consider using something like Pushbullet which can put notifications into the Chrome browser extension. Mod the scripts (like I did) to send notifications of different things. I use Pushover notifications to send info through to my IFTTT app on my phone. When a disc is done ripping, I get a notice (good time to go change discs). When the transcoding is complete and all content has been moved to its final resting place (which is never the media library), I know that I can get my content renamed and imported.

            I don’t see that I’m X% complete on any given task or disc, but I’m ok with that as long as I know the work is getting done (and I know it’s working because I hear the drives working).

          • Thanks for the feedback, I’ll look at the Linux console notifications approach (I’m using Debian).

  74. Hi, I am happy to say: everything was finally PERFECT! And then, I ran out of disk space on my VM. I started to go through resizing and gpart, etc…but I figured building a new VM would be faster and probably cleaner.
    I am on my 2nd attempt to get this to work :( I have followed the steps, with no errors. All of the folders are there. I have not changed the config files, etc.
    When I insert any disk…nothing happens. It’s almost like udev isn’t firing. I have rebooted multiple times.
    Any ideas?
    Thank you!
    Larry

    Reply
    • Did you get it working Larry? It’s hard to say, nothing in your system logs? Can you test ripping a disk manually using MakeMKV or Handbrake manually from the command line to make sure that’s working?

      Reply
  75. Hi there!

    Great tool. I’ve installed it on a (old….) system where I run Lubuntu on. I did fit a BluRay drive inside of it. I did manage to get it working. Thanks for your effort.

    I would like to know if there is another way to get this system running on my Freenas 11 setup. I would be able to create a VM with Bhyve on Freenas 11. In this VM I would run Ubuntu 16.04 LTS. However I cannot add the BluRay drive as an device. Not sure if this question is for you or in the Freenas community.

    Reply
    • Hi, Wim. That would be really cool if you could get that to work in FreeNAS, I don’t think it’s currently possible. My guess is bhyve doesn’t have the ability to do this so I’d start there. If bhyve can do it, it should be fairly trivial to add this to the VM on the command line in FreeNAS, or for the FreeNAS devs to add it to the GUI.

      Reply
  76. I’ve run into a problem which I’d be grat6eful for your help. I now get a DVD ejected almost straightaway after inserting it. The log extract is below which implies MakeMKV is either unli9censed, or out of date. I entered the beta license key but no change, and reinstalled to version 1.10.6 (beta) Linux x64 (I am running Ubuntu 16.04 x64). Still no change. I then purchased a paid key, again no change. Finally I removed the arm directory and linked files, reinstalled the whole app but to no avail, I can’t think of anything else – any assistance gratefully received.

    Log:

    *** Start config parameters ****
    Timestamp: Sat, 26 Aug 2017 16:30:29 +0100
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    RAWPATH=”/mnt/media/ARM/raw/”
    MEDIA_DIR=”/mnt/media/ARM/Media/Movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=false
    CHOWN_USER=
    CHOWN_GROUP=
    MINLENGTH=”600″
    RIPMETHOD=”mkv”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=false
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=false
    EMBY_REFRESH=false
    EMBY_SUBFOLDERS=true
    EMBY_SERVER=””
    EMBY_PORT=”8096″
    EMBY_CLIENT=”ARM”
    EMBY_DEVICE=”ARM”
    EMBY_DEVICEID=”ARM”
    EMBY_USERNAME=””
    EMBY_USERID=””
    IFTTT_EVENT=”arm_event”
    LOG=$LOGPATH$LOGFILE
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/dvd /dev/disk/by-id/ata-MATSHITADVD-RAM_UJ875AS_aE01466B /dev/disk/by-path/pci-0000:00:1f.2-ata-1 /dev/disk/by-uuid/2011-11-25-15-52-25-00 /dev/cdrom /dev/disk/by-label/TTSS /dev/dvdrw /dev/cdrw
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0: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=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_1f_2-ata-1
    ID_FS_LABEL=TTSS
    ID_FS_LABEL_ENC=TTSS
    ID_FS_TYPE=udf
    ID_FS_USAGE=filesystem
    ID_FS_UUID=2011-11-25-15-52-25-00
    ID_FS_UUID_ENC=2011-11-25-15-52-25-00
    ID_MODEL=MATSHITADVD-RAM_UJ875AS
    ID_MODEL_ENC=MATSHITADVD-RAM\x20UJ875AS\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-1
    ID_PATH_TAG=pci-0000_00_1f_2-ata-1
    ID_REVISION=1.00
    ID_SERIAL=MATSHITADVD-RAM_UJ875AS_aE01466B
    ID_SERIAL_SHORT=aE01466B
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    TAGS=:uaccess:seat:systemd:
    USEC_INITIALIZED=2955549
    net.ifnames=0
    identified udf
    found TTSS on /dev/sr0
    identified udf as video
    Obtained Title Tinker Tailor Soldier Spy (2012)
    got to here
    HAS_NICE_TITLE is true
    video title is now Tinker Tailor Soldier Spy (2012)
    video type is fail
    Starting video_rip.sh
    Video Title is Tinker Tailor Soldier Spy (2012)
    Ripping video TTSS from /dev/sr0
    Using mkv method of ripping.
    MSG:1005,0,1,”MakeMKV v1.10.6 linux(x64-release) started”,”%1 started”,”MakeMKV v1.10.6 linux(x64-release)”
    DRV:0,2,999,1,”DVD+R-DL MATSHITA DVD-RAM UJ875AS 1.00″,”TTSS”,”/dev/sr0″
    DRV:1,256,999,0,””,””,””
    DRV:2,256,999,0,””,””,””
    DRV:3,256,999,0,””,””,””
    DRV:4,256,999,0,””,””,””
    DRV:5,256,999,0,””,””,””
    DRV:6,256,999,0,””,””,””
    DRV:7,256,999,0,””,””,””
    DRV:8,256,999,0,””,””,””
    DRV:9,256,999,0,””,””,””
    DRV:10,256,999,0,””,””,””
    DRV:11,256,999,0,””,””,””
    DRV:12,256,999,0,””,””,””
    DRV:13,256,999,0,””,””,””
    DRV:14,256,999,0,””,””,””
    DRV:15,256,999,0,””,””,””
    MSG:5021,260,1,”This application version is too old. Please download the latest version at http://www.makemkv.com/ or enter a registration key to continue using the current version.”,”This application version is too old. Please download the latest version at %1 or enter a registration key to continue using the current version.”,”http://www.makemkv.com/”
    STAT: TTSS ripped in 0 hours, 0 minutes and 7 seconds.
    /opt/arm/video_transcode.sh “/mnt/media/ARM/raw//Tinker Tailor Soldier Spy (2012)_20170826_163031” “Tinker Tailor Soldier Spy (2012)” “true” “fail” 20170826_163031
    TTSS sent to transcoding queue…
    Start video transcoding script
    transcoding with a nice title
    directory already exists… adding timestamp
    Transcoding all files.
    STAT: transcoded in 0 hours, 0 minutes and 0 seconds.
    Pushbullet notifications not enabled
    IFTTT notifications not enabled
    Pusover notifications not enabled
    *** Start config parameters ****
    Timestamp: Sat, 26 Aug 2017 16:30:38 +0100
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    RAWPATH=”/mnt/media/ARM/raw/”
    MEDIA_DIR=”/mnt/media/ARM/Media/Movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=false
    CHOWN_USER=
    CHOWN_GROUP=
    MINLENGTH=”600″
    RIPMETHOD=”mkv”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=false
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=false
    EMBY_REFRESH=false
    EMBY_SUBFOLDERS=true
    EMBY_SERVER=””
    EMBY_PORT=”8096″
    EMBY_CLIENT=”ARM”
    EMBY_DEVICE=”ARM”
    EMBY_DEVICEID=”ARM”
    EMBY_USERNAME=””
    EMBY_USERID=””
    IFTTT_EVENT=”arm_event”
    LOG=$LOGPATH$LOGFILE
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/disk/by-path/pci-0000:00:1f.2-ata-1 /dev/cdrw /dev/dvd /dev/cdrom /dev/disk/by-id/ata-MATSHITADVD-RAM_UJ875AS_aE01466B /dev/dvdrw
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0: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_FOR_SEAT=block-pci-0000_00_1f_2-ata-1
    ID_MODEL=MATSHITADVD-RAM_UJ875AS
    ID_MODEL_ENC=MATSHITADVD-RAM\x20UJ875AS\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-1
    ID_PATH_TAG=pci-0000_00_1f_2-ata-1
    ID_REVISION=1.00
    ID_SERIAL=MATSHITADVD-RAM_UJ875AS_aE01466B
    ID_SERIAL_SHORT=aE01466B
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    SYSTEMD_READY=0
    TAGS=:uaccess:systemd:seat:
    USEC_INITIALIZED=2955549
    net.ifnames=0
    drive seems empty, not ejecting

    Reply
    • I’ve seen this sort of thing before and it came down to an issue with the keyfile.

      Check this file: /root/.MakeMKV/settings.conf

      There should be a line that says app_Key=

      The string that follows the equal sign needs to be encapsulated in quotation marks. So the line would look something like this:

      app_Key=”ABCDEFabcdef123456ABCDEF123456″

      The alphanumeric string is your key file.

      Reply
      • Thanks – that seems to have solved the issue – for some reason the settings.conf, update.conf and screen.conf files were all under the /home directory in .MakeMKV. I copied them all to the root/.MakeMKV/ directory and all seems OK.

        Reply
  77. Hello all, noob here to automatic ripping. I have a perplexing problem. I have installed Ubuntu 16.04.3 LTS running in Virtualbox on my mac (Sierra 10.12.5). I have followed your install instructions step by step. I have setup optical to use host device (Asus blu-ray). I have installed all the software, edited the config file to point to local folders on the host (shared via virtual box to Ubuntu). that is the only change i made in config. I have installed makemkv, handbrake, python, pip, libraries, at, etc. When i test each individual component, they all seem to be working. I can use udevadm command and it reads my DVD (testing with “The Departed DVD).

    However, when i insert the disk, i get nothing! No logs in /opt/arm/logs and no indication that udev is firing off the /etc/init.d/51-automedia.rules. And yes, i did implement the soft link as described in your instructions. How do i troubleshoot when i can’t find any logs to review? I know this is probably something very simple – human error or typo somewhere – but would appreciate any suggestions on how i can get udev to at least kick off the first script?

    I read through all of the comments above and it appears that it may be that my particular setup just won’t read the DVD properly – but i’m sure its something simple that i’m missing?

    Thanks in advance for the help!
    the_greenhorn

    Reply
  78. Ok, i found out my problem. I read the REAME.md file and there was another command in that file that isn’t in the instructions listed above:
    cp /opt/arm/[email protected] /etc/systemd/system/

    Once i did this then it started working. Now trying to resolve why makemkv won’t read any DVD i throw at it. Same DVD’s work fine in my host with makemkv (Mac Sierra). But at least i can see the script working and now i have an empty.log file to read! I’m sure it probably has something to do with encryption libraries needed.

    Thanks!
    the_greenhorn

    Reply
    • I had the same problem. At first, I thought it was the MKV license (I finally figured out that I had to create the .conf file and add the app key line in the file in order for it to be read). I was still having problems, and created a new config file from the copy and it worked. Then I added 1 change at a time to see where it broke. I eventually made all the changes again, and it kept working. Either the config file was corrupt, or I made some kind of syntax error (forgot to add a # to a remark???). I found one line in a previous config copy where I added quotes (“) around and argument that was inside the quote of the HB_ARG= quotes…this made sense :) It got to the 2nd quote (which was the first quote of an argument, and failed. So, don’t add quotes within quotes. I know that’s coding 101, but I did it any way. Best of luck!

      Reply
  79. I’m wondering if anyone else is having the following issue:

    Once a disc has finished ripping, my drive will eject it only to close the drive tray again within 3-4 seconds, after which it rips the disc again.
    Unless I am supervising the process closely and snatch the disc out of the drive, this creates an infinite ripping loop.

    Obviously this wouldn’t happen with laptop style drives which do not have the capability of automatically closing the drive tray.

    Reply
  80. amazing blog and project thank you.
    i haven’t attempted it yet and was wondering:
    do you think i could run arm on ubuntu 16.04 lts on virtualbox on windows 7 64bit?
    this is exclusively for dvds.
    p.s.
    are subtitles ripped as well? can they be added in the mkv files?

    overall i suppose my concerns are whether there would be performance and compatibility bottleneckd caused by the VM software.

    many thanks

    Reply
  81. I had a problem getting the DVD ripper to work from this article until I noticed what seems to be a line missing between lines 7 and 8 of the commands, this line is in the readme.md file on github but not in the article above and it solved the problem:

    cp /opt/arm/[email protected] /etc/systemd/system/

    If this has been picked up befoire my apologies.

    Reply
  82. Hello … I love this thing (concept at least) I’m doing a fresh install of ubutnut server 16.04 lts …. I can’t seem to get past getting this error

    Everything passes and installs but it still reads 8.1.1 and not 9.0.1 … despite it installing 9
    —————————————-
    Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-o3ym7ztc/pycurl/
    You are using pip version 8.1.1, however version 9.0.1 is available.
    You should consider upgrading via the ‘pip install –upgrade pip’ command.
    fausto@Auto-Box:/opt/arm$ pip install –upgrade pip
    Requirement already up-to-date: pip in /home/fausto/.local/lib/python2.7/site-packages

    cool project

    cheers
    Tim

    Reply
  83. Cool, that’s getting better, now just getting this :

    Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-zZwnxT/pycurl/

    Reply
  84. OK … so this is working great . Here’s my question, is there a way to set up makemkv to tip all of the video, including the extras in separate video files?

    Great scripts, thanks

    Reply
    • Hi, Tim. Set the parameter MAINFEATURE=false and it will rip everything into separate files. You may also need to play with the MINLENGTH value (minimum number of seconds a video has to be for the ARM to rip it).

      Reply
      • Ben,

        I thought the MAINFEATURE piece only worked with BluRay, and only if BD’s were set to backup mode and not straight rip? I have my minlength set to 600 (ten minutes) and will always get “everything” that matches that criteria. With newer BluRay’s, this is actually problematic because of playlist obfuscation where it tries to rip all of the various combinations that are on the disc specifically caused to confuse ripping programs. Sometimes I get three or four files from a BD, sometimes I get 40. And they’re all just about the EXACT same size because of playlist obfuscation.

        I don’t use backup mode for BluRay’s… Maybe that’s why mine works as it does?

        Reply
  85. So i tried that and the log read something about MAINFEATURE=being set to TRUE and didn’t rip anything. So i reset it and it worked again… and promptly lost the original log (sorry)… also, where is the MINLENGTH set …. i couldn’t find it…. thanks for the help

    Reply
  86. Hi Ben,
    Thanks so much for this! For some reason every time I run this it always saves the log file as “empty.log” and puts my final transcoded product into “Unidentified” even though in the log files it shows “identified udf as video”, although it is also showing “video type is fail”. Any suggestions? I’ve tested multiple dvds.

    Thanks a lot,
    Trevor

    Reply
  87. Hello,
    Sorry for the poor writing in my last couple posts, rereading them now and wondering what was going on at work when I posted. I’ve familiarized myself with the config and followed your instructions, however i can’t seem to get it to rip anything but the main title. It’s working great at that, just doesn’t want to rip anything but the movie. ANy thoughts?

    Thanks for any and all help, this really is a nice set of scripts.

    T

    Reply
  88. Hi Ben,
    Thanks so much for the quick reply! $1 a month seems pretty reasonable. One more question for you, I have set up my IFTTT trigger and in the logs it shows “IFTTT notification sent” yet I don’t get the email. I’ve double checked my API key is correct and my event is correctly configured. Could there possibly be something wrong with the python script? Or have you had anyone else with this issue?

    Thanks a lot for the help

    -Trevor

    Reply
  89. OK … so this is what I set up … sometimes it wants to do other tracks on the DVD fine … other times it will only rip the main title … I want it to rip everything.

    Anyone have any thoughts?

    ########################
    ## MakeMKV Parameters ##
    ########################

    # Minimum length of track for MakeMKV rip (in seconds)
    MINLENGTH=”100″

    RIPMETHOD=”mkv”

    MKV_ARGS=””

    ##########################
    ## HandBrake Parameters ##
    ##########################

    HB_PRESET=”High Profile”

    DEST_EXT=mkv

    HANDBRAKE_CLI=HandBrakeCLI

    MAINFEATURE=false

    HB_ARGS=”–subtitle scan -F”

    MKV_ARGS=””

    ##########################
    ## HandBrake Parameters ##
    ##########################

    HB_PRESET=”High Profile”

    # Extension of the final video file
    DEST_EXT=mkv

    HANDBRAKE_CLI=HandBrakeCLI

    MAINFEATURE=false

    Reply
    • Can you provide some information on discs that DO work as you’d like and ones that DON’T? This might help to determine whether the issue is with the discs, drives, software, configuration, sun spot activity, etc.

      Be specific about the discs… Titles, formats, multi-disc set, which disc, and so on. Also, be sure to point out what tracks DON’T rip that you believe should.

      Reply
  90. An alternative method would be to use the “file” command, e. g.

    file -s /dev/sr0 | cut -d “‘” -f2

    That gives you the LABEL on Debian as well and you don’t need to copy anything.

    Reply
  91. OK … so here’s what I got, These DVDs “The Great Escape (1998)” and “Almost Famous (2001)” ripped fine and grabbed the extras. “Tom Horn (2005)” along with the Godfather 1 2 and 3 did not. I’d expect at least the theatrical trailers as they should be just short videos. I have my min length set at 100.

    THanks for the help

    T

    Reply
    • Unfortunately, I don’t remember how the Godfather movies ripped for me. I believe that it was “main feature” only. I don’t have any of the others on your list. Any other examples you want to try?

      Reply
  92. Ok … so here is the real question. Should it be ripping everything over 100 secs on every DVD or is that the nature of this software, some DVDs simply wont auto rip everything in the menu? In my mind i was expecting the entire contents of every DVD I stuck in. If this is a limitation of running this software in C.L. auto-mode, than so be it. … I just want to make sure I’m not doing something wrong to stop it.

    Reply
    • The CLI and GUI versions of MakeMKV work the same way. Have you tried loading a GUI version on a machine and putting one of these discs into the drive to see what that version does? If you turn on some extended logging and such, you should see more details about what it recognizes and why it’s kicking certain things out.

      Reply
  93. OK .. so I’m running this on a headless server, so no GUI. Per chance do you where the config switch is to turn on extended logging for makemkv or are we talking about the arm log?

    Reply
  94. Hey So …. thanks for all the help, it appears like it was a P.I.C.N.I.C problem (Problem In Chair Not In Computer)

    Seems it was simply an issue of not trying the right DVD’s … I just did “Gods and Generals” and “Peacful Warrior” along with the Rocky Trilogy and got TONS of dvd extrs stuff … thanks for the help … fantastic scrips

    Reply
  95. I’m having the same problem as Mark. I have SKIP_TRANSCODE=true (the machine I use for ripping is separate from the more powerful machine I use for Handbrake/transcoding) and because of playlist obfuscation, it takes over 12 hours to rip a disk because I get 15 copies of the same file, which of course are 25GB in size. Any suggestions for getting around this?

    BTW . . . great scripts! :) Loving it!

    Reply
  96. Ben –

    What can I say… Thanks so much.

    I have personally implemented many of your guides in my home lab. Specifically, my two favorite, the Hyperconverged ESXi 6.5 and FreeNAS hybrid and I’ve just added a VM to that environment for ARM.

    I have 2 things that I can’t quite figure out… I don’t want to configure IFTTT or Pushbullet as I have an entire email infrastructure setup in my environment.

    It seems that I’m getting emails when ripping and transcoding finishes… BUT, I don’t know where they are configured.

    After ripping I am getting these types of emails:

    ===============================
    /opt/arm/config
    /tmp/arm_disc_info_sr1: line 1: /dev/disk/by-path/pci-0000:02:03.0-ata-2: Permission denied
    mount: /dev/sr1 is write-protected, mounting read-only
    /tmp/arm_disc_info_sr1: line 1: /dev/disk/by-path/pci-0000:02:03.0-ata-2: Permission denied
    warning: commands will be executed using /bin/sh
    job 23 at Fri Oct 6 09:55:00 2017
    ===============================

    I believe they are generated by the AT command that you’re using. As you can see, it doesn’t really say much, but I know enough that the ripping has finished.

    Secondly, after transcoding, I get an email that looks like this (which goes on for a full 900k)…

    ===============================
    dest /MEDIA/_Scratch/_ARM/Unidentified//The Blob (2001) variable created
    Encoding: task 1 of 2, 0.34 % (0.00 fps, avg 0.00 fps, ETA 00h00m41s)Encoding: task 1 of 2, 1.09 % (0.00 fps, avg 0.00 fps, ETA 00h00m30s)Encoding: task 1 of 2, 1.54 % (0.00 fps, avg 0.00 fps, ETA 00h00m34s)Encoding: task 1 of 2, 1.79 % (0.00 fps, avg 0.00 fps, ETA 00h00m40s)Encoding: task 1 of 2, 2.41 % (0.00 fps, avg 0.00 fps, ETA 00h00m35s)Encoding: task 1 of 2, 3.04 % (0.00 fps, avg 0.00 fps, ETA 00h00m35s)Encoding: task 1 of 2, 3.47 % (0.00 fps, avg 0.00 fps, ETA 00h00m36s)Encoding: task 1 of 2, 3.79 % (0.00 fps, avg 0.00 fps, ETA 00h00m38s)Encoding: task 1 of 2, 4.16 % (0.00 fps, avg 0.00 fps, ETA 00h00m40s)Encoding: task 1 of 2, 4.42 % (0.00 fps, avg 0.00 fps, ETA 00h00m41s)Encoding: task 1 of 2, 4.92 % (0.00 fps, avg 0.00 fps, ETA 00h00m39s)Encoding: task 1 of 2, 5.09 % (0.00 fps, avg 0.00 fps, ETA 00h00m43s)Encoding: task 1 of 2, 6.03 % (0.00 fps, avg 0.00 fps, ETA 00h00m39s)Encoding: task 1 of 2, 6.59 % (0.00 fps, avg 0.00 fps, ETA 00h00m38s)Encoding: task 1
    of 2, 7.48 % (0.00 fps, avg 0.00 fps, ETA 00h00m36s)Encoding: task 1 of 2, 8.56 % (0.00 fps, avg 0.00 fps, ETA 00h00m33s)Encoding: task 1 of 2, 9.98 % (0.00 fps, avg 0.00 fps, ETA 00h00m30s)Encoding: task 1 of 2, 11.64 % (0.00 fps, avg 0.00 fps, ETA 00h00m26s)Encoding: task 1 of 2, 13.36 % (0.00 fps, avg 0.00 fps, ETA 00h00m24s)Encoding: task 1 of 2, 14.65 % (0.00 fps, avg 0.00 fps, ETA 00h00m22s)Encoding: task 1 of 2, 15.95 % (0.00 fps, avg 0.00 fps, ETA 00h00m21s)Encoding: task 1 of 2, 17.37 % (0.00 fps, avg 0.00 fps, ETA 00h00m20s)Encoding: task 1 of 2, 18.89 % (0.00 fps, avg 0.00 fps, ETA 00h00m19s)Encoding: task 1 of 2, 19.54 % (0.00 fps, avg 0.00 fps, ETA 00h00m19s)Encoding: task 1 of 2, 19.96 % (0.00 fps, avg 0.00 fps, ETA 00h00m19s)Encoding: task 1 of 2, 21.59 % (0.00 fps, avg 0.00 fps, ETA 00h00m18s)Encoding: task 1 of 2, 23.16 % (0.00 fps, avg 0.00 fps, ETA 00h00m17s)Encoding: task 1 of 2, 24.64 % (0.00 fps, avg 0.00 fps, ETA 00h00m16s)Encoding: task 1 of 2,
    ===============================

    My question is this… Can I simply modify notify.sh and create something using mutt and the variables in the current notify options for IFTTT and Pushbullet, then update the config for something like “SEND_EMAIL_NOTIFY=true”?

    Second, how do I stop the above emails… LOL. The first one I think someone indicated above that the udev script was looking at “change” and not at “load”, but I’m not sure if that’s related, or how to go about updating that…

    Thanks so much!

    Reply
    • Hi, Jacob. Thanks for reading my blog over the years! The emails you are getting are most likely coming from the Linux OS, there’s nothing in ARM that would send out an email… perhaps some process reporting systemd or a logcheck process that’s sending you errors. Do you by chance have the root account on the ARM box forwarded to your real email address? You may be able to look at the headers of the email to track down the process that sends them.

      As for the Permission denied, you may have found a bug, the ARM should probably mount it passing a read only flag.

      For sending out emails, yes you can. You can modify the script exactly as you described using mutt or the mail command. If you think it’s something others would find useful feel free to create a PR on GitHub.

      Thanks,
      Ben

      Reply
      • Thanks for the reply Ben! First off, YES, it is definitely something with atq directly that’s sending the email…

        The plot thickens…

        My ripping box has been idle for a week, and this morning I got 25 emails from atq around 3:25 am… All starting with the line “/opt/arm/config”… some of them only have that line, others indicate it’s trying to unmount “/dev/sda5”, which is my root partition, so that’s not good.

        Any hints on where I can look to see what the heck is getting called to prompt this?

        For the second piece… I’ve no idea how to do a PULL request, but I’ll try to figure that out too! Thanks for all the help!

        Reply
  97. Ben, this is all coming along so nicely!

    Excited for audioeng and my own pull requests to get merged.

    One quick question though… I see in video_rip.sh that you make 2 calls to video_transcode.sh… One is a straight call, the other is piped to batch… why is that? Shouldn’t the first one be sufficient?

    I ask, because I needed to manually rip The Expendables 2 on my windows box, but I want to transfer the MKV files over to my linux box and use the second piece of ARM to do all the rest for me… I figured I could just pass it the right path, and variables, just as you call after the video is ripped by video_rip.sh, but the two calls to video_transcode.sh has me confused.

    As always, thanks for the help!

    Reply
  98. Running into some issues with ARM. I have it installed ina VM. And when I insert a disc using the backup method. The process begins (tail -f /opt/arm/logs/empty.log) and I can follow along. Then randomly the ripping process stops, and the encoding fails. I cant quite figure out what I’m doing wrong. Below is a chunk of the log. Let me know if you need further log data.

    [00:42:50] hb_init: starting libhb thread
    [00:42:50] thread 7f39aa732700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /output/RAW//RATATOUILLE_20171016_225309/BDMV…
    [00:42:50] CPU:
    [00:42:50] – logical processor count: 4
    [00:42:50] hb_scan: path=/output/RAW//RATATOUILLE_20171016_225309/BDMV, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [00:42:50] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [00:42:50] dvd: not a dvd – trying as a stream/file instead
    [00:42:50] batch: scanning /output/RAW//RATATOUILLE_20171016_225309/BDMV/MovieObject.bdmv
    [mp3 @ 0x7f39a4004540] Header missing
    [mp3 @ 0x7f39a4004540] Header missing
    [mp3 @ 0x7f39a4004540] Header missing
    [mp3 @ 0x7f39a4004540] Header missing
    Input #0, mp3, from ‘/output/RAW//RATATOUILLE_20171016_225309/BDMV/MovieObject.bdmv’:
    Duration: 00:00:03.81, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: mp1
    44100 Hz, stereo, s16p, 160 kb/s
    [00:42:50] hb_stream_open: open /output/RAW//RATATOUILLE_20171016_225309/BDMV/MovieObject.bdmv failed
    [00:42:50] libhb: scan thread found 0 valid title(s)
    *** Start config parameters ****
    Timestamp: Tue, 17 Oct 2017 00:42:50 -0500
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    ARMPATH=”/output/movies/”
    RAWPATH=”/output/RAW/”
    MEDIA_DIR=”/output/movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=false
    CHOWN_USER=root
    CHOWN_GROUP=root
    MINLENGTH=”600″
    RIPMETHOD=”backup”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=true
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=false
    EMBY_REFRESH=false
    EMBY_SUBFOLDERS=true
    EMBY_SERVER=””
    EMBY_PORT=”8096″
    EMBY_CLIENT=”ARM”
    EMBY_DEVICE=”ARM”
    EMBY_DEVICEID=”ARM”
    EMBY_USERNAME=””
    EMBY_USERID=””
    NOTIFY_RIP=true
    NOTIFY_TRANSCODE=true
    IFTTT_EVENT=”arm_event”
    LOG=$LOGPATH$LOGFILE
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/cdrom /dev/disk/by-path/pci-0000:02:03.0-ata-1 /dev/disk/by-id/ata-VMware_Virtual_SATA_CDRW_Drive_00000000000000000001 /dev/dvdrw /dev/dvd /dev/cdrw
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:03.0/ata3/host2/target2:0:0/2: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_BD_R=1
    ID_CDROM_BD_RE=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_RAM=1
    ID_CDROM_DVD_RW=1
    ID_FOR_SEAT=block-pci-0000_02_03_0-ata-1
    ID_MODEL=VMware_Virtual_SATA_CDRW_Drive
    ID_MODEL_ENC=VMware\x20Virtual\x20SATA\x20CDRW\x20Drive\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    ID_PATH=pci-0000:02:03.0-ata-1
    ID_PATH_TAG=pci-0000_02_03_0-ata-1
    ID_REVISION=00000001
    ID_SERIAL=VMware_Virtual_SATA_CDRW_Drive_00000000000000000001
    ID_SERIAL_SHORT=00000000000000000001
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    SYSTEMD_READY=0
    TAGS=:seat:systemd:uaccess:
    USEC_INITIALIZED=1580379
    drive seems empty, not ejecting
    No title found.
    HandBrake has exited.
    Transcoding file CERTIFICATE
    [00:42:51] hb_init: starting libhb thread
    [00:42:51] thread 7f01f43c2700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /output/RAW//RATATOUILLE_20171016_225309/CERTIFICATE…
    [00:42:51] CPU:
    [00:42:51] – logical processor count: 4
    [00:42:51] hb_scan: path=/output/RAW//RATATOUILLE_20171016_225309/CERTIFICATE, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [00:42:51] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [00:42:51] dvd: not a dvd – trying as a stream/file instead
    [00:42:51] batch: scanning /output/RAW//RATATOUILLE_20171016_225309/CERTIFICATE/app.discroot.crt
    [00:42:51] hb_stream_open: open /output/RAW//RATATOUILLE_20171016_225309/CERTIFICATE/app.discroot.crt failed
    [00:42:51] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.

    Reply
  99. I was wondering if anybody is running into an issue with slow disc read? I have this installed on a machine with 7 disc drives and whenever I put more than 3 discs in at a time I get an “invalid block size” kernel error that really slows down ripping time. Seems to be an mkv issue that I haven found in other forums that has yet to be resolved. I have tried both ubuntu 16.04 and 17.04. Any ideas to avoid this error?
    Thanks,
    Trevor

    Reply
    • Are the drives on a common controller? Try a separate controller and see if it helps. You could be experiencing congestion on the controller bus.

      Reply
  100. After looking they seem to be on different controllers. All labelled scsi0-7 respectively. Is this what you are referring to?
    Thanks for the quick replay.

    Reply
    • No.

      Each device will need a unique ID for itself, but all devices on a common controller would have the same ID for the controller itself. It’s common for motherboard to use a single controller bus regardless of 3,4,5, or however many device connections are available. If you have an add-on SATA card that you could move a couple of drives to, do that and then try three discs that are still connected as now along with 1-2 more connected to the new controller/card.

      Reply
  101. Gotcha, then yes, they are all on one controller and this is most likely the issue. One last question, even though discs are recognized as dvds and movies all my log files still go into “empty.log” rather than creating a new log per rip. I have entered an omdb api key but can’t seem to get the log files to be correctly named.

    Reply
    • Log files will get unique names based on the name of the DVD/BluRay. If you’re ripping BluRay’s, and they’re going to “EMPTY.LOG”, then something is out of whack. DVD’s are harder to properly identify the name of and are more likely to end up in the wrong log file. BluRay discs should work 100% of the time.

      Even without the API calls that are built into the product for the Windows Media Center calls working, I still get a fairly good percentage of DVD’s getting named correctly. Maybe Ben has changed something that’s causing issues since I lit my system up about six months ago?

      Reply
  102. Yeah even with BluRay’s I 100% of the time always get “empty.log” as the name. When looking at the logs it correctly ids the movie, as in “ID_FS_LABEL=’Movie_title'” but then doesn’t alter the logfile name. Could the naming of the log be happening before the idfs label identification? I’m not quite sure what’s happening there. I have yet to figure out my “invalid block size”/controller issue, I think the only way to solve is like Mark suggested which is to add on a PCI sata card to mitigate the traffic. Any other suggestions are greatly appreciated.

    Reply
  103. So I switched it to MKV. However, now it creates about 12 mkv files instead of one large one.

    699M -rw-r–r– 1 root root 699M Oct 19 01:47 title00.mkv
    1.1G -rw-r–r– 1 root root 1.1G Oct 19 02:09 title01.mkv
    197M -rw-r–r– 1 root root 197M Oct 19 02:15 title02.mkv
    128M -rw-r–r– 1 root root 128M Oct 19 02:19 title06.mkv
    148M -rw-r–r– 1 root root 148M Oct 19 02:24 title07.mkv
    189M -rw-r–r– 1 root root 189M Oct 19 02:29 title08.mkv
    293M -rw-r–r– 1 root root 293M Oct 19 02:38 title09.mkv
    594M -rw-r–r– 1 root root 594M Oct 19 03:11 title13.mkv
    557M -rw-r–r– 1 root root 557M Oct 19 03:41 title14

    Reply
        • If you’re ripping that from BluRay, it should be a little over 5GB in size for a lossless rip. Something in your setup is not right if it’s splitting chapters into individual files.

          Reply
      • So just a bit of an update. Ive tried a bunch of different settings, e.g. switching from backup to mkv, also enabling/disabling main feature=true, etc… It keeps creating about 9-10 files. So I cat * >newmovie.mkv to create on merged file. I played the file and discovered that ARM is only ripping the special features. It’s not ripping the main feature at all. I tried going through several iterations of the settings, and regardless of what I try it will only rip the special features from the disc. So i decided to throw the disc into my workstation instead of arm, and open it with makemkv. What I Found was that the main feature is file 00143.mpls. According to the empty.log, 00143.mpls was being added as title10 (angle1). Grepping the logs I see that for some reason, it couldnt save title10.mkv to the disk.

        support@Javelin:/opt/arm/logs$ cat empty.log | grep 00143.mpls
        MSG:3308,16777216,3,”File 00143.mpls (angle 1) was added as title #10″,”File %1 (angle %3) was added as title #%2″,”00143.mpls”,”10″,”1″
        MSG:3308,16777216,3,”File 00143.mpls (angle 2) was added as title #11″,”File %1 (angle %3) was added as title #%2″,”00143.mpls”,”11″,”2″
        MSG:3308,16777216,3,”File 00143.mpls (angle 3) was added as title #12″,”File %1 (angle %3) was added as title #%2″,”00143.mpls”,”12″,”3″

        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171018_174819/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RATATOUILLE_20171018_174819/title10.mkv”
        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171018_214026/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RATATOUILLE_20171018_214026/title10.mkv”
        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171021_005142/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RATATOUILLE_20171021_005142/title10.mkv”
        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171021_102436/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RATATOUILLE_20171021_102436/title10.mkv”
        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171021_154111/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RATATOUILLE_20171021_154111/title10.mkv”

        a quick grep -a10 ‘title10.mkv’ “title10.mkv” yielded the following.

        MSG:1002,32,1,”LIBMKV_TRACE: Exception: Error in p->FetchFrames(2,true)”,”LIBMKV_TRACE: %1″,”Exception: Error in p->FetchFrames(2,true)”
        MSG:5003,0,2,”Failed to save title 10 to file /output/RAW//RATATOUILLE_20171018_214026/title10.mkv”,”Failed to save title %1 to file %2″,”10″,”/output/RAW//RA
        TATOUILLE_20171018_214026/title10.mkv”

        However, this is the only occurrence of this statement in the logs in sequence to the ripping of title10. Although there are other occurrences of LIBMKV throwing an exception elsewhere.

        As you can see, title10 is missing from the output.

        715768 -rw-r–r– 1 root root 732940874 Oct 22 03:59 title00.mkv
        1067716 -rw-r–r– 1 root root 1093336315 Oct 22 04:22 title01.mkv
        201192 -rw-r–r– 1 root root 206019004 Oct 22 04:28 title02.mkv
        130788 -rw-r–r– 1 root root 133926119 Oct 22 04:32 title06.mkv
        150948 -rw-r–r– 1 root root 154567669 Oct 22 04:37 title07.mkv
        193068 -rw-r–r– 1 root root 197698780 Oct 22 04:42 title08.mkv
        299944 -rw-r–r– 1 root root 307140519 Oct 22 04:52 title09.mkv
        608120 -rw-r–r– 1 root root 622709903 Oct 22 05:24 title13.mkv
        572520 -rw-r–r– 1 root root 586254938 Oct 22 05:55 title14.mkv
        267976 -rw-r–r– 1 root root 274405193 Oct 22 06:11 title15.mkv

        Reply
      • Doing a little research seems to point the finger at subtitles causing libmkv to freak out… I didnt see any method to disable subtitles in makemkv (I use plex, which auto-downloads the subtitles anyway.. ) But I found this in the section for handbrake..

        # Additional HandBrake arguments.
        HB_ARGS=”–subtitle scan -F”

        Which I changed to this…

        HB_ARGS=

        I started another rip to see what happens, but I’m guessing I’ll run into the same error, unless I can figure out how to tell makemkv to skip subtitles..

        Reply
        • A) Plex doesn’t download subtitles automatically. Not sure if you’ve enabled particular settings to get it to download them, but it’s not an automatic thing.

          B) HB_ARGS is for when HandBrakeCLI is called. That happens AFTER the resultant content is grabbed by MakeMKV.

          In your config file, what do you have the following items set to:

          GET_VIDEO_TITLE
          SKIP_TRANSCODE
          MINLENGTH
          RIPMETHOD
          MKV_ARGS
          PLEX_SUPPORT

          Also, what version of MakeMKV do you have installed, and have you verified that you have a current license key? I wrote a script that runs at both machine boot up and at midnight each day to acquire the current license key and insert it into the configuration file. I’ve been running like this for months with only one issue about licensing, and that’s when the MakeMKV author mucked up the license key and it expired before he said it would.

          Reply
          • I have plex configured to autograb subtitles on demand.

            GET_VIDEO_TITLE=true
            # Note: RIPMETHOD must be set to “mkv” for this feature to work
            SKIP_TRANSCODE=false
            MINLENGTH=”600″
            RIPMETHOD=”mkv”
            # MKV_ARGS=”–profile=/opt/arm/default.mmcp.xml”

            # Below added in attempt to disable subtitles
            MKV_ARGS=”/usr/share/MakeMKV/nosubs.mmcp.xml”
            # Have HandBrake transcode the main feature only. BluRay discs must have RIPMETHOD=”backup” for this to work.
            PLEX_SUPPORT=false

            I just installed makemkv about 10 days ago, launched the GUI to initialize the license etc.. I too am working on a script to pull the new versions and update.. However, I was just going to buy the key and save the hassle of debugging yet another script (haha)..

            root@Javelin:/opt/arm# makemkvcon info
            MakeMKV v1.10.7 linux(x64-release) started

            Note, I’ve been mucking around with a custom XML in an attempt to disable the subs as a debugging step..

            Double Note. For those of you that seem to have issues when trying to rip when inserting the disc. If you run into an issue where it cannot read the disc from sr0, verify that you have disabled the linux equivalent to autorun in GDM/KDE etc… I ran into that issue early on in the install… When GDM sees a disk it doesnt mount it to the media folder that ARM is anticipating, rather to something like ROM0 or something similar.. cant remember… I had to go into GDM and disable the autoplay functionality… There is also a way to disable it globally from a config.. but my brain is failing me at the moment.

          • Since this entire effort is to create a “headless” ripping system, the fact that you have various additional packages and libraries installed to support a graphical environment means that your systems is significantly “different” than what was intended. This is supported by the fact that you even had to concern yourself with things like autorun type settings. It’s entirely possible that this is ultimately the root of your problem (meaning that it wasn’t built to be a fully headless system in the first place).

            Set SKIP_TRANSCODE to true for testing – make sure that you’re getting the correct initial content from MakeMKV before you pass it over to a transcoding engine.

            Also, set your MKV_ARGS to blank.

            Once you are reliably able to rip content from the disc like this, you can move on to other things.

          • ahh..that was my snafu apparently… even though i MEANT to download the server version, apparently i clicked the first available link in the server list, which is actually desktop x64… woops.. I just rebuilt the server from scratch, now im actually not able to start the ripping haha

            Oct 22 14:18:56 tow systemd[1]: Starting User Manager for UID 1000…
            Oct 22 14:18:56 tow systemd[1]: Started Session 2 of user support.
            Oct 22 14:18:56 tow systemd[1454]: Reached target Timers.
            Oct 22 14:18:56 tow systemd[1454]: Reached target Sockets.
            Oct 22 14:18:56 tow systemd[1454]: Reached target Paths.
            Oct 22 14:18:56 tow systemd[1454]: Reached target Basic System.
            Oct 22 14:18:56 tow systemd[1454]: Reached target Default.
            Oct 22 14:18:56 tow systemd[1454]: Startup finished in 23ms.
            Oct 22 14:18:56 tow systemd[1]: Started User Manager for UID 1000.
            Oct 22 14:19:29 tow systemd-udevd[1563]: Process ‘/bin/systemctl start [email protected]‘ failed with exit code 5.

          • no idea.. removed everything, rolled back to a fresh install snapshot and did it again.. now its ripping… will have to wait and see if it skips the mainfeature again… thanks for the assist.

      • Im trying some of your suggestions now. However one thing I am confused about is not installing a desktop manager with Ubuntu Server LTS 16.04. Is there a specific ISO/Flavor you guys are using that I’m not? To my knowledge ULTS installs a desktop manager as part of the base installation. I

        Reply
  104. HI ….

    So I’m not getting subtitles.

    I had this in config

    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”

    I changed it to this

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

    Now I’m waiting the next video to start,

    but is this correct? When I do a ps -aux|grep Hand, I get:

    root 10524 195 13.2 1598780 269792 ? SNl 17:13 13:50 HandBrakeCLI -i /home/fausto/rips/raw/Up (2011)_20171024_192824/title09.mkv -o /home/fausto/rips/Up (2011)/title09.mkv –preset=High Profile
    root 10659 0.0 0.0 14224 1036 pts/0 S+ 17:20 0:00 grep –color=auto Hand

    am I supposed to see the whole command?

    Thanks

    TIm

    Reply
  105. Just tried this… not sure if it’s working …. but the HandBrakeCLI man says “–” before the commands? is this correct??

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

    Thanks

    Tim

    Reply
    • Not sure if it’s a formatting thing based on how you’re typing it in, but… all of your HB_ARGS info looks the same to me in both of your posts – I can’t tell what you believe you’ve changed.

      On a related topic, how are you ripping the media in the first place? Are you ripping as MKV or BACKUP? What kind of discs (BluRay, DVD)? What are the command-line options you’re using for makemkvcon?

      I use HandBrakeCLI, but not part of the ARM system. I run it on a much higher powered machine to speed things up and my command line is very simple:

      HandBrakeCLI -i –preset=”HQ 1080p30 Surround” -s scan -o

      It appears that different command line options may require different dashes based on what the parameter is. Notice that “preset” is –preset and “s” is -s scan.

      Also, the way that my system works, I use the “-s scan” to ONLY look for forced subtitles and burn them directly into the MP4 file that I’m creating. The -s scan option basically tells HB to look only for those tracks that are present in less than 10% of the movie. Those would be where characters are speaking non-native language of pretty much any origin and will be grabbed and burned into the MP4 container.

      BTW.. For BluRay, I rip to MKV, transcode to MP4 with forced subs at fairly high quality (can’t see any PQ loss on a 75″ 4K set), then transcode again to M4V and relocate the MOOV atom to the beginning of the file. For me, I see between 55% and 75% reduction in file size with ZERO quality loss.

      Reply
        • The “preset” option is preceded by two dashes while the “s” option (I found that “subtitle” is incorrect… tons of digging online to get the CORRECT option names…) is preceded by a single dash.

          Ben – maybe turn off the WYSIWIG editor if it’s on? Or change editors? Pretty irritating that there’s no way to control the formatting when it auto-changes things AFTER form submit. :(

          Reply
          • “I found that “subtitle” is incorrect… tons of digging online to get the CORRECT option names…)”

            Does this mean that “HB_ARGS=”–native-language eng –subtitle scan,1,2,3,4,5,6,7,8,9,10 –subtitle-default=1 –subtitle-forced=1 –all-audio””

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

            or

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

  106. OH JEEEZ … now I see ” a single “-‘ where i posted ” – – ” two for the config. can someone verify … what is this whole thing supposed to look like. I have a great MKV’s with perfect subtitles ripped from dvd. Then through handbrake, I loose everything .. THis is what I have now. …what should I have?

    # Handbrake preset profile
    # Execute “HandBrakeCLI -z” to see a list of all presets
    HB_PRESET=”High Profile”

    # Extension of the final video file
    DEST_EXT=mkv

    # Handbrake binary to call
    HANDBRAKE_CLI=HandBrakeCLI

    # Have HandBrake transcode the main feature only. BluRay discs must have RIPMETHOD=”backup” for this to work.
    # If MAINFEATURE is true, blurays will be backed up to the HD and then HandBrake will go to work on the backed up
    # files. For normal DVDs, ARM will bypass MakeMKV and hand off the dvd directly to HandBrake. This will require
    # libdvdcss2 be installed.
    # NOTE: For the most part, HandBrake correctly identifies the main feature on movie DVD’s, although it is not perfect.
    # However, it does not handle tv shows well at all. You will likely want this value to be false when ripping tv shows.
    MAINFEATURE=false

    # Additional HandBrake arguments.
    HB_ARGS=”–native-language eng –subtitle scan,1,2,3,4,5,6,7,8,9,10 –subtitle-default=1 –subtitle-forced=1 –all-audio”

    Reply
  107. lets try that again

    # Additional HandBrake arguments.
    HB_ARGS=”- -native-language eng – -subtitle scan,1,2,3,4,5,6,7,8,9,10 – -subtitle-default=1 –subtitle-forced=1 – -all-audio”

    Reply
  108. ok … driving me insain …. this is what I have now

    HB_ARGS=”-N eng – -all-audio -s scan 1,2,3,4,5,6,7,8,9,10 -F ”

    no subtitles

    Reply
  109. SO … in trying to sort this … I found this line commented out int the transcodd.sh file

    # echo “$HANDBRAKE_CLI -i $DEVNAME -o \”${DEST}/${LABEL}.${DEST_EXT}\” –main-feature –preset=”${HB_PRESET}” –subtitle scan -F 2″ >> $LOG

    looks like it’s just outputting to the logs … but its a shot in the dark…

    THoughts?

    Reply
    • You’re exactly right – it’s nothing more than a way to log what’s supposed to be going on. If that line doesn’t match the line after it (minus the echo statement and redirection to $LOG), however, then it isn’t accurate to enter that info into the log.

      Reply
  110. Can someone post a working copy of the subtitle section of their config file …. still cannon get anything subtitles.

    Reply
    • Here’s what I have: 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"

      This should rip all subtitles, but it makes the English language subtitle track that is only used when someone is speaking a non-English language the first. (e.g. in Star Trek if someone is speaking Klingon).

      Reply
  111. Yeah …thats what I have …. but I get very nice ripped dvd’s to mkv with all subtitles …. then they are run compressed and loose all the subtitles….

    So this is my entire handbrake section…. with the above line added …

    AM I missing a library fro handbrake or something?

    T

    ## HandBrake Parameters ##
    ##########################

    # Handbrake preset profile
    # Execute “HandBrakeCLI -z” to see a list of all presets
    HB_PRESET=”High Profile”

    # Extension of the final video file
    DEST_EXT=mkv

    # Handbrake binary to call
    HANDBRAKE_CLI=HandBrakeCLI

    # Have HandBrake transcode the main feature only. BluRay discs must have RIPMETHOD=”backup” for this to work.
    # If MAINFEATURE is true, blurays will be backed up to the HD and then HandBrake will go to work on the backed up
    # files. For normal DVDs, ARM will bypass MakeMKV and hand off the dvd directly to HandBrake. This will require
    # libdvdcss2 be installed.
    # NOTE: For the most part, HandBrake correctly identifies the main feature on movie DVD’s, although it is not perfect.
    # However, it does not handle tv shows well at all. You will likely want this value to be false when ripping tv shows.
    MAINFEATURE=false

    # Additional HandBrake arguments.
    # OLD HB_ARGS=”–native-language eng –subtitle scan,1,2,3,4,5,6,7,8,9,10 –subtitle-default=1 –subtitle-forced=1 –all-audio”
    #HB_ARGS=”–all-audio -s scan -F –native-language eng”
    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”

    Reply
    • Anyone have an idea why handbrake will not do movies after the script has “sent to transcode queue”? I have rebuilt my VM twice and it won’t run with all variations of skip transcode, move it backup, and main feature. A general config won’t work. I can run the cli from terminal with no errors.
      Thanks everyone!

      Reply
      • I believe that I had a TON of trouble when I first tried building this because I was using the GUI / Desktop version and not the Server version. The two different releases install a lot of different base libraries and such and it created a mess for me.

        Reply
  112. First off thanks Benjamin for automating this process. Secondly I was able to get this working in both the Ubuntu Desktop 16.04 LTS and Ubuntu Server 16.04 just in case someone else is wondering. Both machines were VM’s hosted via ProxMox 5.1. I was unable to get a SATA bluray drive working however I had success with a usb dvd drive. I’m hoping to get an external blu-ray drive soon and give that a try. Thanks again!

    Reply
  113. Excellent script! Working flawlessly on Linux Mint 18.2 running on real hardware. Bit of a newb with HandbrakeCLI. Is there a way to shutdown the machine automatically after the encode is complete?

    Reply
    • The BETA has not ended. The license key that was supposed to have been good through the end of November expired a couple of days early. There is a new key posted that’s good until the end of January (or at least very close). I imported the new key and ripped three BluRay discs just this morning.

      Reply
  114. I’ve been wanting to make something like this for years, but never found the time to do it. Thanks a ton for the help. I was able to set up an old compy I had lying around as an ARM and Plex server using Ubuntu for my sister to back up all of her DVD’s. Of course, I set it up so I can share her library too. :-) I did add a tweak to use the IMDB python library to look up the movies instead and that seemed to work better.

    Reply
  115. So script is working wonders with my collection …. except … Seven Samurai and Run Lola Run…. Even in the raw mkv file before it gets to handbrake ….. I can’t get any audio tracks but the english commentary for Seven Samurai and I can only get the english overdub for “run lola run”. I feel as if the answer lies in the /opt/arm/default.mmcp.xml file …. but I’m not sure how to go about messing with it in order to get the correct audio.

    Thanks for any ideas

    Tim

    Reply
  116. Wanted to provide some info for a problem I ran into and how I solved. I’m running the ARM as an Ubuntu 16.04 VM on VMware. The VM’s OS and Data Drives are running from a NAS, so I dont have any datastores or VMs running on local drives in the VMware host.

    When I first started using ARM, I was having it rip straight to my NAS, not to the “local drive” (which, as I stated above, is not really local anyway). At first, everything was fine. But then I started noticing that some of the rips were coming out corrupted. After some investigation, I concluded that by having the ARM stream the ripped bits over the network to my NAS, the rips were more susceptible to corruption. I determined that I needed to have the initial rip happen locally, then transmit the output files to my NAS. But simply removing my NAS from fstab wasnt a good alternative, because then the ARM would rip to the “local drives”, which as I mentioned, are actually remote.

    The best solution was to install a physical drive into my host, create a virtual disk on the physical disk and attach the virtual disk to my existing VM. This way I have a local target drive to rip to that is local to the host with the bluray drive, but my ARM VM is still running from my NAS in another part of the house. I also added a couple of scripts to automatically copy the locally ripped files to the NAS and then purge the local drive after the files are copied.

    Reply
  117. Hi. First, thanks for this useful tool. I’ve been tinkering with it trying to get things set up just the way I want, and I’ve run into a bit of a snag. Had been ripping/transcoding things just fine using “mkv” rip method, but wanted to try out the “backup” method, wondering if that would allow me to preserve a blu-ray’s menus and such for use in Plex. MakeMKV appears to rip the whole disc to hard drive, but then Handbrake errors right away. I’ll paste the log file below, would appreciate if you had any ideas for me. Thanks!

    *** Start config parameters ****
    Timestamp: Tue, 26 Dec 2017 12:33:05 -0700
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    ARMPATH=”/md1/ARM/Movies/”
    RAWPATH=”/md0/ARM/raw/”
    MEDIA_DIR=”/md1/Media/Movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    LOG_SINGLE_FILE=false
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=true
    CHOWN_USER=server-admin
    CHOWN_GROUP=server-admin
    MINLENGTH=”0″
    RIPMETHOD=”backup”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=false
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=true
    NOTIFY_RIP=true
    NOTIFY_TRANSCODE=true
    IFTTT_EVENT=”arm_event”
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/disk/by-uuid/8CE00A2325A1B013 /dev/disk/by-id/ata-HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651 /dev/cdrw /dev/dvd /dev/dvdrw /dev/disk/by-label/A_NEW_HOPE /dev/cdrom /dev/disk/by-path/pci-0000:00:1f.2-ata-6
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0
    DEVTYPE=disk
    ID_ATA=1
    ID_ATA_FEATURE_SET_PM=1
    ID_ATA_FEATURE_SET_PM_ENABLED=1
    ID_ATA_SATA=1
    ID_ATA_SATA_SIGNAL_RATE_GEN1=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_HDDVD=1
    ID_CDROM_MEDIA=1
    ID_CDROM_MEDIA_BD=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_1f_2-ata-6
    ID_FS_LABEL=A_NEW_HOPE
    ID_FS_LABEL_ENC=A_NEW_HOPE
    ID_FS_TYPE=udf
    ID_FS_USAGE=filesystem
    ID_FS_UUID=8CE00A2325A1B013
    ID_FS_UUID_ENC=8CE00A2325A1B013
    ID_MODEL=HL-DT-ST_BDDVDRW_GGC-H20L
    ID_MODEL_ENC=HL-DT-ST\x20BDDVDRW\x20GGC-H20L\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    ID_PATH=pci-0000:00:1f.2-ata-6
    ID_PATH_TAG=pci-0000_00_1f_2-ata-6
    ID_REVISION=1.03
    ID_SERIAL=HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651
    ID_SERIAL_SHORT=K5D7CKF1651
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    TAGS=:seat:uaccess:systemd:
    USEC_INITIALIZED=4104816
    identified udf
    found A_NEW_HOPE on /dev/sr0
    identified udf as video
    Obtained Title A New Hope (2011)
    got to here
    HAS_NICE_TITLE is true
    video title is now A New Hope (2011)
    video type is fail
    Starting video_rip.sh
    Video Title is A New Hope (2011)
    Ripping video A_NEW_HOPE from /dev/sr0
    Using backup method of ripping.
    MSG:1005,0,1,”MakeMKV v1.10.8 linux(x64-release) started”,”%1 started”,”MakeMKV v1.10.8 linux(x64-release)”
    DRV:0,2,999,28,”HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03″,”A_NEW_HOPE”,”/dev/sr0″
    DRV:1,256,999,0,””,””,””
    DRV:2,256,999,0,””,””,””
    DRV:3,256,999,0,””,””,””
    DRV:4,256,999,0,””,””,””
    DRV:5,256,999,0,””,””,””
    DRV:6,256,999,0,””,””,””
    DRV:7,256,999,0,””,””,””
    DRV:8,256,999,0,””,””,””
    DRV:9,256,999,0,””,””,””
    DRV:10,256,999,0,””,””,””
    DRV:11,256,999,0,””,””,””
    DRV:12,256,999,0,””,””,””
    DRV:13,256,999,0,””,””,””
    DRV:14,256,999,0,””,””,””
    DRV:15,256,999,0,””,””,””
    MSG:5072,0,1,”Backing up disc into folder \”/md0/ARM/raw//A New Hope (2011)_20171226_123307/\””,”Backing up disc into folder \”%1\””,”/md0/ARM/raw//A New Hope (2011)_20171226_123307/”
    MSG:3317,16777216,1,”Loaded 14 SVQ file(s)”,”Loaded %1 SVQ file(s)”,”14″
    MSG:3326,0,0,”Processing BD+ code, please be patient – this may take up to few minutes”,”Processing BD+ code, please be patient – this may take up to few minutes”
    MSG:3324,0,1,”Processing BD+ code using generic SVQ from builtin/generic.svq”,”Processing BD+ code using generic SVQ from %1″,”builtin/generic.svq”
    MSG:3328,0,2,”BD+ code processed, got 1 FUT(s) for 1 clip(s)”,”BD+ code processed, got %1 FUT(s) for %2 clip(s)”,”1″,”1″
    MSG:5085,0,0,”Loaded content hash table, will verify integrity of M2TS files.”,”Loaded content hash table, will verify integrity of M2TS files.”
    MSG:2003,0,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDMV/STREAM/00304.m2ts’ at offset ‘320077824’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDMV/STREAM/00304.m2ts”,”320077824″
    MSG:5069,128,0,”Backup failed”,”Backup failed”
    MSG:5080,516,0,”Backup failed.”,”Backup failed.”
    STAT: A_NEW_HOPE ripped in 0 hours, 8 minutes and 50 seconds.
    /opt/arm/video_transcode.sh “/md0/ARM/raw//A New Hope (2011)_20171226_123307” “A New Hope (2011)” “true” “fail” “20171226_123307” “/opt/arm/logs/A_NEW_HOPE.log”
    A New Hope (2011) sent to transcoding queue…
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Congratulations! You’ve fired the arm_event event
    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled
    Start video transcoding script
    transcoding with a nice title
    directory already exists… adding timestamp
    Transcoding all files.
    Transcoding file 0012FA
    [12:42:58] hb_init: starting libhb thread
    [12:42:58] thread 7f653314b700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_123307/0012FA…
    [12:42:58] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:42:58] – logical processor count: 4
    [12:42:58] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_123307/0012FA, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:42:58] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:42:58] dvd: not a dvd – trying as a stream/file instead
    [12:42:58] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_123307/0012FA/disc.bbd
    [12:42:58] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_123307/0012FA/disc.bbd failed
    [12:42:58] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file BDMV
    [12:42:58] hb_init: starting libhb thread
    [12:42:58] thread 7f4babc7a700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_123307/BDMV…
    [12:42:58] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:42:58] – logical processor count: 4
    [12:42:58] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_123307/BDMV, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:42:58] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:42:58] dvd: not a dvd – trying as a stream/file instead
    [12:42:58] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_123307/BDMV/MovieObject.bdmv
    [mp3 @ 0x7f4ba4004540] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_123307/BDMV/MovieObject.bdmv’:
    Duration: 00:00:02.67, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: mp1
    44100 Hz, stereo, s16p, 160 kb/s
    [12:42:58] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_123307/BDMV/MovieObject.bdmv failed
    [12:42:58] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file CERTIFICATE
    [12:42:58] hb_init: starting libhb thread
    [12:42:58] thread 7f7178e1d700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_123307/CERTIFICATE…
    [12:42:58] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:42:58] – logical processor count: 4
    [12:42:58] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_123307/CERTIFICATE, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:42:58] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:42:58] dvd: not a dvd – trying as a stream/file instead
    [12:42:58] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_123307/CERTIFICATE/app.discroot.crt
    [mp3 @ 0x7f71700049a0] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_123307/CERTIFICATE/app.discroot.crt’:
    Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: mp2
    0 channels, s16p
    [12:42:58] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_123307/CERTIFICATE/app.discroot.crt failed
    [12:42:58] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file MAKEMKV
    [12:42:58] hb_init: starting libhb thread
    [12:42:58] thread 7fbac334b700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_123307/MAKEMKV…
    [12:42:58] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:42:58] – logical processor count: 4
    [12:42:58] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_123307/MAKEMKV, title_index=1
    aacs.c:470: Error calculating media key. Missing right processing key ?
    mmc_device_linux.c:178: No MMC drive mounted to /md0/ARM/raw/A New Hope (2011)_20171226_123307/MAKEMKV
    mmc.c:376: AACS not active or supported by the drive

    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %aacs.c:110: No usable AACS libraries found!
    dec.c:197: aacs_open() failed: -3!
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:42:59] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:42:59] dvd: not a dvd – trying as a stream/file instead
    [12:42:59] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_123307/MAKEMKV/discattd.dat
    [12:42:59] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_123307/MAKEMKV/discattd.dat failed
    [12:42:59] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    STAT: A New Hope (2011) transcoded in 0 hours, 0 minutes and 2 seconds.
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Congratulations! You’ve fired the arm_event event
    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled
    *** Start config parameters ****
    Timestamp: Tue, 26 Dec 2017 12:51:22 -0700
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    ARMPATH=”/md1/ARM/Movies/”
    RAWPATH=”/md0/ARM/raw/”
    MEDIA_DIR=”/md1/Media/Movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    LOG_SINGLE_FILE=false
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=true
    CHOWN_USER=server-admin
    CHOWN_GROUP=server-admin
    MINLENGTH=”600″
    RIPMETHOD=”backup”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=true
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=true
    NOTIFY_RIP=true
    NOTIFY_TRANSCODE=true
    IFTTT_EVENT=”arm_event”
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/dvd /dev/dvdrw /dev/disk/by-label/A_NEW_HOPE /dev/disk/by-uuid/8CE00A2325A1B013 /dev/disk/by-id/ata-HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651 /dev/cdrom /dev/disk/by-path/pci-0000:00:1f.2-ata-6 /dev/cdrw
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0
    DEVTYPE=disk
    ID_ATA=1
    ID_ATA_FEATURE_SET_PM=1
    ID_ATA_FEATURE_SET_PM_ENABLED=1
    ID_ATA_SATA=1
    ID_ATA_SATA_SIGNAL_RATE_GEN1=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_HDDVD=1
    ID_CDROM_MEDIA=1
    ID_CDROM_MEDIA_BD=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_1f_2-ata-6
    ID_FS_LABEL=A_NEW_HOPE
    ID_FS_LABEL_ENC=A_NEW_HOPE
    ID_FS_TYPE=udf
    ID_FS_USAGE=filesystem
    ID_FS_UUID=8CE00A2325A1B013
    ID_FS_UUID_ENC=8CE00A2325A1B013
    ID_MODEL=HL-DT-ST_BDDVDRW_GGC-H20L
    ID_MODEL_ENC=HL-DT-ST\x20BDDVDRW\x20GGC-H20L\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    ID_PATH=pci-0000:00:1f.2-ata-6
    ID_PATH_TAG=pci-0000_00_1f_2-ata-6
    ID_REVISION=1.03
    ID_SERIAL=HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651
    ID_SERIAL_SHORT=K5D7CKF1651
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    TAGS=:seat:uaccess:systemd:
    USEC_INITIALIZED=4104816
    identified udf
    found A_NEW_HOPE on /dev/sr0
    identified udf as video
    Obtained Title A New Hope (2011)
    got to here
    HAS_NICE_TITLE is true
    video title is now A New Hope (2011)
    video type is fail
    Starting video_rip.sh
    Video Title is A New Hope (2011)
    Ripping video A_NEW_HOPE from /dev/sr0
    Using backup method of ripping.
    MSG:1005,0,1,”MakeMKV v1.10.8 linux(x64-release) started”,”%1 started”,”MakeMKV v1.10.8 linux(x64-release)”
    DRV:0,2,999,28,”HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03″,”A_NEW_HOPE”,”/dev/sr0″
    DRV:1,256,999,0,””,””,””
    DRV:2,256,999,0,””,””,””
    DRV:3,256,999,0,””,””,””
    DRV:4,256,999,0,””,””,””
    DRV:5,256,999,0,””,””,””
    DRV:6,256,999,0,””,””,””
    DRV:7,256,999,0,””,””,””
    DRV:8,256,999,0,””,””,””
    DRV:9,256,999,0,””,””,””
    DRV:10,256,999,0,””,””,””
    DRV:11,256,999,0,””,””,””
    DRV:12,256,999,0,””,””,””
    DRV:13,256,999,0,””,””,””
    DRV:14,256,999,0,””,””,””
    DRV:15,256,999,0,””,””,””
    MSG:5072,0,1,”Backing up disc into folder \”/md0/ARM/raw//A New Hope (2011)_20171226_125125/\””,”Backing up disc into folder \”%1\””,”/md0/ARM/raw//A New Hope (2011)_20171226_125125/”
    MSG:3317,16777216,1,”Loaded 14 SVQ file(s)”,”Loaded %1 SVQ file(s)”,”14″
    MSG:3326,0,0,”Processing BD+ code, please be patient – this may take up to few minutes”,”Processing BD+ code, please be patient – this may take up to few minutes”
    MSG:3324,0,1,”Processing BD+ code using generic SVQ from builtin/generic.svq”,”Processing BD+ code using generic SVQ from %1″,”builtin/generic.svq”
    MSG:3328,0,2,”BD+ code processed, got 1 FUT(s) for 1 clip(s)”,”BD+ code processed, got %1 FUT(s) for %2 clip(s)”,”1″,”1″
    MSG:5085,0,0,”Loaded content hash table, will verify integrity of M2TS files.”,”Loaded content hash table, will verify integrity of M2TS files.”
    MSG:2003,0,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03’ at offset ‘76541952’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03″,”76541952″
    MSG:2003,16777216,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDSVM/BACKUP/00002.svm’ at offset ‘2070528’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDSVM/BACKUP/00002.svm”,”2070528″
    MSG:2003,0,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDSVM/BACKUP/00002.svm’ at offset ‘2070528’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDSVM/BACKUP/00002.svm”,”2070528″
    MSG:2003,16777216,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDSVM/BACKUP/00002.svm’ at offset ‘2070528’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDSVM/BACKUP/00002.svm”,”2070528″
    MSG:2003,0,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDSVM/BACKUP/00002.svm’ at offset ‘2070528’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDSVM/BACKUP/00002.svm”,”2070528″
    MSG:2003,16777216,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘/BDSVM/BACKUP/00002.svm’ at offset ‘2070528’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”/BDSVM/BACKUP/00002.svm”,”2070528″
    MSG:2003,0,3,”Error ‘Scsi error – NOT READY:MEDIUM NOT PRESENT’ occurred while reading ‘HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03’ at offset ‘76541952’”,”Error ‘%1’ occurred while reading ‘%2’ at offset ‘%3′”,”Scsi error – NOT READY:MEDIUM NOT PRESENT”,”HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03″,”76541952″
    MSG:5069,128,0,”Backup failed”,”Backup failed”
    MSG:5080,516,0,”Backup failed.”,”Backup failed.”
    STAT: A_NEW_HOPE ripped in 0 hours, 0 minutes and 40 seconds.
    /opt/arm/video_transcode.sh “/md0/ARM/raw//A New Hope (2011)_20171226_125125” “A New Hope (2011)” “true” “fail” “20171226_125125” “/opt/arm/logs/A_NEW_HOPE.log”
    A New Hope (2011) sent to transcoding queue…
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Start video transcoding script
    transcoding with a nice title
    Transcoding all files.
    Transcoding file 0012FA
    [12:52:05] hb_init: starting libhb thread
    [12:52:05] thread 7f39101f2700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125125/0012FA…
    [12:52:05] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:52:05] – logical processor count: 4
    [12:52:05] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125125/0012FA, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:52:05] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:52:05] dvd: not a dvd – trying as a stream/file instead
    [12:52:05] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125125/0012FA failed
    [12:52:05] scan: unrecognized file type
    [12:52:05] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file BDMV
    [12:52:06] hb_init: starting libhb thread
    [12:52:06] thread 7f4fab7e4700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125125/BDMV…
    [12:52:06] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:52:06] – logical processor count: 4
    [12:52:06] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125125/BDMV, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:52:06] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:52:06] dvd: not a dvd – trying as a stream/file instead
    [12:52:06] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125125/BDMV/MovieObject.bdmv
    [mp3 @ 0x7f4fa4004540] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_125125/BDMV/MovieObject.bdmv’:
    Duration: 00:00:02.67, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: mp1
    44100 Hz, stereo, s16p, 160 kb/s
    [12:52:06] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125125/BDMV/MovieObject.bdmv failed
    [12:52:06] libhb: scan thread found 0 valid title(s)
    Congratulations! You’ve fired the arm_event eventNo title found.

    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled
    HandBrake has exited.
    Transcoding file CERTIFICATE
    [12:52:06] hb_init: starting libhb thread
    [12:52:06] thread 7f7cdcabc700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125125/CERTIFICATE…
    [12:52:06] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:52:06] – logical processor count: 4
    [12:52:06] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125125/CERTIFICATE, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:52:06] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:52:06] dvd: not a dvd – trying as a stream/file instead
    [12:52:06] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125125/CERTIFICATE/app.discroot.crt
    [mp3 @ 0x7f7cd40049a0] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_125125/CERTIFICATE/app.discroot.crt’:
    Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: mp2
    0 channels, s16p
    [12:52:06] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125125/CERTIFICATE/app.discroot.crt failed
    [12:52:06] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file MAKEMKV
    [12:52:06] hb_init: starting libhb thread
    [12:52:06] thread 7f2409069700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125125/MAKEMKV…
    [12:52:06] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [12:52:06] – logical processor count: 4
    [12:52:06] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125125/MAKEMKV, title_index=1
    aacs.c:470: Error calculating media key. Missing right processing key ?
    mmc_device_linux.c:178: No MMC drive mounted to /md0/ARM/raw/A New Hope (2011)_20171226_125125/MAKEMKV
    mmc.c:376: AACS not active or supported by the drive

    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %aacs.c:110: No usable AACS libraries found!
    dec.c:197: aacs_open() failed: -3!
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [12:52:07] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [12:52:07] dvd: not a dvd – trying as a stream/file instead
    [12:52:07] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125125/MAKEMKV/discattd.dat
    [12:52:07] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125125/MAKEMKV/discattd.dat failed
    [12:52:07] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    STAT: A New Hope (2011) transcoded in 0 hours, 0 minutes and 2 seconds.
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Congratulations! You’ve fired the arm_event event
    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled
    *** Start config parameters ****
    Timestamp: Tue, 26 Dec 2017 12:56:40 -0700
    ARM_CHECK_UDF=true
    GET_VIDEO_TITLE=true
    SKIP_TRANSCODE=false
    ARMPATH=”/md1/ARM/Movies/”
    RAWPATH=”/md0/ARM/raw/”
    MEDIA_DIR=”/md1/Media/Movies/”
    LOGPATH=”/opt/arm/logs/”
    LOGLIFE=1
    LOG_SINGLE_FILE=false
    SET_MEDIA_PERMISSIONS=false
    CHMOD_VALUE=777
    SET_MEDIA_OWNER=true
    CHOWN_USER=server-admin
    CHOWN_GROUP=server-admin
    MINLENGTH=”600″
    RIPMETHOD=”backup”
    MKV_ARGS=””
    HB_PRESET=”High Profile”
    DEST_EXT=mkv
    HANDBRAKE_CLI=HandBrakeCLI
    MAINFEATURE=true
    HB_ARGS=”–subtitle scan -F”
    PLEX_SUPPORT=true
    NOTIFY_RIP=true
    NOTIFY_TRANSCODE=true
    IFTTT_EVENT=”arm_event”
    *** End config parameters ****
    Starting Identify Script…
    Deleting 0 old log files:
    DEVLINKS=/dev/dvdrw /dev/cdrom /dev/dvd /dev/disk/by-path/pci-0000:00:1f.2-ata-6 /dev/disk/by-label/A_NEW_HOPE /dev/disk/by-id/ata-HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651 /dev/cdrw /dev/disk/by-uuid/8CE00A2325A1B013
    DEVNAME=/dev/sr0
    DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0
    DEVTYPE=disk
    ID_ATA=1
    ID_ATA_FEATURE_SET_PM=1
    ID_ATA_FEATURE_SET_PM_ENABLED=1
    ID_ATA_SATA=1
    ID_ATA_SATA_SIGNAL_RATE_GEN1=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_HDDVD=1
    ID_CDROM_MEDIA=1
    ID_CDROM_MEDIA_BD=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_CDROM_MRW=1
    ID_CDROM_MRW_W=1
    ID_FOR_SEAT=block-pci-0000_00_1f_2-ata-6
    ID_FS_LABEL=A_NEW_HOPE
    ID_FS_LABEL_ENC=A_NEW_HOPE
    ID_FS_TYPE=udf
    ID_FS_USAGE=filesystem
    ID_FS_UUID=8CE00A2325A1B013
    ID_FS_UUID_ENC=8CE00A2325A1B013
    ID_MODEL=HL-DT-ST_BDDVDRW_GGC-H20L
    ID_MODEL_ENC=HL-DT-ST\x20BDDVDRW\x20GGC-H20L\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
    ID_PATH=pci-0000:00:1f.2-ata-6
    ID_PATH_TAG=pci-0000_00_1f_2-ata-6
    ID_REVISION=1.03
    ID_SERIAL=HL-DT-ST_BDDVDRW_GGC-H20L_K5D7CKF1651
    ID_SERIAL_SHORT=K5D7CKF1651
    ID_TYPE=cd
    MAJOR=11
    MINOR=0
    SUBSYSTEM=block
    TAGS=:seat:systemd:uaccess:
    USEC_INITIALIZED=4684756
    identified udf
    found A_NEW_HOPE on /dev/sr0
    identified udf as video
    Obtained Title A New Hope (2011)
    got to here
    HAS_NICE_TITLE is true
    video title is now A New Hope (2011)
    video type is fail
    Starting video_rip.sh
    Video Title is A New Hope (2011)
    Ripping video A_NEW_HOPE from /dev/sr0
    Using backup method of ripping.
    MSG:1005,0,1,”MakeMKV v1.10.8 linux(x64-release) started”,”%1 started”,”MakeMKV v1.10.8 linux(x64-release)”
    DRV:0,2,999,28,”HD-DVD-ROM HL-DT-ST BDDVDRW GGC-H20L 1.03″,”A_NEW_HOPE”,”/dev/sr0″
    DRV:1,256,999,0,””,””,””
    DRV:2,256,999,0,””,””,””
    DRV:3,256,999,0,””,””,””
    DRV:4,256,999,0,””,””,””
    DRV:5,256,999,0,””,””,””
    DRV:6,256,999,0,””,””,””
    DRV:7,256,999,0,””,””,””
    DRV:8,256,999,0,””,””,””
    DRV:9,256,999,0,””,””,””
    DRV:10,256,999,0,””,””,””
    DRV:11,256,999,0,””,””,””
    DRV:12,256,999,0,””,””,””
    DRV:13,256,999,0,””,””,””
    DRV:14,256,999,0,””,””,””
    DRV:15,256,999,0,””,””,””
    MSG:5072,0,1,”Backing up disc into folder \”/md0/ARM/raw//A New Hope (2011)_20171226_125642/\””,”Backing up disc into folder \”%1\””,”/md0/ARM/raw//A New Hope (2011)_20171226_125642/”
    MSG:3317,16777216,1,”Loaded 14 SVQ file(s)”,”Loaded %1 SVQ file(s)”,”14″
    MSG:3326,0,0,”Processing BD+ code, please be patient – this may take up to few minutes”,”Processing BD+ code, please be patient – this may take up to few minutes”
    MSG:3324,0,1,”Processing BD+ code using generic SVQ from builtin/generic.svq”,”Processing BD+ code using generic SVQ from %1″,”builtin/generic.svq”
    MSG:3328,0,2,”BD+ code processed, got 1 FUT(s) for 1 clip(s)”,”BD+ code processed, got %1 FUT(s) for %2 clip(s)”,”1″,”1″
    MSG:5085,0,0,”Loaded content hash table, will verify integrity of M2TS files.”,”Loaded content hash table, will verify integrity of M2TS files.”
    MSG:5070,128,0,”Backup done”,”Backup done”
    MSG:5081,260,0,”Backup done.”,”Backup done.”
    STAT: A_NEW_HOPE ripped in 0 hours, 53 minutes and 12 seconds.
    /opt/arm/video_transcode.sh “/md0/ARM/raw//A New Hope (2011)_20171226_125642” “A New Hope (2011)” “true” “fail” “20171226_125642” “/opt/arm/logs/A_NEW_HOPE.log”
    A New Hope (2011) sent to transcoding queue…
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Congratulations! You’ve fired the arm_event event
    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled
    Start video transcoding script
    transcoding with a nice title
    Transcoding all files.
    Transcoding file 0012FA
    [13:50:54] hb_init: starting libhb thread
    [13:50:54] thread 7fecf2b08700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125642/0012FA…
    [13:50:54] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [13:50:54] – logical processor count: 4
    [13:50:54] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125642/0012FA, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [13:50:54] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [13:50:54] dvd: not a dvd – trying as a stream/file instead
    [13:50:54] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125642/0012FA/disc.bbd
    [13:50:54] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125642/0012FA/disc.bbd failed
    [13:50:54] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file BDMV
    [13:50:55] hb_init: starting libhb thread
    [13:50:55] thread 7fa4acafa700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125642/BDMV…
    [13:50:55] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [13:50:55] – logical processor count: 4
    [13:50:55] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125642/BDMV, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [13:50:55] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [13:50:55] dvd: not a dvd – trying as a stream/file instead
    [13:50:55] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125642/BDMV/MovieObject.bdmv
    [mp3 @ 0x7fa4a4004540] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_125642/BDMV/MovieObject.bdmv’:
    Duration: 00:00:02.67, start: 0.000000, bitrate: 160 kb/s
    Stream #0:0: Audio: mp1
    44100 Hz, stereo, s16p, 160 kb/s
    [13:50:55] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125642/BDMV/MovieObject.bdmv failed
    [13:50:55] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file CERTIFICATE
    [13:50:55] hb_init: starting libhb thread
    [13:50:55] thread 7f9117729700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125642/CERTIFICATE…
    [13:50:55] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [13:50:55] – logical processor count: 4
    [13:50:55] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125642/CERTIFICATE, title_index=1
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [13:50:55] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [13:50:55] dvd: not a dvd – trying as a stream/file instead
    [13:50:55] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125642/CERTIFICATE/app.discroot.crt
    [mp3 @ 0x7f91100049a0] Header missing
    Input #0, mp3, from ‘/md0/ARM/raw//A New Hope (2011)_20171226_125642/CERTIFICATE/app.discroot.crt’:
    Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: mp2
    0 channels, s16p
    [13:50:55] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125642/CERTIFICATE/app.discroot.crt failed
    [13:50:55] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    Transcoding file MAKEMKV
    [13:50:55] hb_init: starting libhb thread
    [13:50:55] thread 7fbad9324700 started (“libhb”)
    HandBrake 1.0.4 (2017040900) – Linux x86_64 – https://handbrake.fr
    4 CPUs detected
    Opening /md0/ARM/raw//A New Hope (2011)_20171226_125642/MAKEMKV…
    [13:50:55] CPU: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
    [13:50:55] – logical processor count: 4
    [13:50:55] hb_scan: path=/md0/ARM/raw//A New Hope (2011)_20171226_125642/MAKEMKV, title_index=1
    aacs.c:470: Error calculating media key. Missing right processing key ?
    mmc_device_linux.c:178: No MMC drive mounted to /md0/ARM/raw/A New Hope (2011)_20171226_125642/MAKEMKV
    mmc.c:376: AACS not active or supported by the drive

    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %
    Scanning title 1 of 1, 0.00 %aacs.c:110: AACS not active or supported by the drive
    dec.c:197: aacs_open() failed: -3!
    disc.c:352: error opening file BDMV/index.bdmv
    disc.c:352: error opening file BDMV/BACKUP/index.bdmv
    [13:50:56] bd: not a bd – trying as a stream/file instead
    libdvdnav: Using dvdnav version 5.0.1
    libdvdread: Couldn’t find device name.
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.IFO failed
    libdvdread:DVDOpenFilePath:findDVDFile /VIDEO_TS/VIDEO_TS.BUP failed
    libdvdread: Can’t open file VIDEO_TS.IFO.
    libdvdnav: vm: failed to read VIDEO_TS.IFO
    [13:50:56] dvd: not a dvd – trying as a stream/file instead
    [13:50:56] batch: scanning /md0/ARM/raw//A New Hope (2011)_20171226_125642/MAKEMKV/discattd.dat
    [13:50:56] hb_stream_open: open /md0/ARM/raw//A New Hope (2011)_20171226_125642/MAKEMKV/discattd.dat failed
    [13:50:56] libhb: scan thread found 0 valid title(s)
    No title found.
    HandBrake has exited.
    STAT: A New Hope (2011) transcoded in 0 hours, 0 minutes and 2 seconds.
    Pushbullet notifications not enabled
    Sending IFTTT notification
    Congratulations! You’ve fired the arm_event event
    IFTTT notification sentPusover notifications not enabled
    EMail notifications not enabled

    Reply
  118. So after a bit more poking around, it doesn’t appear that Plex can handle menus, extras, and such from a MakeMKV decrypted backup. Would be interested to hear if anyone knows a media server that would handle such things, as well as why HandBrake doesn’t seem to play nice with the “backup” rip method. Thanks again.

    Reply
    • Plex supports a variety of “containers” for your media, but they need to be actual media containers. A disc image is NOT a media container, and is not supported.

      MKV, M4V, MP4, etc. – those are all media containers and are supported.

      The ability to support a FULL disc image is not common, especially since the app that will be accessing typically doesn’t understand how to navigate the file system and leverage the menus.

      Plex supports having multiple files in place for a singular movie – what are you trying to accomplish? You stated you wanted support for the menu, but why? What are you trying to achieve?

      If you have specific things you’re looking to be able to do, head over to the Plex forums for better assistance on how to achieve your goals using Plex.

      Reply
  119. Ideally, I’d like to have a set up that lets me replicate the whole blu-ray experience (menus, extras, etc) without having to keep a blu-ray player and pile of discs in my tv room. While it looks like other media servers support something like this–or may in the future– as you mentioned it doesn’t appear that Plex does.

    Even if my ideal set up isn’t possible/feasible, I’d still like to be able to use the “backup” rip method in order to be able to use the main feature identification option. If anyone has any input as to why HandBrake fails transcoding a disc ripped with the “backup” option as seen in the log file I pasted above, I’d love to hear it. Thanks again.

    Reply
  120. Hello,
    The ARM is working well on my system. Thank you for all the effort that has been invested in this project. I don’t have a dedicated machine just for ARM. So now that I have several ISO files backed up on my system, it seems each time I try to mount it to use the files in the image, ARM jumps into action creates a new copy and unmounts the iso. Is there an easy way to disable ARM so that I can use an ISO file mounted on my system, or to use a DVD/CD that I do not wish to rip?

    Thank you for considering.

    Reply
  121. Would you be up for building an ARM machine that is Plug n Play? I’m installing a big multimedia system using Kodi and I’m now looking at how to get the movies on to the system and your A.R.M loks like the best out there.

    Reply
  122. I have a similar requirement – I’d like to have a way of inserting a DVD and a popup opens asking if I want toplay the DVD directly or rip it. I can do the pop up OK with Notify-Send, and play the DVD (on VLC Plyaer for example) but I would be grateful for advice on how to start the ARM after I’ve detected the disk and answered the popup to rip the disk.

    Reply
  123. Thanks Ben for building out this fantastic script. I’ve got it up and running (my few bumps were abcde writing to your mount point set in .abcde.conf not to the directory I thought I set in config, and a chmod +x on the service) and sorted out most of my issues.

    I’m pondering how to deal with duff CDs/DVDs/BluRays – when the optical media cannot be read. Right now it just tries for several hours (I’m encoding to flac and it just won’t get the next track) until I eject the media.

    Reply
    • You’re welcome. Not much you can do about bad discs, often it won’t rip at all instead of skipping over the bad parts.. if you have two drives try the other drive, I’ve found regular DVD drives are less susceptible to scratches than Blu-Ray.

      Reply
  124. First of all, thank you Benjamin for the scripts. This was exactly the sort of thing I’ve been looking for, I installed it yesterday and have working almost perfectly for ripping my DVD movie collection.

    I’m having a small issue with it that I’m hoping someone can help me with.

    All I’m interested in getting is the movie from each disc, and ideally I want to rip as many discs as possible using makemkv and then leave the PC for a day or overnight to process the handbrake queue.

    I tried choosing the “main feature” option in the config file but I think handbrake then was trying to rip and transcode directly from the disc so the disc didn’t get ejected quickly. If I leave that option as false and rip method as mkv then it works as I would like where the disc is ejected after 10 minutes or so, I can pop in another disc to rip and so on and in the background handbrake is slowly working through the queue. This means though that I end up with all the extras and other titles from the disc in the handbrake queue that I’m not interested in.

    I’m assuming I’m missing something but is there an easy way to get makemkv to rip just the main title and pass it off to handbrake to transcode?

    Also, can I have the .mkv file be given the dvd title as well as the parent folder it sits in?

    Not a big deal for either thing if not, as it’s just a little extra tidy up before I move the files off to my plex server anyway but it would nice to not have to delete extras or rename movie files if I could.

    thanks again,

    MK

    Reply
  125. Ben, Thanks for all the great work here, but I’m running into a problem and not sure where I went wrong. I can dump the empty.log if you’d like, but I figured I’d check first since it’s rather large and don’t want to bung up your comments with a 250 line log.

    I can rip successfully with “makemkvcon -r –minlength=120 mkv dev:/dev/sr0 all /var/tmp/RIP/testdir/” and that dumps titles of a TV Series DVD I have just fine. If I let ARM try to run it i dumps out with stuff to the effect of “drive seems empty, not ejecting”. I can’t believe it’s a problem with libdvdcss as makemkvcon dumps an MKV for all 4 titles on the disk fine.

    This is running on a recent install of CentOS 7. Not sure where I went wrong here. Any advice/info is greatly appreciated. Thanks!

    Reply
  126. Interesting. I also found an “unable to identify” in that same log output. Going along those lines I thought given some of the other comments I’ve read here that I should check to see if the ID_FS_TYPE is being found with udevadm info and it is NOT.

    udevadm info -q env -n /dev/sr0

    It is found this way though:
    udevadm test-builtin blkid /sys/class/block/sr0

    Guessing I can modify the identify script to use the blkid example above to get around this?

    Reply
    • Hi, Brad. Thanks for using the ARM! Changing the blkid is a good start. It’s possible Centos’s udevadm doesn’t return as much data as Ubuntu. If that doesn’t work report the issue on GitHub and attach the log, folks there are very willing to help.

      Reply
  127. Yes! That was it. I added the blkid stuff to the arm wrapper for ID_FS_TYPE and LABEL. That fixed finding the correct label/type. But it seems even after that, I ran into a new problem and the ${DEVNAME} wasn’t being passed to the identify script. Found that out by adding a bunch of echo’s in there for $DEVNAME. Always came out empty/null. Also realized the udf data/video mount check was failing because of it. Fixed that by hardcoding it for now just to get it working.

    Next problem was these stupid DVD’s I’m using(ripping a TV Series set for family) have the VIDEO_TS folder as video_ts.
    IE ${VAR ,,} so then the udf data/video check failed there as well as the identify script was only checking upper case VIDEO_TS. Added a quick lower check in there and IT’S ALIVE! It’s ugly, but it works.

    Now I have one last problem. The udev dvd/cd insertion check. That action==change picks up when a dvd is inserted and starts the service, but problem I’ve run into, at least on this centos box is that when the ripping completes and ejects the disc, it detects that eject as a change as well and runs the service all over again, yanking the disc back in. This creates a fun loop to watch: Insert disc -> disc gets ripped – disc ejects -> dvd tray autocloses – disc gets ripped – disc ejects -> ad infinitum. ROFLMAO! Clearly I did something wrong here.

    Still… This is great stuff and most of my problems are probably due to MY installation. This is going to make my life so much easier as I tweak/tune it to my needs.

    Reply
  128. I tried using the ARM under Hyper-V.
    With the work of the ISCSI Server Software “iStorageServer” i created a Target for the DVD-ROM of the host.
    Connected it with
    iscsiadm –mode discoverydb –type sendtargets –portal 192.168.176.51 –discover
    iscsiadm –mode node –login

    Worked so far. I get /dev/sr1 – /dev/sr8
    But the automation won’t work correct. When entering a CD it said in the empty.log that it tried /dev/sr6 for example and can’t identify something on it.
    Using abcde -d /dev/sr6 gives the following error:
    Executing customizable pre-read function… done.
    Getting CD track info… [WARNING] something went wrong while querying the CD… Maybe a DATA CD?
    [WARNING] Error trying to calculate disc ids without lead-out information.

    Using abcde -d /dev/sr1 starts ripping… Any Idea?

    Reply
  129. Hi Tim,

    It appears that Run Lola Run is in German. So you should be using something like this in the XML file.

    app_DefaultSelectionString=”-sel:all,+sel:(ger|nolang),-sel:core,-sel:havelossless”

    This should rip German HD audio track if it is a bluray, or choose the German lossy track if it is a DVD.

    Let me know if this works for you.

    Reply
  130. Ben –
    1. Thank you for this!!! This has been fun to create and play with
    2. Going to make getting my parents old cd collection digitized faster so they can add it to their smartphones or ply it on thier computers

    I am running in to an issue with the Music converting right now. I went to the link for Andrew’s Corner and i have applied his whole script to abcde.conf file and commented out which codecs i want to use. If I use FLAC it works like a champ. When i flip it over to LAME nothing happens. I do have LAME installed and i looked and it is under /usr/bin/lame. I have even specified it in the config and the conversion looks at me and says…. Yeah and your point?!?

    Here are my specs:
    Ubuntu 18.04 LTS Virtual machine
    Panasonic Blu-ray drive
    4gb ram
    60 GB HDD
    fstab entry point for my nas to put the music files

    I have racked my brain. Ive looked at the logs and no where do they tell me what the issue is. when i pull up the log directory i do see a new empty.log file created and it looks like several entries repeat themselves several times. too bad the log puts in everything and not what was actually happens. Would make going through the log a little easier and not trying to parse through over 200 lines.

    Reply
  131. Well i finnaly figured out my issue. First off as of today the following package has been depreciated:
    mp3gain – not sure why lame is req it during the abcde execution. I have created my own installer steps.

    Step 1 – Install Ubuntu 18.04 LTS

    Step 2 – here is my installer layout
    :
    sudo apt-get install git
    sudo add-apt-repository ppa:heyarje/makemkv-beta
    sudo add-apt-repository ppa:stebbins/handbrake-releases
    sudo add-apt-repository ppa:mc3man/xerus-media
    sudo add-apt-repository ppa:flexiondotorg/audio
    sudo apt update
    sudo apt install handbrake-cli libavcodec-extra makemkv-bin makemkv-oss abcde flac
    sudo apt install imagemagick glyrc cdparanoia lame mp3gain at
    sudo apt install cifs-utiils python3 python3-pip ibdvd-pkg
    sudo dpkg-reconfigure libdvd-pkg
    sudo su
    cd /opt
    git clone https://github.com/automatic-ripping-machine/automatic-ripping-machine.git arm
    cd arm
    pip install eyeD3
    pip install -r requirements.txt
    ln -s /opt/arm/51-automedia.rules /lib/udev/rules.d/
    ln -s /opt/arm/.abcde.conf /root/
    cp /opt/arm/[email protected] /etc/systemd/system/
    cp config.sample config
    mkdir /mnt/arm
    touch /root/.creds
    nano /etc/fstab

    Step 3 – in the .creds file i have:
    username=username
    password=password

    Step 4 – When adding my Freenas server i choose to use the creds file when mounting the directory with cifs

    Step 5 – using the script for all encoders found here: http://www.andrews-corner.org/linux/abcde/index.html
    I made 1 small tweak. The output of the files and the next 2 sections i copied from the default .abcde.conf file on git

    Step 6 – Ran abcde 1st time to test to make sure there were no other dependencies

    Once abcde has all the bugs worked out and tweaked i will move on to the movies

    took me 8+ hours to figure out all this stuff out. I hope that my pains will help someone else out there to get this working allot quicker

    Reply
  132. well the instructions i posted work great. ARM does the following:
    1. Rips Music to MP3
    2. Rips Movies
    3. Rips TV Shows

    Only problem i am running in to is the naming of the movies/tv show files. I have looked and looked and for the life of me I cannot figure out how to pass an argument to MakeMKVCLI so when it dumps the file to name it:
    /mnt/arm/raw/{source_folder_name}/{source}-{title}
    I do not mind the 00, 01, 02 etc attached but it would be nice if the file contained the Disc Title.

    Anyone have any ideas?

    Reply
  133. I rip my stuff for KODI running on my network. I made (with the help of some friends) made a script that changes the 00.mkv file to the folder_name.mkv then it takes everything else and puts in in new folder called “extras” on my KODI install I tell the collection scanner to ignore anything in “extras” this way I don’t end up with 10 entries for each movie. It gets a little funky with tv shows, but it woks well with movies as most of the time 00.mkv is the movie file.
    email
    if you want a copy

    Reply
  134. For movies, there isn’t always a good way to tell which one is the main movie – especially if you’re dealing with a disc that has multiple formats for the same movie (4:3 vs 16:9 or similar). I have a fairly elaborate process to rip movies that results in dumping the entire disc into a directory and then either using “good judgement” (one file is 6G while everything else is <1G) to weed out non-movie files. From there, it gets passed through filebot for first pass at renaming and then dropped in a “temp” area where I can correct it if it goes awry.

    I’ve sent Ben my management file in the past, but haven’t seen whether or not he ever looked at it or gave any consideration to making it available in any way as part of the process (probably because it’s a bit complicated to understand, especially if you don’t have a fair amount of Linux experience). :)

    Reply
  135. Odd. I am getting this today:

    sudo add-apt-repository ppa:mc3man/xerus-media

    Err:8 http://ppa.launchpad.net/mc3man/xerus-media/ubuntu bionic Release
    404 Not Found [IP: 91.189.95.83 80]
    Reading package lists… Done
    E: The repository ‘http://ppa.launchpad.net/mc3man/xerus-media/ubuntu bionic Release’ does not have a Release file.
    N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
    N: See apt-secure(8) manpage for repository creation and user configuration details.

    Obviously others with 18.04 aren’t getting this. Maybe it is temporarily broken?

    Reply
  136. From his site it looks like his ppa was intended only for Ubuntu 14.04.

    From his site: https://launchpad.net/~mc3man/+archive/ubuntu/trusty-media

    To repeat –
    Please note that if using this ppa I would *not try upgrading to 14.10/15.04, ect. Do a fresh install instead. The intent here is just for users wishing to stay on 14.04*
    If upgrading anyway use ppa-purge first –
    sudo ppa-purge ppa:mc3man/trusty-media

    Also note that with apt-get a sudo apt-get dist-upgrade is needed for initial setup & with some package upgrades

    Reply
  137. Hey, great software. I am f9inally getting around to building me a machine to rip DVDs. I’m on Ubuntu Desktop 18.04, on a physical machine, not a VM. I keep getting the following error – I am copy/pasting directly from the instructions on GitHub into a terminal window in the GUI. Any advice would be most appreciated.

    root@URM:/opt/arm# pip3 install -r requirements.txt
    Collecting pycurl>=7.43.0 (from -r requirements.txt (line 1))
    Using cached https://files.pythonhosted.org/packages/e8/e4/0dbb8735407189f00b33d84122b9be52c790c7c3b25286826f4e1bdb7bde/pycurl-7.43.0.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
    File “/tmp/pip-build-_2fjpli2/pycurl/setup.py”, line 223, in configure_unix
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    File “/usr/lib/python3.6/subprocess.py”, line 709, in init
    restore_signals, start_new_session)
    File “/usr/lib/python3.6/subprocess.py”, line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
    FileNotFoundError: [Errno 2] No such file or directory: ‘curl-config’: ‘curl-config’

    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-_2fjpli2/pycurl/setup.py", line 913, in <module>
        ext = get_extension(sys.argv, split_extension_source=split_extension_source)
      File "/tmp/pip-build-_2fjpli2/pycurl/setup.py", line 582, in get_extension
        ext_config = ExtensionConfiguration(argv)
      File "/tmp/pip-build-_2fjpli2/pycurl/setup.py", line 99, in __init__
        self.configure()
      File "/tmp/pip-build-_2fjpli2/pycurl/setup.py", line 227, in configure_unix
        raise ConfigurationError(msg)
    __main__.ConfigurationError: Could not run curl-config: [Errno 2] No such file or directory: 'curl-config': 'curl-config'
    
    ----------------------------------------
    

    Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-_2fjpli2/pycurl/

    Reply
  138. Hi,
    same problem here with Ubuntu 18.04 LTS.
    Unfortunately, this page doesn´t seem to be maintained by the author anymore. :-(

    Reply
    • Hi, Hocky. The install instructions on the blog post aren’t up to date (I believe I mentioned that on the post, but I may remove them so there’s no ambiguity. However, the README on GitHub is being actively maintained. The best way to get it updated is to create an issue or PR on GitHub… that way the other ARM devs can review it so that not everything is funneling through me. |:-)

      Reply
  139. Pretty sure it took
    sudo apt install libcurl4-openssl-dev
    sudo apt-get install libssl-dev
    to get past that error for me. I had the same thing and managed to get past it. I tried a lot of things but I think those were the commands that got me past.

    Reply
  140. Hi,

    I’ve configured my own ARM using Ubuntu desktop 18.04LTS as a VM running on ESXi 6.7.

    When I put a bluray into the drive, it kicks off the ripping using makemkv, omdb identifies the disk and determines that it’s a movie and uses the correct name, but the following problems occur:

    1) Doesn’t seem to bother putting any subtitles into the file
    log example:
    + subtitle tracks:
    + 1, English [PGS]
    + 2, Deutsch [PGS]
    + 3, italiano [PGS]
    + 4, español [PGS]
    + 5, dansk [PGS]
    + 6, suomi [PGS]
    + 7, norsk [PGS]
    + 8, svenska [PGS]
    + 9, polski [PGS]
    + 10, à¹
    + 11, 中æ [PGS]GS]
    + 12, Îλληνικά [PGS]
    + 13, Deutsch [PGS]
    + 14, español [PGS]
    [12:16:59] 1 job(s) to process
    .
    .
    .
    “Subtitle”: {
    “Search”: {
    “Burn”: true,
    “Default”: false,
    “Enable”: true,
    “Forced”: true
    },
    “SubtitleList”: []
    },

    I think it’s related to the following errors in the log:
    bdj.c:689: BD-J check: Failed to load JVM library
    bdj.c:689: BD-J check: Failed to load JVM library

    2) Doesn’t seem to bother with my CHMOD values (777) and outputs them as read only.

    3) Weirdest of all, it won’t eject the disc once the data has been ripped. If I press the eject button, it just kicks off the ripping process again. I do notice that after adding the fstab entry, the disc won’t appear within the GUI (usually it’ll show you the disc name on the desktop).
    I tried commenting out the fstab entry and it will rip the disc as an iso and then eject the disc, so there’s something odd happening here that I haven’t been able to spot yet.

    Reply
  141. Does ARM Rip a Bluray as AVC Remux (lossless) or does handbrake convert it with lower bitrate?
    ANd is there a possibility to only rip a specific set of audio language from a Bluray?

    Reply
    • Hi, Timo. Yes, I believe all of this can be configured in the arm.yaml config file as long as Hanbrake or MakeMKV supports it. For lossless, set SKIP_TRANSCODE=true or if you still want to process with Handbrake but keep the original quality I’m sure there’s a CLI option for that. I believe you can pass arguments to rip a specific audio language by setting custom MakeMKV or Handbrake arguments. In the config file look at: HB_ARGS_BD, HB_ARGS_DVD, and MKV_ARGS.

      Reply
  142. Sigh.

    I just spent the better of two days feeding audio CD’s to this thing and have found that there’s something odd about the rip process that’s leaving the volume level pretty low.

    Since you know the architecture of this solution the best, where do I start? Is it a CDParanoia setting that I need to change? Or is it something do with mp3gain? I know mp3gain gets run, but I can’t tell how it’s getting called as it isn’t in your scripts and doesn’t appear to be part of abcde either. From what I see of the man page of cdparanoia, there doesn’t appear to be an association between those two – so what’s calling it?

    Reply
  143. Hi there, thanks for making this great project available to the masses..I’m excited to get this up and running.

    I’m looking for some assistance with an error I’ve run into on my first two tries ripping a couple of bluray discs. MakeMKV appears to finish just fine, but when handbrake kicks off, it errors out. Log is as follows:

    [2018-09-16 18:06:33] INFO ARM: main.log_arm_params **** End of config parameters ****
    [2018-09-16 18:06:33] DEBUG ARM: utils.make_dir Creating directory: /data/arm/media/unidentified/Alien
    [2018-09-16 18:06:33] INFO ARM: main.main Processing files to: /data/arm/media/unidentified/Alien
    [2018-09-16 18:06:33] INFO ARM: makemkv.makemkv Starting MakeMKV rip. Method is backup
    [2018-09-16 18:06:33] DEBUG ARM: makemkv.makemkv Getting MakeMKV disc number
    [2018-09-16 18:06:40] INFO ARM: makemkv.makemkv MakeMKV disc number: 0
    [2018-09-16 18:06:40] INFO ARM: makemkv.makemkv Destination is /data/arm/media/raw/Alien
    [2018-09-16 18:06:40] INFO ARM: makemkv.makemkv Backup up disc
    [2018-09-16 18:06:40] DEBUG ARM: makemkv.makemkv Backing up with the following command: makemkvcon backup –decrypt -r disc:0 /data/arm/media/raw/Alien>> /data/arm/logs/ALIEN_WW.log
    MSG:1005,0,1,”MakeMKV v1.12.3 linux(x64-release) started”,”%1 started”,”MakeMKV v1.12.3 linux(x64-release)”
    DRV:0,2,999,28,”BD-ROM ATAPI BD O DH4O1S CP56″,”ALIEN_WW”,”/dev/sr0″
    DRV:1,0,999,0,”DVD+R-DL SONY DVD RW DRU-800A KY03″,””,”/dev/sr1″
    DRV:2,256,999,0,””,””,””
    DRV:3,256,999,0,””,””,””
    DRV:4,256,999,0,””,””,””
    DRV:5,256,999,0,””,””,””
    DRV:6,256,999,0,””,””,””
    DRV:7,256,999,0,””,””,””
    DRV:8,256,999,0,””,””,””
    DRV:9,256,999,0,””,””,””
    DRV:10,256,999,0,””,””,””
    DRV:11,256,999,0,””,””,””
    DRV:12,256,999,0,””,””,””
    DRV:13,256,999,0,””,””,””
    DRV:14,256,999,0,””,””,””
    DRV:15,256,999,0,””,””,””
    MSG:5072,0,1,”Backing up disc into folder \”/data/arm/media/raw/Alien\””,”Backing up disc into folder \”%1\””,”/data/arm/media/raw/Alien”
    MSG:5050,0,2,”Evaluation version, 30 day(s) out of 30 remaining”,”Evaluation version, %1 day(s) out of %2 remaining”,”30″,”30″
    MSG:3317,0,1,”Loaded 2 SVQ file(s)”,”Loaded %1 SVQ file(s)”,”2″
    MSG:3326,0,0,”Processing BD+ code, please be patient – this may take up to few minutes”,”Processing BD+ code, please be patient – this may take up to few minutes”
    MSG:3324,0,1,”Processing BD+ code using generic SVQ from builtin/generic.svq”,”Processing BD+ code using generic SVQ from %1″,”builtin/generic.svq”
    MSG:3328,0,2,”BD+ code processed, got 1 FUT(s) for 22 clip(s)”,”BD+ code processed, got %1 FUT(s) for %2 clip(s)”,”1″,”22″
    MSG:5085,0,0,”Loaded content hash table, will verify integrity of M2TS files.”,”Loaded content hash table, will verify integrity of M2TS files.”
    MSG:5070,128,0,”Backup done”,”Backup done”
    MSG:5081,260,0,”Backup done.”,”Backup done.”
    [2018-09-16 19:07:21] DEBUG ARM: makemkv.makemkv The exit code for MakeMKV is: 0
    [2018-09-16 19:07:22] INFO ARM: makemkv.makemkv Exiting MakeMKV processing with return value of: /data/arm/media/raw/Alien
    [2018-09-16 19:07:22] INFO ARM: handbrake.handbrake_all Starting BluRay/DVD transcoding – All titles
    [2018-09-16 19:07:22] INFO ARM: handbrake.handbrake_all Getting total number of titles on disc. This will take a minute or two…
    [2018-09-16 19:07:22] DEBUG ARM: handbrake.handbrake_all Sending command: HandBrakeCLI -i /data/arm/media/raw/Alien -t 0 –scan
    [2018-09-16 19:07:22] ERROR ARM: main. A fatal error has occured and ARM is exiting. See traceback below for details.
    Traceback (most recent call last):
    File “/opt/arm/arm/main.py”, line 296, in
    main(logfile, disc)
    File “/opt/arm/arm/main.py”, line 211, in main
    handbrake.handbrake_all(hbinpath, hboutpath, logfile, disc)
    File “/opt/arm/arm/handbrake.py”, line 128, in handbrake_all
    raise ValueError(“Couldn’t get total number of tracks”, “handbrake_all”)
    ValueError: (“Couldn’t get total number of tracks”, ‘handbrake_all’)

    Any assistance is appreciated. Apologies for the long comment/inquiry, wasn’t sure if I should use the issues tab on github.

    Thanks in advance!

    Reply
  144. Brilliant software. Emptied my whole DVD collection (some 1500 discs) onto my purpose built mini itx box (RF blu-ray drive, mb, OS ssd and raid SSD). Now have all my movies to play at the push of a button on all devices in my home. Would be nice to put a simple HTML media browser on the same machine in the future, it would then be a one machine ripper/server/viewer. Used Ubuntu 16.04, could not get the Ubuntu 18 to work, 16 works perfectly though. You dont need to be a Linux expert either, just follow the steps through and google what you dont understand.

    Reply
  145. Have you thought about running Plex on that box too? Then you would have a nice web based player and be able to organise everything into libraries.

    Reply
  146. Be vary wary of Plex. It promises a lot, but it does not deliver. The various clients have gotten progressively WORSE over the last 18 months with features being removed and the actual Plex Employees no longer pay any attention to the forums where Support is requested. Look at other solutions – seriously. I am a Lifetime Plex Pass holder and I’m ready to completely dump the software because I am having so many problems with it.

    I abhor Kodi but am starting to consider it as my complete solution because Plex has become complete junk.

    Reply
  147. I’m also a lifetime plex subscriber and I sort of agree with your sentiments about their odd priorities but if you do jump ship go to emby as it’s a similar concept to plex but much more configurable.
    Plex=IOS and emby=android basically emby allows you more knobs to turn and plex removes them to make it so you cant stuff up

    Reply
  148. Not a big fan of Plex, I used it for two years and for various reasons I fell out of love with it. I use Ministra now, it’s a bit of a job to set up, but once running its gives you lots of options and is very reliable. Coupled with some MAG boxes, you can set up your own iptv system, add some tuners and you have what is basically a hotel tv system in your home(s).

    Reply
  149. Dear Ben!
    First thank you for your work and for sharing it!
    I had the same idea years ago and my concept looked very similar to yours but unfortunately there was not enough time to push my project forward.
    These days i wanted to attack it again, I stumbled upon your blog and thought “cool … I’ll try it out”
    Your installation guide is very good and easy to do – a few minutes later I was able to plug in the first DVD and it just run! Really great!
    Unfortunately, the machine in which my only DVD drive is not very powerful and so it takes 5 hours until the job was finished … unfortunately, audio was in English (I’m from Germany and speak only German)
    But I was able to fix that quickly (an improvement suggestion for the arm.yaml: language as my own parameter)
    I originally wanted to use dvd :: rip on my concept because it has the ability to disperse (cluster) – I have a bunch of CPU power at home that does most of the time absolutely nothing and sleeps…

    And I thought I use your scripts and just adapt “handbrake.py” – but then I had a simpler idea
    • I have created a user “arm” on my “more cpu power server”
    • handbrakecli installed
    • on my ARM /home/arm/media/raw via NFS share and mounted and same point at my cpuPower machine
    • customization arm.yaml: “HANDBRAKE_CLI: ssh arm@cpuPower HandBrakeCLI”

    handbrakecli made the mistake on the first try: “Preset High not found”
    so I have adjusted arm.yaml again: HB_PRESET_DVD: “‘High Profile'”
    and behold … it works!
    very very cool!

    When ripping an audio CD, I still get an error that the directory could not be created – I think it’s because of the missing emby server (I did not know emby before – but looks cool and I would like to try it…).

    Once again, many thanks! Your ARM is a very sophisticated and really very versatile and easy to customize software
    Best regards from Germany

    Conrad

    Reply
  150. How can i tweak it so if i have a handbrake job running another does not get kicked off until the first one is finished?

    Great job on the ARM!! Love it!!

    Reply
  151. You would likely want to develop some sort of checking routine that first looks for content that needs to be processed and then checks for an already-running process before it kicks off its own process. If there is no waiting content, exit. If there is waiting content but a process is currently running, exit.

    Cron could be usfeul here to launch a check every five minutes or so to check for waiting content and go from there…

    Reply
  152. That sounds like a good feature request. I’m a noob so it may take awhile before I even begin to figure out where to start. I know I’d need a script to check processes and then somehow pass it over to the main.py script so it wouldn’t launch another instance.

    Any help in direction would be greatly appreciated

    Reply
  153. I have made a LOT of customizations to the use of ARM, but predominantly in the process. For example, I use ARM solely for ripping. Once ripped, I have the tail end of the process move the content to a system for long-term storage. Over THERE, I have scripts that I move the content through different levels of polishing like renaming things to a proper standard, approving the new names, moving into a directory for transcoding, and then finally moving to the permanent directory where Plex will locate it and add it to my media system.

    While your thoughts about adding this as a feature is reasonable, you should keep a couple of things in mind:

    The scheduling mechanics that Ben has built into this should give you a level of ‘control’ over the processes to not run TOO MUCH stuff at once and overrun the machine. Also, integrating this system into your overall workflow process and environment gives you a ton of flexibility for these kinds of things. I would encourage you to be more invested in the system overall by creating a workflow that suits your needs and making customizations in that area.

    Reply
  154. Mark,
    Thank you for the response. I know there is allot i can do however i lack the experience to eventry and modify it. I have zero programing skills and much of what i know comes from trial and error. Would there be a way to contact you offline so i can pick your brain on this?

    Also i am having an issue where i am runnig ESXI 6.5 and the region code on my Blue-Ray drive is 1 however when it’s passed to the VM i cannot rip a DVD with Region code 1 due to the drive is set to 2. i find that very odd. I have tried to edit the region per instructions i have found but it has to be done at the ESXI level. My only course is to pull the drive out and plug it in to another machine and do a prue boot and see what happens. I would like to avoid doing that. If someone has any pointers i would love to hear them.

    Thanks for product Ben and keep up the good work all!!

    Reply
  155. Hello, thanks again for this setup and was able to get it running, but every time i try to copy a disk i get the following on a smb share:

    Creating playlist…
    mkdir: cannot create directory ‘/mnt/freenas/ARM/flac’: Permission denied

    Whats odd is i can create folders and files in that directory without issue outside of the scripts with the arm user.
    Any idea what i’m missing here??

    Reply
  156. Hi Conrad,

    could you elaborate on how you selected the German language?
    Ideally I’d like to get both English and German audio files…

    Also I really like your remote encoding solution – will need to copy that too :)

    Thanks

    Reply
  157. Actually managed to do that by now, (the other part is for nvenc)

    Handbrake binary to call

    HANDBRAKE_CLI: HandBrakeCLI -e nvenc_h265 –two-pass –encoder-preset hq –turbo –audio-lang-list eng,deu

    and in /home/arm/.MakeMKV/settings.conf

    app_DefaultSelectionString=”-sel:all,+sel:(eng|ger),-sel:mvcvideo,+sel:subtitle&(eng|ger),=100:all,-10:favlang,+sel:attachment,-sel:special”

    Reply
  158. Could this be set up to do 4 or 5 bluray drives at a time?
    Also, Can I pay you to build and set up a machine to do this?

    Reply
  159. I just found this and think it’s pretty neat. I wrote something similar but for PS1/PS2 games (as windows batch file). I couldn’t find a reliable way to detect which console the game is for though so not quite as headless as your setup. PS1 and PS2 CD games would have to be ripped to cue/bin format (they’re CD Data+redbook audio) so I imagine this script wouldn’t work with those. Or maybe it would I’m not sure. I’m planning a re-write in either PowerShell or Python (haven’t started/decided yet). It’s called advib on github if you’re interested.

    Reply
  160. Awesome work, I built up my VM today gave it 2 cpu, 2GB ram, 200GB space on an iSCSI san. Ubuntu 18.04.02 Server. I opted to go with skipping transcode on my host as I have a rb264 farm setup for post.

    I was getting a lot of log entries about software faster than the drive so I threw a 200GB vmdk on a local SATA drive in the host at it, mounted it up in the /home/arm/media/raw location and set off to ripping Twilight Zone BDs which I’ve been hoping to get compressed. Working like a charm. Mounted via NFS my unidentified and movies folders from my NAS for the final locations, which I access via samba from my rb264 farm.

    Followed the instructions on Github and everything worked perfectly except for when the identify.py script can’t determine the disc’s title so it names the folder title_unknown. If running multiple BD drives I worry this might be a problem so the fix I tried was to change:

    disc.videotitle = “title_unknown”
    to
    disc.videotitle = disc.label

    This of course only helps with the labels have unique values, Some series use the same label for all discs in a season so anyone who looks for and finds this issue like I had you probably still have to be careful.

    I haven’t run two at once yet, my second 4k drive arrives tomorrow. I saw that title_unknown when getting moved to the unidentified folder was getting renamed if a folder already existed, maybe you handle the raw folder the same way.

    Reply
  161. Me either, and I have been searching and looking for other ways to accomplish this, and have come up empty. Does ARM keep a track of movies it has ripped, and a mapping of the hash to title? If so, my company may be able to come up with a solution but I would have to set up a gofundme page or something similar to fund the project.

    If we were to create a service similar to the windowsmetadata service, that maintains a database of hashes, title, imdb id, omdb id, etc and expose it via an API, it would help not only ARM, but any other projects / programs that rely on the hash value of the disc.

    If ARM kept a database of everything each user has ripped, with the crc64 -> title mapping, and we could get the community to submit their databases, we would have a starting point. From there, we could obtain the imdb id, etc and populate the database with that information. This would be helpful for scrapers to obtain other metadata. The API would also allow users to submit new information, and in the case of the ARM, when a title is not in this database and the user puts the correct information, it would update the database.

    I wonder if Microsoft would be willing to provide a database dump of their metadata information — they wouldn’t have to include artwork, etc, but just general information including the hash values? I am posting this on the github site as well to see what type of interest of possibly funding this would be. I will also come up with a rough draft of what it would take to implement this.

    Reply
    • In the latest dev branch ARM is storing a history in a SQLLite database–I can’t remember if the crc field was added yet but we did discuss adding it. If not it would be trivial to add it. If Microsoft could provide you a dump to seed the database that would be ideal to get started. I don’t know if you’d get the number of participants needed to build a robust database from scratch.

      Reply
  162. It would be great if Microsoft would provide a dump to seed the database. The problem however is, knowing who to contact at Microsoft. I have emailed a general support address but have yet to get a response. I can’t think of a reason why Microsoft would not want to provide this information, especially if by providing it, it would once again give other software the ability to use the service. I am going to do some digging, and try to find some contact information for someone who might know the proper people or group that could provide this. Even if they would just give us their MSSQL Database, I can import it into my MSSQL server then move the data to another DB (as I do not like the overhead required to run MSSQL and prefer MySQL).

    This would be a great thing if they did, especially since we then could, when returning the DVD title could also return a link to say IMDB, OMDB, etc to grab all the other metadata so other programs could use this (such as Plex, Emby, etc).

    I need to look more closely at the ARM code, but when it queried the Microsoft service, was the information returned as XML, JSON, or how was it presented? I can start working on the API to return information now, in the hopes of getting the dump from Microsoft, and being able to get the funding needed to launch this. I need to look and see how much traffic a service like this could expect to see, and figure out what server requirements would be. I don’t want to launch something that all of a sudden is getting 10k queries per minute and is unable to serve all the requests fast enough, but at the same time do not want to through a hexacore cpu with 64gb of ram and it is only serving 10k queries per day… Any thoughts?

    Reply
    • I would use standard JSON over XML (or provide both) instead of emulating their API. Changing ARM to accommodate a JSON API would be straight forward. Start out small. Start with a $5/month DigitalOcean droplet or Amazon LightSail $3.50/month plan. If you are concerned about load put Varnish and Nginx in front of the webserver and it will cache requests so once someone has queried a particular hash one time it’s not going to put any load on the server. This site runs on a $5/month DO VM and it can easily handle 1000 clients/second and this is a full on WordPress site so with caching in place I think you’ll be fine on the cheapest plans. If you need to you can scale up vertically pretty easily (at least on DO, haven’t tried on LightSail).

      Reply
  163. I was going to throw a server in one of our cabinets in one of two datacenters I can easily access but that way would be the better and cheapest route.

    Reply
  164. Just an update, I have tried contacting Microsoft multiple times via email and have received no responses. I do not have any other way to contact Microsoft, or even know someone I could reach out to who could point us in the right direction. Does anyone here (or you, Ben) know of a contact or someone we could approach?
    wan
    Also, earlier I asked if the current database ARM creates and uses stores the CRC64 of each title it has ripped? I just want some seed data to start doing some testing. Also, even though I agree with your previous statement, if we could get current users of ARM to submit their databases (really, if the database does contain the CRC64 -> title) could provide some seed data
    I understand people being reluctant to share their databases so I could write a simple program to just extract the information needed and the user could just share the output.

    If anyone has any other contact information for Microsoft that actually responds, I would appreciate if it could be shared so we can attempt to revive this service.

    Reply
  165. Thanks for your great article!

    I’ve been looking for an autoripper that keeps the disc structure (BDMV / VIDEO_TS) as is instead of conversion to MKV, and optionally uses hardware transcoding (VAAPI). Since I didn’t find one, I wrote one by myself. It is based on Docker so that installation and configuration is done auomatically. You can find it on https://github.com/git-developer/marvyn

    Keep up the good work!

    Reply
  166. Hi there,

    Thank you so much for this.
    I’d love to pay you to build a PC for this purpose! Please let me know if you’re interested.
    Unfortunately, I just don’t have the time to run through the learning process to put all this together, but I do want to get ripping my library into digital.

    Reply
  167. Hi,
    I find this project very interesting, and I’ve tried getting it to work.
    But when I insert the disk it won’t start doing anything, it doesn’t log, I don’t hear the disk spin.

    Am I doing something wrong?

    I really want to get this to work, because I need to get rid of my DVD collection.

    Reply
  168. Thanks for putting this together. I’m no linux su, but I have some experience. I have gone through your guide a couple of times, trying to find my mistake but to no avail. It appears MakeMKV doesn’t recognize my external DVD drive. And the empty.log file isn’t being updated. It contains only one line:
    [2021-02-05 01:27:35] INFO ARM: Failed to open device /dev/loop16 to check status.

    However, the log files (“DVDNAME_xxxxxxxxxx.log) of the DVDs are being generated and they all end with:
    [2021-02-05 03:47:33] ERROR ARM: A fatal error has occured and ARM is exiting. See traceback below for details.
    Traceback (most recent call last):
    File “/opt/arm/arm/ripper/main.py”, line 432, in
    main(logfile, job)
    File “/opt/arm/arm/ripper/main.py”, line 355, in main
    if utils.rip_data(job, datapath, logfile):
    File “/opt/arm/arm/ripper/utils.py”, line 316, in rip_data
    cfg[“DATA_RIP_PARAMETERS”],

    And finally, the log files (None_xxxxxxxxxx.log) contain just one line:
    [2021-02-05 03:46:53] INFO ARM: Drive appears to be empty or is not ready. Exiting ARM.

    If I use: sudo makemkv while a DVD is in the optical drive, the GUI responds with “The program can’t find any usable optical drives” so I suspect the issue is with makemkv. However, I have not found any solution yet that works for me.
    System Info:
    id: maximus
    description: Laptop
    product: XPS 13 9360 (075B)
    vendor: Dell Inc.
    serial: GCT12G2
    width: 64 bits
    capabilities: smbios-3.0.0 dmi-3.0.0 smp vsyscall32
    configuration:
    boot = normal
    chassis = laptop
    family = XPS
    sku = 075B
    uuid = 44454C4C-4300-1054-8031-C7C04F324732

    DVD Drive:
    id: cdrom
    description: DVD-RAM writer
    product: DVDRAM GT34N
    vendor: HL-DT-ST
    physical id: 0.0.0
    bus info: scsi@0:0.0.0
    logical name: /dev/cdrom
    logical name: /dev/cdrw
    logical name: /dev/dvd
    logical name: /dev/dvdrw
    logical name: /dev/sr0
    version: AS00
    capabilities: removable audio cd-r cd-rw dvd dvd-r dvd-ram
    configuration: status = open

    OS: Ubuntu 20.04.2 LTS

    If you have any time to think about what might be causing this, I would be very grateful.

    Cheers,
    Dave

    Reply
  169. Sooooo….

    Has something changed with the PPA for makemkv? I have 1.15.1 installed and it doesn’t see anything newer when I run an “apt upgrade” although it does show a lot of core packages to update. Have you come across anything?

    Reply
  170. Hi Ben!
    I followed this as best I could using your Data Center In A Box setup guide and ESXi 6.7, TrueNAS Core, and Ubuntu 20.04.
    I got the drive pools set up, and I can ping 10.55.0.2 from inside TrueNAS, and the datastore is properly set up in ESXi

    The problem comes when I try to mount the NFS share that I made. I can’t ping the storage network, and I can’t get ubuntu to use both the storage and vm networks simultaneously (Although this tutorial only shows you using the vm network).

    I assume the point of registering the datastore in ESXI is so we don’t have to connect to that network to access it, so how do I get my ARM vm to use the datastore that was registered in ESXi? This tutorial makes no mention of it as far as I can tell

    Thanks!

    Reply
  171. Did anyone ever make a docker version of this? I see people talking about it but I can’t find a link to a dockerfile or anything on Docker Hub indicating anyone ever made a docker image of this.

    Reply
  172. Thank you Benjamin.

    Has anyone poked at using this with CD changers? Maybe even Pioneer 6 CD changers? In the udev rules I’m not certain how to signal that the magazine has changed, or what to listen to perhaps.

    Thanks for reading!

    Reply
  173. Not sure I did this right.
    I put in a DVD and it doesnt seem like anything is happening.
    Do I log into the ARM account?
    How do I tell if it is working?

    Reply
  174. Hi,
    is there a way to install it on a FreeBSD system? I use TrueNas for my nas and this has a DVD-Drive.
    At the moment i use an old Laptop to rip the Media an then transfer it to my nas. (i know i also can rip directly to it)
    I think for the powerusage and overall its elegant if i can use my Nas directly.
    I hope there is a way. thanks a lot before.
    Greetings,
    Ralf

    Reply
    • Hi, Ralf. I have not tested this on FreeBSD but if you get it working let me know. TrueNAS Scale is based on Linux (Debian) so there might be more opportunities there–especially if you can pass the DVD drive to a KVM guest.

      Reply
  175. Really great work. Have you tried this on a raspberry pi 4? Previous generations of the Pi wouldn’t have had anywhere near enough power, but given that the new Pi is significantly faster and has more memory it should theoretically be possible to use it for this purpose if the time taken to encode isn’t an issue. I may try it with the Debian installer script unless there’s a reason why it absolutely won’t work.

    Reply
  176. Hello

    My ARM server is totally screwed up. I upgraded it to 20.04 by mistake without even thinking. Is there a way to save it, or should I re-install 18.04?

    Reply
  177. Great work on this project – appreciate all the time and attention you put in. I am new to this but have successfully ripped a hundred or so DVDs from my collection, with mostly good results (other than 1D10T mistakes on occasion). The problem I have is the following few lines from the debug log (running Ubuntu 20.04 and latest version of ARM):
    [2022-01-04 20:20:40] INFO ARM: utils.move_files Moving ‘Scooby-Doo! Mask Of The Blue Falcon Original Movie_t02.mkv’ to /movies/media/final/Scooby-Doo Music of the Vampire (2012)/extras
    [2022-01-04 20:20:40] DEBUG ARM: main.main Attempting to remove extra folder in ARMPATH: /movies/media/final/Scooby-Doo Music of the Vampire (2012)
    [2022-01-04 20:20:40] DEBUG ARM: main.main Removed sucessfully: /movies/media/final/Scooby-Doo Music of the Vampire (2012)

    Why does the script move the “…to2.mkv” to the extras folder and then remove the parent folder and the freshly ripped mkv?! Probably something simple but I cannot figure out what!? Let me know if you need further info or I missed something obvious.

    Reply
  178. Sometimes, rarely, and I’m not sure why, a DVD will be ripped to the raw folder, but the HandBrakeCLI process either dies or doesn’t get kicked off (not sure which). Is there a method to try again from the starting raw files instead of re-ripping? (this is on Linux) Thanks!

    Reply
  179. Here it says Ubuntu, on github it says Ubuntu Server. I tried with Server this weekend but I either failed or didn’t configure right. I’m more familiar with non-server, so I’ll try that soon.

    Reply
    • I managed to get it to work with 20.04 but ran into a number of issues. I have volunteered to help update documentation fro more current versions. I think you would need to be on an way older version to not hit a few configuration hiccups.

      Reply
  180. First off, thanks Ben! Second, and I’m sorry if I missed this, but does the computer that is my ARM need to be logged in under the ARM user to work or will any user account do the ripping? I’ve just tried going through the instructions once and it isn’t working yet. I’m going to make a fresh Ubuntu install, then try again, but step by step instead of using the script.

    Cheers!
    Jack

    Reply
    • Ok, I think I figured out a lot going through the automatic installation script. Now when I pop in a DVD, the ARM repeatedly tries to run, but I get this issue result from running tail -f /var/log/syslog

      Jan 5 16:47:28 LenovoRipper systemd[1]: Started Arm service.
      Jan 5 16:47:29 LenovoRipper python3[15073]: [2023-01-05 16:47:29,630] DEBUG ARM: __init__. Debugging pin: 12345
      Jan 5 16:47:29 LenovoRipper python3[15073]: [2023-01-05 16:47:29,762] DEBUG ARM: utils.check_db_version Head is: f1054468c1c7
      Jan 5 16:47:29 LenovoRipper python3[15073]: Traceback (most recent call last):
      Jan 5 16:47:29 LenovoRipper python3[15073]: File “/opt/arm/arm/runui.py”, line 10, in
      Jan 5 16:47:29 LenovoRipper python3[15073]: import arm.ui.routes # noqa E402
      Jan 5 16:47:29 LenovoRipper python3[15073]: File “/opt/arm/arm/../arm/ui/routes.py”, line 26, in
      Jan 5 16:47:29 LenovoRipper python3[15073]: ui_utils.check_db_version(cfg.arm_config[‘INSTALLPATH’], cfg.arm_config[‘DBFILE’])
      Jan 5 16:47:29 LenovoRipper python3[15073]: File “/opt/arm/arm/../arm/ui/utils.py”, line 90, in check_db_version
      Jan 5 16:47:29 LenovoRipper python3[15073]: c.execute(‘SELECT version_num FROM alembic_version’)
      Jan 5 16:47:29 LenovoRipper python3[15073]: sqlite3.OperationalError: no such table: alembic_version
      Jan 5 16:47:29 LenovoRipper systemd[1]: armui.service: Main process exited, code=exited, status=1/FAILURE
      Jan 5 16:47:29 LenovoRipper systemd[1]: armui.service: Failed with result ‘exit-code’.
      Jan 5 16:47:33 LenovoRipper systemd[1]: armui.service: Scheduled restart job, restart counter is at 1610.
      Jan 5 16:47:33 LenovoRipper systemd[1]: Stopped Arm service.

      Would anyone have some insight as to what could be causing this? Perhaps I don’t have permissions a directory or file set correctly?

      Cheers,
      Jack

      Reply
      • It looks like a database issue. “alembic_version” is a table in the arm database, and it can’t find it. That could be a few reasons, like, the database is missing, corrupt, empty…or as you mention, a permission issue with the database file or directory that it’s in.

        Reply
  181. I am also having issues installing ARM to Ubuntu 20.04.5 with manual and script installations on both a physical machine and a VMware VM. The errors were the same on both devices.

    With an automatic script install, the script does not appear to finish. No pages load. Image of terminal output: https://user-images.githubusercontent.com/15239157/211882740-e5bd8e8b-f8d6-4192-8a4c-ff158f479a50.png

    The manual install will seem to finish as it should, but the ripper does not work, and I get this when I go to the “history” or “database” page:
    https://user-images.githubusercontent.com/15239157/211882869-c02423e0-3d7c-4f23-b026-5fa22680acc0.png

    Here is my error log for the WebUI after a manual install: https://github.com/automatic-ripping-machine/automatic-ripping-machine/files/10394420/WebUI.log

    Sorry I am not a developer so I might not be getting as much information as would be helpful.

    I hope this works like it used to for me soon, I have a couple dozen disks to rip and I LOVE project. ARM is amazing. Thanks for all the hard work to the Ben and other developers!

    Reply
  182. Hi All,

    Thank you to Ben and 1337-Server for working on this and keeping it alive!

    I am trying to get this to work with a Nimbie Autoloader – has anyone tried to do the same and got it work? I am not sure where I should insert the commands to control disc insert/eject/reject etc.

    Appreciate any thoughts :)

    Reply

Leave a Comment