Linux SVCD HOWTO
1. Introduzione
Nascita dei Video-CD.
Standard più evoluto rappresentato dai Super-Video-CD.
L'avvento dei DVD sembra aver soppiantato questi standard, ma è davvero così?
Caratteristiche tecniche dei (Super) Video CD
- VCD:
-
video: formato MPEG1 a 1150 kbit/s a bitrate fisso;
audio: 1 canale audio MPEG1 Layer 2 a 224 kbit/sec 44100 Hz mono, stereo o bicanale.Caratteristiche del video:
- NTSC: frame 352x240 pixel, 30 frame per secondo (29.970 per la precisione)
- NTSC film: frame 352x240 pixel, 24 frame per secondo (23.970 per la precisione)
- PAL: frame 352x288 pixel, 25 frame per secondo.
- SVCD:
-
video: formato MPEG2 fino a 2600 kbit/s a bitrate variabile;
audio: MPEG Layer 2 da 32 a 384 kbit/s, 44100 Hz, due tracce stereo o quattro mono.Caratteristiche del video :
- NTSC: frame 480x480 pixel, 30 frame per secondo (29.970 per la precisione);
- NTSC film: frame 480x480 pixel, 24 frame per secondo (23.970 per la precisione);
- PAL: frame 480x576 pixel, 25 frame per secondo.
Inoltre lo standard SVCD consente la presenza di immagini statiche (still images) che possono essere usate, tra l'altro, per produrre dei menu di navigazione.
Nota: Un'immagine sul PC di 640x480 pixel corrisponde, in formato PAL a un'immagine di 704x576 pixel,
640x480 r = 1,333 (4:3) 704x576 r = 1.222 (11:9)2. Software utile
- cdrdao
- vcdimager
- ffmpeg
- netpbm/netpbm-progs (o nomi simili, a seconda della distribuzione) - per manipolare le immagini.
- mjpegtools - per creare mpeg standard a partire
- transcode
- devede
Quelli strettamente necessari per seguire il presente HOWTO, però, sono solamente cdrdao, vcdimager e ffmpeg. Se si vogliono creare dei menu, servono anche netpbm e mjpegtools.
Tutti questi software sono Open-Source e la maggior parte di essi è già inclusa in tutte le distribuzioni GNU/Linux più diffuse.
Nota: il programma devede permette di creare, oltre a DVD anche VCD/SVCD, ma per questi ultimi non permette di sfruttare alcune caratteristiche come ad esempio la creazione di menu.
3. Copia 1:1 di (Super) Video CD
Questo comando crea i file .mpg corrispondenti alle tracce video ed un file XML che ordina i contenuti. Ora non resta che creare i file .cue e .bin (quest'ultimo contiene l'immagine vera e propria). Per farlo, basta dare il comando:
Per masterizzare l'immagine ottenuta, è possibile usare cdrdao:
--device /dev/cdrom --eject videocd.cue
4. Produzione di (S)VCD
Conversione audio/video
Supponiamo di partire da un filmato in AVI (il che vuol dire che può essere stato compresso con un'infinità di codec diversi). Il nostro primo passo sarà riuscire a convertire audio e video nel corretto formato MPEG.
In generale il comando transcode si occupa di questo.
-E 44100 -b 128 -u 20,2 -o mpegout
# non funziona, controllare opzioni!
che produce, separatamente, i file mpegout.m2v e mpegout.mpa contenenti rispettivamente la traccia video e quella audio. Poi basta unirli in un unico file mediante il comando mplex:
dove l'opzione -f 4 indica il formato SVCD. Se invece si vuole ottenere un VCD standard, bisogna utilizzare -f 1. Vedi la seguente tabella:
| num: | formato corrispondente: |
| 0 | MPEG-1 |
| 1 | VCD |
| 2 | VCD con bitrate non standard |
| 3 | MPEG-2 |
| 4 | SVCD |
| 5 | SVCD con bitrate non standard |
| 6 | VCD still stream |
| 7 | SVCD still stream |
| 8 | DVD (*) |
| 9 | DVD (*) |
(*) Formati non completamente supportati: meglio usare dvdauthor.
In realtà lo strumento più efficace e più facile da usare per il nostro scopo è ffmpeg.
Il semplice comando:
è più che sufficiente per ottenere il filmato nel formato voluto.
Nota: può essere necessario aggiungere l'opzione: -aspect 4:3.
Se si vuole tagliare il filmato, basta usare l'opzione -c di transcode; ad esempio:
dove i numeri corrispondono al frame iniziale e a quello finale da considerare.
NOTA: esiste un metodo alternativo che non sfrutta il codec mpeg2enc direttamente da transcode ma spezza la conversione in più passi mediante due fifo. Il seguente esempio mostra come procedere per ottenere un VCD:
[1]$ mkfifo videofifo.mpa
[1]$ transcode -i movie.avi -V -y yuv4mpeg,mpeg -b 224 -Z 352x288 \
-o videofifo -k -C 2 # non funziona: da sistemare opzioni -V/-y
[2]$ cat videofifo.mpa > clip1.mpa
[3]$ cat videofifo | mpeg2enc -f 1 -n p -o clip1.m1v
In questo caso -b 224 (il bitrate audio) è fisso e non può essere cambiato. L'opzione -n p sta ad indicare il formato PAL.
Poi, analogamente a prima, si unisce la traccia video con quella audio in un unico file:
Esempio analogo, ma per ottenere un video di qualità SVCD:
[1]$ transcode -i movie.avi -V -y yuv4mpeg,mpeg -b 224 -Z 480x576 \
-o videofifo -k -C 2 # non funziona: da sistemare opzioni -V/-y
[2]$ cat videofifo | mpeg2enc -f 4 -n p -o clip1.m2v
[3]$ mplex -f 1 -o result.mpg clip1.m2v videofifo.mpa
dove l'opzione -b specifica il bitrate audio e può andare da 32 a 384 (comunque 224 è più che suff).
Menu
In realtà il menu non è altro che un particolare filmato in cui l'immagine risulta statica (still image).
Se si vuole creare un proprio menu, dunque, bisogna usare un qualche programma di grafica (ad esempio Gimp).
Partendo da un'immagine in formato JPEG, conviene innanzitutto trasformare questa in PNG (se la si è creata con Gimp conviene salvarla direttamente in questo formato).
Ottenuta l'immagine PNG, bisogna dare il comando:
ppmntsc --pal | ppmtoy4m -v 0 -F 25:1 -S 420mpeg2 | \
mpeg2enc -v 0 -f 7 -a 2 -n p -T 110 -o test.m2v
oppure per avere una risoluzione maggiore:
ppmntsc --pal | ppmtoy4m -v 0 -F 25:1 -S 420mpeg2 | \
mpeg2enc -v 0 -f 7 -a 2 -n p -T 120 -o test.m2v
Nota: l'opzione -a 2 nell'ultimo comando sta ad indicare un rapporto larghezza/altezza di 4:3. L'opzione -T num, invece, indica la dimensione in kilobyte dell'immagine compressa così ottenuta.
| Opzione: | Rapporto: |
| -a 1 | 1:1 |
| -a 2 | 4:3 |
| -a 3 | 16:9 |
| -a 4 | 2.21:1 |
Infine si ottiene lo pseudo-video in formato MPEG mediante il comando:
Nota: per maggiori informazioni sulle conversioni tra vari formati video, vedi la guida: multimedia.html.
File XML
Nel caso più semplice il file videocd.xml viene creato automaticamente mediante il comando:
Se si è creato un menu:
SEGMENT: contiene immagini fisse/menu PBC: PlayBack ControlPrima si può ottenere un file XML provvisorio con un comando del tipo:
--update-scan-offsets --volume-count=2 --volume-number=0 \
--iso-volume-label=TEST track01.mpg track02.mpg …
Nota: a me sembra funzionare solo senza le prime 2 opzioni (--broken... e --add-dir...) e aggiungendo poi a mano la sezione segment col menu nel file .xml [vedi templates/esempio_videocd.xml]
Infine bisogna modificare opportunamente il file XML inserendoci il menu. Ecco un esempio nel seguente file: videocd.xml.
PBC
Per ciascuna traccia video, compreso il menu, è possibile associare ad alcuni tasti del telecomando delle particolari azioni, corrispondenti a dei precisi tag nel file .xml:
| Tasto: | tag assegnato: | |
| -> | play | default |
| >> | forward | next |
| << | previous | prev |
| [] | stop | return |
| 0…9 | numeric |
Dunque
Fuori standard
Oppure:
Preparazione dell'immagine da masterizzare
Ora bisogna creare l'immagine del (S)VCD vero e proprio.
Se si è saltata la creazione di un file XML personalizzato e si vuole ottenere un SVCD standard, partendo direttamente dai file MPEG, allora il comando è:
Oppure, se invece è stato creato un file videocd.xml personalizzato:
In entrambi i casi, i comandi creano due file: l'immagine da masterizzare è nel file videocd.bin, mentre il file videocd.cue contiene le informazioni da fornire al software di masterizzazione.
Masterizzazione
Avete l'immagine da masterizzare in videocd.bin e le informazioni necessarie in videocd.cue. Ora non resta che masterizzare.
Con le vecchie versioni di kernel/software etc, i comandi da dare erano i seguenti:
Visualizzato il dispositivo corrispondente al masterizzatore,
--speed 6 --eject videocd.cue
Questo perché cdrdao riconosceva i device con ...
Tuttavia nelle distribuzioni più recenti, l'opzione da passare a cdrdao è il device corrispondente al masterizzatore. Supponiamo ad esempio che sia /dev/cdrom (può anche essere un link al vero device). In questo caso basta dare il seguente comando:
--speed 6 --eject videocd.cue