You have just ripped a movie from a DVD and you want to store it in a compressed format with multi-language audio tracks, subtitles and high quality video.

— Written by Triangles on July 09, 2017 • updated on November 13, 2017 • ID 54 —
source =

In this guide I’ll show you how to do that by using FFmpeg (version 3.2.5 or greater) on a Linux-based operating system – I’m currently using Debian Stable, aka Jessie.

FFmpeg is able to deal with a vast amount of audio/video formats and containters. For our task I will be using Matroska Multimedia Container container (.mkv files), as it is capable of storing different audio, video and subtitle tracks together. The video stream will be encoded with H.264 codec, currently the best guy in town. Audio tracks will be encoded in mp3 format.

Let’s begin!

Step 1: unify your VOBs

VOB file are usually 1 Gb each in order to be compatible with all operating systems, as some cannot read files larger than that size. The first step then is to join them into a single, big VOB file. To do that, browse to the VIDEO_TS folder and do:

$ cat *.VOB > output.vob
That’s it.

Step 2: identify the streams

Now let’s inspect the newly created file: we want to find what kind of stuff it contains. Use FFmpeg for that, as follows:

$ ffmpeg -i output.vob
For example, you might end up with something like:

Input #0, mpeg, from 'output.vob':
Duration: 01:50:40.99, start: 0.287267, bitrate: 7581 kb/s
Stream #0:0[0x1bf]: Data: dvd_nav_packet
Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, top first), 720x576 [SAR 64:45 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x80]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:3[0x89]: Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 768 kb/s
Stream #0:4[0x82]: Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s

Here FFmpeg reports that my VOB file contains five streams. Starting from the first one, Stream #0:0 contains data regarding the DVD’s menu navigation. We can get rid of it. Stream #0:1 is the actual movie. The remaining streams are audio tracks. I’ll discard Stream #0:2 as it contains the same data (English audio track) encoded in a different format.

Mind the deep-buried streams!

Normally, while looking for streams, FFmpeg parses only few seconds of the input data as most formats have a global header there that describes everything present in the file. Unfortunately VOBs have no headers and it is likely to find movies that hold additional streams further down the VOB file.

Let FFmpeg scan it thoroughly by adding two more flags: -analyzeduration (in microseconds) and -probesize (in bytes). Honestly I’m not able to tell the difference between those options: put in there some fairly large numbers and tweak them until you are satisfied. For example:

$ ffmpeg -analyzeduration 100M -probesize 100M -i output.vob
And, not surprisingly, two more streams are found:

Stream #0:5[0x21]: Subtitle: dvd_subtitle
Stream #0:6[0x20]: Subtitle: dvd_subtitle

Subtitles: let’s keep them!

Step 3: encoding

We are ready to pack our DVD into a beautiful .mkv file. The command looks like:

ffmpeg \
-analyzeduration 100M -probesize 100M \
-i output.vob \
-map 0:1 -map 0:3 -map 0:4 -map 0:5 -map 0:6 \
-metadata:s:a:0 language=ita -metadata:s:a:0 title="Italian stereo" \
-metadata:s:a:1 language=eng -metadata:s:a:1 title="English stereo" \
-metadata:s:s:0 language=ita -metadata:s:s:0 title="Italian" \
-metadata:s:s:1 language=eng -metadata:s:s:1 title="English" \
-codec:v libx264 -crf 21 \
-codec:a libmp3lame -qscale:a 2 \
-codec:s copy \

Let me dissect it:

