Encoder une video qui change de taille - Multimédia - Linux et OS Alternatifs
Marsh Posté le 21-06-2007 à 13:27:07
Pas de méthode précise pour t'indiquer comment faire, mais quelques idées.
Tout d'abord, je chercherais déjà s'il n'est pas possible de forcer un ratio fixe dès l'enregistrement ; un traitement postérieur de la vidéo ça implique des manips en plus (parfois complexes), c'est long, ça bouffe des ressources, etc. avec le risque en plus de dégradation de qualité de l'original si de mauvais paramètres sont appliqués...
Faut donc déjà dans un premier temps chercher du côté des options que propose Kaffeine pour l'acquisition du flux. Sinon tu peux jeter un oeil également du côté de VLC, qui permet aussi de faire ce type d'acquisition et dispose de fonctions permettant de gérer le ratio et le cropping vidéo ou encore de mplayer qui doit sans doute également disposer de ce type de fonctionnalité.
Si malgré tout tu ne parviens pas à trouver des options satisfaisantes pour cela et que tu dois recourir au traitement postérieur de la vidéo, il reste la possibilité d'explorer les nombreux paramètres de mencoder qui propose une sacré palette d'outils et de filtres en tout genre.
Un autre soft qui n'est pas dans ta liste et qui peut faire ce genre de boulot, c'est transcode :
---> http://www.transcoding.org/cgi-bin/transcode
---> http://www.transcoding.org/cgi-bin [...] ne_Options
---> http://www.transcoding.org/cgi-bin [...] o_Resizing
---> http://www.transcoding.org/cgi-bin [...] o_Clipping
C'est pas super-trivial en terme d'utilisation (comme mencoder), mais très puissant et il y a la possibilité d'utiliser des nombreux utilitaires (scripts essentiellement) spécialisés pour différents type de traitement. Il y a également pas mal d'interfaces graphiques pour le traitement vidéo qui repose sur transcode.
Marsh Posté le 21-06-2007 à 18:46:54
Citation : Comment éviter la désynchronisation son/image ? |
http://sourceforge.net/projects/project-x/
Un guide très complet :
http://www.doom9.org/index.html?/D [...] lguide.htm
Ensuite les valeurs que tu donnes ne semble pas bonne (768*576 et 1024*576) mais celles après désanamorphose.
Exemple :
Le flux France 4 récupéré sur Freebox s'affiche en 768x576 (c'est du mpeg ts) dans mplayer mais sa taille réelle est de 544x576 (le flux est anamorphique). Les logs de mplayer le confirme :
Citation : Movie-Aspect is 1.33:1 - prescaling to correct movie aspect. |
En fait des marqueurs dans le flux ts indiquent la résolution à afficher (1.33:1). Hors lors d'une conversion en divx ces marqueurs sont perdus, c'est pour ça qu'il faut retailler la vidéo. Ta vidéo ne change donc pas de taille mais des marqueurs (4/3, 16/9) se succèdent.
Que quelqu'un me détrompe car je ne suis pas non plus un spécialiste dans le domaine.
Marsh Posté le 22-06-2007 à 09:55:25
Intéressant tout ça
Marsh Posté le 22-06-2007 à 16:21:22
Je m'intéresse au même problème en ce moment pour des raisons totalement différentes mais voici une super page qui explique pas mal de choses sur le rapport d'aspect :
http://inferno.slug.org/cgi-bin/tr [...] pect_Ratio
Par contre amha, si le rapport d'aspect change au cours de la vidéo tu va être obligé de découper le truc à moins de pouvoir scripter l'encoder pour qu'il change de rapport d'aspect au bon moment quand ca change dans la vidéo. Il y a peu être moyen de scripter ca si le format que tu a en source indique le moment où le rapport d'aspect change.
Certains lecteurs video comme vlc adaptent la taille horiz ou vert pour converser le rapport d'aspect. Avec mplayer c'est plus aléatoire.
En gros le rapport d'aspect c'est h/v et ca doit rester correct pour ne pas déformer la video. Rapport classique TV : 4/3 ou 16/9 Exemple :
J'ai une video de base en 1350x1384. Je veux la faire tenir sur un écran 1024x768.
On fait une règle de trois
1350 1384
1024 y=?
OU
1350 1384
x=? 768
Cela donne
Dans le cas 1 y=1049 ca ne va pas c'est trop grand
cas 2 x= 749
Pour adapter la taille correctement on doit donc utiliser la solution 2 pour que ca tienne dans l'écran.
Ensuite il faut ajouter des bandes noires pour que le rapport d'aspect soit correct car sinon ce boulet de codec ne veut pas encoder. Sinon tu découpe l'image "clipping" ou "letterboxing" qu'ils appelent ca
taille voulue : x = 1024
taille obtenue x = 749
soit 1024 - 749 = 275 px de bandes noires.
275/2= 137,5 = 136 + 138
Soit -Z 749x768
on utilise l'option -Y pour ajouter des bandes noires
dans ce cas c'est on ajoute des bandes noires a gauche et a droite.
soit :
-Y 0,-138,0,-136
Bon ca ne marche pas dans tous les cas, erreurs bizarres pour la conversion yuv2rgb dans mon cas, je poste pour updater + tard
EDIT : apparemment l'option -Y centre obligatoirement l'image.
On doit donc dans mon cas utiliser les paramètres suivants :
-Z 750x768 -Y 0,-137,0,-137
C'est en gros ce qui est expliqué sur la page de wiki, la 3e page citée par THR4K
EDIT2 : transcode permet de faire ca automatiquement avec -ZdimX,dimY,fast mais chez moi camarchepa
Marsh Posté le 23-06-2007 à 13:26:47
Bon je vais scripter un truc pour découper tout ca, recoder les morceaux en fonction des marqueurs de ratio (ou en indiquant les tailles voulues en dur si je trouve pas) et recoller le tout.
Et faut aussi que je pense à faire un bug report sur avidemux, en fait ce qui fait tout foirer c'est le filtre qui ajoute les bandes noires quand il est utilisé dans le filtre "Partial" (de telle frame à telle frame)
Marsh Posté le 24-06-2007 à 11:54:00
Bonjour
Je me permet d'intervenir pour quelques précisions techniques.
Pour faire simple:
La TNT, c'est du DVB-T (Digital Video Broadcasting - Terrestrial).
En DVB on transmet des multiplexes vidéo, 1 par bande de fréquence.
Chaque multiplex vidéo contient un ensembles de chaines.
En MPEG, le multiplex s'appelle un Transport Stream. La chaine s'appelle un Program Stream.
Chaque Program est indépendant des autres au niveau du contenu (le son d'une chaine ne doit pas se retrouver avec l'image d'une autre),
mais pas au niveau de sa norme, commune à tous les Program d'un Transport.
Chaque program choisi et envoi dans son flux vidéo un code de ratio, c'est a dire la fraction qui correspond à la dimension de l'image finale que l'on veut obtenir.
Exemple:
Le mux qui contient TF1, c'est du 720x576 (1,25)
Le mux qui contient M6, c'est du 704x576 (1,22)
Le mux de France Television, qui contient ARTE, c'est du 544x576 (0,94)
Quand TF1, M6 ou ARTE envoie un programme indiqué 4/3, c'est votre appli de lecture qui la déformer (redimensionner) pour que la nouvelle taille, quand on la divise L/H = 4/3. De façon classique, sur PC, on obtient, 768x576. Pour le 16/9: 1024x576.
768x576 et 1024x576 ne sont pas normalisés ni utilisables en MPEG 2 pour le DVB.
Pour vos problèmes
Xavier_OM:
Traite ta vidéo en morceaux: le 4/3 avec un profil 4/3, le 16/9 avec du 16/9. C'est toi qui décide quand couper l'image, quand mettre des bandes noires, car c'est suivant le contenu. Tu conforme tous tes morceaux avec le même ratio, le même format, la même résolution. Et après tu les colles bout à bout. C'est la méthode la moins casse-gueule.
twocats:
Tu en étais pas loin.
Dernière chose:
Ne vous fiez pas aux comportements de vos lecteurs au niveau de la résolution et du ratio. Il n'y a pas de norme pour l'affichage sur PC, chacun voit midi à sa porte.
Si j'ai le temps, je vous parlerais du décalage image/son.
Marsh Posté le 28-06-2007 à 00:06:23
Bon ben voilà ce que ca donne... jle poste, des fois que quelqu'un en ait besoin un jour...
#!/bin/bash
[ $# -ne 3 ] && Usage
SRC=$1 OUT=$1 NAME="`echo $0 | grep -o "[^/]*$"`" # /path/to/carver => carver declare -a TMP_FILES ############ # Assures temporary files are removed at program termination (0) date_diff() { local i_DIFF=`echo "$i_DATE2 - $i_DATE1" | bc` local i_ABS echo "$i_DIFF * $i_ABS" | bc } #date_diff() ########################## [ $W -gt $WIDTH ] && WIDTH=$W
# ENCODING LENGTH=`date_diff $START $STOP` mencoder \ ((CPT++)) # CONCATENATE # autocleaning on exit because of trapping signals |
Marsh Posté le 28-06-2007 à 09:53:29
Ca aurait été interessant de coder en dur les différents cas: 4/3 > 4/3, 4/3 > 16/9, 16/9 > 4/3, 16/9 > 16/9.
Pour les morceaux codés avec mencoder, le conseil que je donnerais, serait de faire un MPEG 2 en sortie et non pas un MPEG 4.
Reserve le MPEG 4 pour ton fichier final.
(au lieu de faire des -ovc copy -oac copy, tu fait ton MPEG 4).
Deux transcodages, mais tu y gagnera en qualité et évitera des défauts de fichier mal coupés/mal collés.
Tu a vraiment besoin de faire de l'AC3 ?
Marsh Posté le 28-06-2007 à 10:21:56
HDSDI a écrit : Ca aurait été interessant de coder en dur les différents cas: 4/3 > 4/3, 4/3 > 16/9, 16/9 > 4/3, 16/9 > 16/9. |
Beaucoup de questions qui attendent beaucoup de réponses ! J'ai vraiment fais ça à l'arrache, pour voir si l'enchaînement des étapes de découpages/resizing/ajout de bandes noires/concaténation était possible, j'ai pas réfléchi aux codecs
Je comprends pas trop ton idée de coder "en dur" certaines transfos, je vois pas l'intérêt vu que là je peux choisir la taille que je veux pour chaque morceau...
Par contre, et à moins que ca n'entraîne de gros pb d'espace disque, c'est mieux de garder le mpeg4 pour la fin tu as raison
PS : si je trouve comment détecter les changements de tailles automatiquement, on pourrait générer le fichier d'instructions
Marsh Posté le 30-06-2007 à 00:43:15
Citation : PS : si je trouve comment détecter les changements de tailles automatiquement, on pourrait générer le fichier d'instructions |
Code :
|
En gros tu lis la vidéo à x10 et tu génère un fichier de log. Dans mon fichier de test j'ai trouvé ça :
Code :
|
C'est le ratio de départ. Puis un premier changement :
Code :
|
Soit à 223.4 secondes un passage en 4/3. Ensuite :
Code :
|
A 231.2 secondes un dernier changement en 16/9 (mon fichier de test ne faisait que quelques minutes.
Cela ne marche que si tu passes ton fichier par ProjectX et que tu le remultiplexe avec mplex :
Code :
|
sinon les marqueurs de temps sont foireux.
Marsh Posté le 30-06-2007 à 08:39:19
Oué j'avais commencé un truc du genre (merci pour le coup de main ) sauf qu'au changement de ratio j'ai pas les infos temporelles moi
Pour les marqueurs de temps c'est pas simplement un -ignore-start qu'il te faudrait par hasard ? Sinon on peut aussi créer un fichier edl et foutre -hr-edl-seek ptet...
Marsh Posté le 21-06-2007 à 10:44:03
Bonjour à tous :hello
J'ai un problème d'encodage video !
J'enregistre la tnt avec Kaffeine, au format m2t (mpeg transport stream je crois). La taille du flux video s'adapte dynamiquement à l'émission, ainsi par exemple sur une soirée Thema d'ARTE :
- début de l'émission : le présentateur parle, on est en 4:3, le stream est en 768*576
- premier reportage : on passe en 16:9, le stream est en 1024*576
- retour sur le présentateur : on repasse en 4:3
et ainsi de suite.
En regardant ce fichier m2t avec mplayer (ou kaffeine), le changement de taille dynamique passe tout seul. C'est pratique en plus, parce que quand l'émission est à la taille de votre écran vous êtes sûr d'avoir du full screen sans bandes noires.
Le problème c'est quand on veut encoder cette video... Impossible d'imposer une taille fixe en sortie, sous peine d'avoir une partie de l'émission totalement déformée.
En général j'utilise avidemux pour découper les pubs, et avidemux ou mencoder pour encoder/resynchroniser le son et la video.
avidemux propose des filtres pour retailler l'image, désentrelacer, ajouter des bandes noires et autres, et ô joie, on peut appliquer les filtres partiellement (de telle frame à telle frame).
Sauf que dans la pratique, appliquer partiellement un filtre resize+bandes noires de tel endroit à tel endroit ca fout le bordel, la video en sortie est inexploitable (gros tas de lignes vertes). Les mêmes filtres appliqués sur toute la video marchent, donc il doit y avoir une histoire de key frame de départ là-dessous...
Mes questions :
Il y a 2 options de synchronisation apparement, metronome et resample, mais le résultat est plus ou moins le même : l'enregistrement est synchrone au sein d'une émission, mais si on enregistre de "un peu avant" (durant la pub par exemple) à "un peu après", on dirait que le changement d'émission fout le bordel.
Bref comment feriez-vous à ma place ? Sachant que si personne n'a de solution miracle je vais découper la video en morceaux pour les traiter séparement
Les outils video dont j'ai entendu parler :
mplayer/mencoder :
http://www.mplayerhq.hu/
avidemux :
http://fixounet.free.fr/avidemux/
http://fr.lprod.org/wiki/doku.php?id=video:avidemux
kdeenlive :
http://kdenlive.org/
http://fr.lprod.org/wiki/doku.php?id=video:kdenlive
cinelerra :
http://www.cinelerra.org/
http://fr.lprod.org/wiki/doku.php?id=video:cinelerra
kino :
http://www.kinodv.org/
jahshaka :
http://www.jahshaka.org/
virtualdub over wine (parait que ca marche bien )
Message édité par Xavier_OM le 21-06-2007 à 10:45:37
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.