-analyzeduration 100M -probesize 100M — keep this one so that FFmpeg is able to find hidden streams;
-i output.vob — the input file;
-map 0:1 -map 0:3 -map 0:4 -map 0:5 -map 0:6 — here I’m mapping the streams, namely I’m telling FFmpeg to keep Stream 0:1, Stream 0:3, Stream 0:4, Stream 0:5, Stream 0:6 and put them in the output file in that specific order;
-metadata[...] — this is used to give streams a title and other additional information, specifically to audio tracks (s:a:0 and s:a:1 where a stands for audio) and subtitles (s:s:0 and s:s:1 where s stands for subtitles);
-codec:v libx264 -crf 21 — defines the video codec in use and the constant rate factor (crf), namely the quality level. This method allows the encoder to keep a constant quality level, regardless the output file size: 0 is lossless, 23 is default, and 51 is worst possible. The sane range is between 18 and 28;
-codec:a libmp3lame -qscale:a 2 — defines the audio codec in use and the quality level: 0-3 will produce transparent results, 4 (default) should be close to perceptual transparency, 6-9 produces an “acceptable” quality. Using numbers from 0 to 9 means that the audio track will be encoded in variable bitrate (vbr) mode: smaller files, better quality;
-codec:s copy — s stands for subtitles: copy them as they are;
output.mkv — the output file.
Bonus point: if your machine supports it, add the flag -threads N to enable multi-threading and give the encoding a boost. Replace N with the number of your CPU cores.


Wikipedia – VOB (link)
Wikipedia – Matroska (link)
FFmpeg f.a.q. – 3.16 Why does FFmpeg not see the subtitles in my VOB file? (link)
FFmpeg wiki – FFmpeg and H.264 Encoding Guide (link)
FFmpeg wiki – FFmpeg MP3 Encoding Guide (link)

Trouver le numéro de série du iPhone sans la carte SIM :
Brancher le tel.
Ouvrir iTunes.
A Propos de iTunes avec la touche CTRL enfoncée.


Effacer toutes les lignes vides :

Chercher les lignes plus longues que :

Occurence d’un motif dans un fichier :

Installer ImageMagick sur Mac :
$ brew install ImageMagick

Avec mon appareil photo con Nikon, les photos comportent une marge grise.
Ce qui a pour effet d’empêcher de les visionner sur la Freebox.

Marge gauche et en haut = 30px
Taille de la photo finale = 1540x978px

Pour retailler la photo et virer les marges :
convert PHOTO.JPG -crop 1540x978+30+30 CROPPED-PHOTO.JPG

Pour faire tout le répertoire en 1 passe :
for file in *.JPG; do convert $file -crop 1540x978+30+30 Cropped-$file; done

Modifier les droits récursivement de tous les fichiers rw-r–r– (644) en rw-rw-r– (664) :
$ find monrepertoire/ -perm 644 -type f -print -exec chmod 664 {} \;

Modifier les droits récursivement de tous les répertoires drwxr-xr-x (755) en drwxrwxr-x (775) :
$ find monrepertoire/ -perm 755 -type d -print -exec chmod 775 {} \;

Ouvrir un fichier avec vim :
$ sudo vi /etc/hosts
Saisir le mot de passe de l’ordinateur.
(Lorsqu’on saisit le mot de passe il n’y a rien qui s’affiche, même pas des *, c’est normal…)

Taper sur la touche i pour passer en mode “Insertion”.
Taper sur la touche Esc pour passer en mode “Commande”.
Attention, quand on ouvre Vim, on est en mode “Commande”.

Modifier le fichier :
Taper i pour passer en mode “Insertion”
Modifier le fichier de manière classique.

Passer en mode “Commande” en faisant Esc
Taper u autant de fois que nécessaire

Sauvegarder et quitter:
Passer en mode “Commande” en faisant Esc
Taper :wq

Quitter sans sauvegarder
Passer en mode “Commande” en faisant Esc
Taper :q!

Télécharger clonezilla.iso sur le Mac.
Brancher un disque dur USB
# dd if=clonezilla.iso of=/dev/sdb

Félicitations !

Bon ensuite, il faut partitionner le reste du disque dur, et formater en fat32.
Sur Linux, partitionner :
# fdisk /dev/sdb
Formater :
# mkfs.dos -F 32 /dev/sdb

MacOS ElCapitan

Pour voir les attributs d’un fichier :
$ xattr <filename>

Pour voir les attributs de tous les fichiers :
$ ls -l@

Pour enlever le @ sur un fichier :
$ xattr -d <filename>

Pour enlever le @ sur un répertoire :
$ xattr -dr <diretoryName>