Bonjour,
est-il possible, pour chaque film, de créer un fichier .nfo utilisable par Kodi ?
Bonne journée...
Hello,
is it possible, for each movie, to create an .nfo file usable by Kodi?
Have a nice day...
Création fichier NFO pour Kodi
Re: [EN+others] NEW SCRIPTS REQUESTS : CLICK HERE TO DO THEM
Bonjour, techniquement oui. En pratique je ne sais pas si quelqu'un l'a déjà fait sous forme de script.
Par contre en utilisant la fonctionnalité d'export HTML (menu Fichier -> Exporter) c'est peut-être plus simple : on peut définir un modèle de page "individuelle" (1 page / film), il suffirait donc de faire un modèle pour le NFO.
Par contre en utilisant la fonctionnalité d'export HTML (menu Fichier -> Exporter) c'est peut-être plus simple : on peut définir un modèle de page "individuelle" (1 page / film), il suffirait donc de faire un modèle pour le NFO.
Re: [EN+others] NEW SCRIPTS REQUESTS : CLICK HERE TO DO THEM
Je vous remercie pour votre réponse...antp wrote: ↑2023-11-29 06:46:48 Bonjour, techniquement oui. En pratique je ne sais pas si quelqu'un l'a déjà fait sous forme de script.
Par contre en utilisant la fonctionnalité d'export HTML (menu Fichier -> Exporter) c'est peut-être plus simple : on peut définir un modèle de page "individuelle" (1 page / film), il suffirait donc de faire un modèle pour le NFO.
Voici un exemple de nfo...comment faire sur AMC ?
<?xml version="1.0" encoding="utf-8"?>
<movie xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id type="imdb">tt0056197</id>
<uniqueid type="imdb" default="true">tt0056197</uniqueid>
<uniqueid type="tmdb" default="false">9289</uniqueid>
<title>Le jour le plus long</title>
<originaltitle>The Longest Day</originaltitle>
<language>fr-FR</language>
<year>1962</year>
<country>United States</country>
<rating>7,7</rating>
<votes>55824</votes>
<ratings>
<rating name="imdb" max="10" default="true">
<value>7.7</value>
<votes>55824</votes>
</rating>
</ratings>
<genre>Guerre</genre>
<director>Ken Annakin</director>
<director>Bernhard Wicki</director>
<director>Andrew Marton</director>
<plot>1944. Les Alliés se préparent pour la grande offensive qu'ils ont prévue en Normandie et qui devrait définitivement débarrasser l'Europe du fléau nazi. Chaque état-major est en effervescence. Le général Eisenhower hésite quant à la date fixée, le 6 juin, en raison du mauvais temps. L'atterrissage des troupes aéroportées et le débarquement sur cinq plages normandes s'annoncent difficiles. Il faut créer des diversions pour semer la confusion chez l'ennemi. Pendant ce temps, la plus grande tranquillité règne dans le camp allemand. Le maréchal Rommel est même reparti en Allemagne. Puis soudain, la radio laisse tomber la seconde partie du vers de Verlaine qui annonce le début de l'opération.</plot>
<runtime>178</runtime>
<dateadded>2016-03-07 11:02:59</dateadded>
<datemodified>2022-08-03 10:51:16</datemodified>
<actor>
<name>John Wayne</name>
<role>Col. Benjamin Vandervoort</role>
<thumb>https://m.media-amazon.com/images/M/MV5 ... jpg</thumb>
</actor>
<actor>
<name>Robert Mitchum</name>
<role>Brig. Gen. Norman Cota</role>
<thumb>http://image.tmdb.org/t/p/original/4Spu ... jpg</thumb>
</actor>
<actor>
<name>Henry Fonda</name>
<role>Brig. Gen. Theodore Roosevelt jr.</role>
<thumb>http://image.tmdb.org/t/p/original/9Dtu ... jpg</thumb>
</actor>
<actor>
<name>Sean Connery</name>
<role>Pvt. Flanagan</role>
<thumb>http://image.tmdb.org/t/p/original/jYCw ... jpg</thumb>
</actor>
<actor>
<name>Richard Burton</name>
<role>Flight Officer David Campbell</role>
<thumb>https://m.media-amazon.com/images/M/MV5 ... jpg</thumb>
</actor>
<fileinfo>
<streamdetails>
<audio>
<bitrate>768</bitrate>
<channels>6</channels>
<codec>dca</codec>
<language>fra</language>
<longlanguage>French</longlanguage>
</audio>
<audio>
<bitrate>1509</bitrate>
<channels>6</channels>
<codec>dca</codec>
<language>eng</language>
<longlanguage>English</longlanguage>
</audio>
<audio>
<bitrate>640</bitrate>
<channels>6</channels>
<codec>ac3</codec>
<language>fra</language>
<longlanguage>French</longlanguage>
</audio>
<audio>
<bitrate>640</bitrate>
<channels>6</channels>
<codec>ac3</codec>
<language>fra</language>
<longlanguage>French</longlanguage>
</audio>
<subtitle>
<language>fra</language>
<longlanguage>French</longlanguage>
<forced>false</forced>
<type>Embedded</type>
</subtitle>
<subtitle>
<language>fra</language>
<longlanguage>French</longlanguage>
<forced>false</forced>
<type>Embedded</type>
</subtitle>
<subtitle>
<language>eng</language>
<longlanguage>English</longlanguage>
<forced>false</forced>
<type>Embedded</type>
</subtitle>
<video>
<aspect>1.778</aspect>
<bitrate>12.0</bitrate>
<codec>h264</codec>
<durationinseconds>10700</durationinseconds>
<height>1080</height>
<scantype>Progressive</scantype>
<width>1920</width>
<filesize>20839490018</filesize>
</video>
</streamdetails>
</fileinfo>
<locked>false</locked>
</movie>
Re: [EN+others] NEW SCRIPTS REQUESTS : CLICK HERE TO DO THEM
À chaque endroit où il faut une valeur du film il faut utiliser un tag spécial commençant par $$, on peut les insérer via le menu "Insert tag" dans la fenêtre d'export.
Par exemple pour le titre, dans le modèle :
<title>$$LABEL_TRANSLATEDTITLE</title>
<originaltitle>$$LABEL_ORIGINALTITLE</originaltitle>
etc.
Les champs qui n'ont pas d'équivalent pour AMC peuvent être laissés vides ou supprimés.
Par exemple pour le titre, dans le modèle :
<title>$$LABEL_TRANSLATEDTITLE</title>
<originaltitle>$$LABEL_ORIGINALTITLE</originaltitle>
etc.
Les champs qui n'ont pas d'équivalent pour AMC peuvent être laissés vides ou supprimés.
Re: [EN+others] NEW SCRIPTS REQUESTS : CLICK HERE TO DO THEM
Je n'y arrive pas...antp wrote: ↑2023-12-03 15:04:50 À chaque endroit où il faut une valeur du film il faut utiliser un tag spécial commençant par $$, on peut les insérer via le menu "Insert tag" dans la fenêtre d'export.
Par exemple pour le titre, dans le modèle :
<title>$$LABEL_TRANSLATEDTITLE</title>
<originaltitle>$$LABEL_ORIGINALTITLE</originaltitle>
etc.
Les champs qui n'ont pas d'équivalent pour AMC peuvent être laissés vides ou supprimés.
Voici comment j'ai fait : Fichier/exporter/html...puis j'ai choisi individuel et j'ai copié mon exemple de nfo en remplaçant les items par les tags spéciaux.
Quand je veux "sauver sous"...AMC plante
Et si jamais j'arrive à sauvegarder il ne me propose que des template html...comment arriver à un fichier.nfo ?
Comment obtenir des thumbnails d'acteurs ?
Re: [EN+others] NEW SCRIPTS REQUESTS : CLICK HERE TO DO THEM
Il plante ? Avec quoi comme erreur ?
"Sauver sous" c'est pour le modèle lui-même.
Pour créer le NFO (il proposera du html évidemment comme il est prévu pour ça à la base) il faut cliquer le bouton 'Exporter' en bas à droite.
"Sauver sous" c'est pour le modèle lui-même.
Pour créer le NFO (il proposera du html évidemment comme il est prévu pour ça à la base) il faut cliquer le bouton 'Exporter' en bas à droite.
Re: Création fichier NFO pour Kodi
j'ai séparé cette discussion de l'autre, comme ça n'avait pas tellement de rapport avec l'autre finalement.
Re: Création fichier NFO pour Kodi
Bonjour,
Voici mon script qui permet de générer 1 nfo par film sélectionné.
Attention, il y a un chemin en dur dans le code, donc à modifier. C'est le chemin de ta base, et le préfixe de fichier image, auquel le script va rajouter le no :
Sinon le code complet :
Bien a toi,
François
Voici mon script qui permet de générer 1 nfo par film sélectionné.
Attention, il y a un chemin en dur dans le code, donc à modifier. C'est le chemin de ta base, et le préfixe de fichier image, auquel le script va rajouter le no :
Code: Select all
//// ATTENTION A REFAIRE... (chemin en dur !!!)
xSource := dirApp+'Catalogs_NYC\'+'Base_NYC_'+GetField(fieldNumber)+'.jpg';
//// ATTENTION A REFAIRE...
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=Boyerf
Title=Kodi_Maj_Data_nfo
Description=Kodi - Maj des données video des films et génération des affiches et .nfo dans l'arborescence
Site=
Language=FR
Version=2.0
Requires=4.0
Comments=
License=
GetInfo=0
RequiresMovies=1
[Options]
[Parameters]
***************************************************)
program XBMCmajdata;
var
FichierVideo: string;
MovieActors: string;
MovieGenre: string;
SavefileName: string;
DirSelected: string;
FormatedData: string;
OutToFile: TStringList;
xSource, xCible_image, xCible_nfo, xCible_image_old, xCible_FanArt: string;
// ******************************************************
// ******************** FONCTIONS ***********************
// ******************************************************
function ActorsToXml(actors: string): string;
var
lstActor: TStringList;
iActor,iActorTaille,iDebut: Integer;
sActor,sActorTotal,sRole,testRole: string;
begin
lstActor := TStringList.Create;
lstActor.Text := StringReplace(actors, ', ', #13#10);
// Manque balises role et /role
for iActor := 0 to lstActor.Count - iActor do
begin
sRole:='';
sActorTotal := StringReplace(lstActor.GetString(iActor),'.','');
iActorTaille := length(sActorTotal);
testRole := copy(sActorTotal,iActorTaille , 1);
if (testRole = ')') then
begin
// Un role existe
iDebut := pos('(',sActorTotal);
sRole:=copy(sActorTotal,idebut,iActorTaille);
sActorTotal:=copy(sActorTotal,1,idebut - 1);
End;
sActor := ' <actor>' + #13#10 + ' <name>' + sActorTotal + '</name>' + #13#10 + ' <role>' + sRole + '</role>' + #13#10 + ' </actor>';
if lstActor.GetString(iActor) <> #13#10 then lstActor.SetString(iActor, sActor);
end;
Result := lstActor.Text;
lstActor.Free;
end;
// ******************************************************
function GenreToXML(genre: string): string;
var
lstGenre: TStringList;
iGenre: Integer;
sGenre: string;
begin
lstGenre := TStringList.Create;
lstGenre.Text := StringReplace(genre, ', ', #13#10);
for iGenre := 0 to lstGenre.Count -iGenre do
begin
sGenre := ' <genre>' + lstGenre.GetString(iGenre) + '</genre>';
lstGenre.SetString(iGenre, sGenre);
end
Result := lstGenre.Text;
lstGenre.Free;
end;
// ******************************************************
function ChooseTitle(Original: string; Translated: string): string;
begin
if Translated <> '' then Result := Translated else Result := Original
end;
// ******************************************************
// ******************** FIN FONCTIONS *******************
// ******************************************************
// ******************************************************
// MAJ des données vidéo
// ******************************************************
begin
FichierVideo := ansilowercase(GetField(FieldFilePath));
SetCustomField('Chemin', FichierVideo);
If LoadMedia(FichierVideo) then
begin
SetField (fieldSize, GetMediaInfoLS(mediaSize));
SetField (fieldResolution, GetMediaInfo(mediaResolution));
SetField (fieldFramerate, GetMediaInfo(mediaFramerate));
SetField (fieldVideoFormat, GetMediaInfo(mediaVideoCodec));
SetField (fieldVideoBitrate, GetMediaInfo(mediaVideoBitrate));
SetField (fieldAudioFormat, GetMediaInfo(mediaAudioCodec));
SetField (fieldAudioBitrate, GetMediaInfo(mediaAudioBitrate));
SetField (fieldLanguages, GetMediaInfo(mediaLanguages));
SetField (fieldSubtitles, GetMediaInfo(mediaSubtitles));
end;
// Generation des TBN et NFO
//// ATTENTION A REFAIRE... (chemin en dur !!!)
xSource := dirApp+'Catalogs_NYC\'+'Base_NYC_'+GetField(fieldNumber)+'.jpg';
//// ATTENTION A REFAIRE...
xCible_image := ChangeFileExt(FichierVideo,'-poster.jpg');
xCible_image_old := ChangeFileExt(FichierVideo,'.tbn');
xCible_nfo := ChangeFileExt(FichierVideo,'.nfo');
xCible_FanArt := ChangeFileExt(FichierVideo,'-fanart.jpg');
//ShowMessage(xSource);
//ShowMessage(xCible_image);
//ShowMessage(xCible_nfo);
OutToFile := TStringList.Create;
// SaveFileName := IncludeTrailingPathDelimiter(DirSelected) + GetField(fieldOriginalTitle) + '.nfo';
FormatedData := FormatedData +'<movie>'+#13#10;
FormatedData := FormatedData +' <title>'+ ChooseTitle(GetField(fieldOriginalTitle), GetField(fieldTranslatedTitle)) + '</title>'+#13#10;
FormatedData := FormatedData +' <originaltitle>'+GetField(fieldOriginalTitle)+'</originaltitle>'+#13#10;
FormatedData := FormatedData +' <sorttitle>'+GetField(fieldMedia)+'</sorttitle>' + #13#10;
FormatedData := FormatedData +' <set>'+GetField(fieldSource)+'</set>' + #13#10;
FormatedData := FormatedData +' <rating>'+GetField(fieldRating)+'</rating>'+#13#10;
FormatedData := FormatedData +' <year>'+GetField(fieldYear)+'</year>'+#13#10;
// FormatedData := FormatedData +' <top250>'+GetFeild(fieldWhatever)+'</top250>'+#13#10;
// FormatedData := FormatedData +' <votes>'+GetField(fieldWhatever)+'</votes>'+#13#10;
// FormatedData := FormatedData +' <outline>'+GetField(Whatever)+'</outline>'+#13#10;
FormatedData := FormatedData +' <plot>'+GetField(fieldDescription)+'</plot>'+#13#10;
FormatedData := FormatedData +' <tagline></tagline>'+#13#10;
FormatedData := FormatedData +' <runtime>'+GetField(fieldLength)+'min</runtime>'+#13#10;
// FormatedData := FormatedData +' <thumb>'+GetField(fieldURL)+'</thumb>'+#13#10;
FormatedData := FormatedData +' <mpaa></mpaa>'+#13#10;
FormatedData := FormatedData +' <playcount>0</playcount>'+#13#10;
// FormatedData := FormatedData +' <id>Not available</id>'+#13#10;
FormatedData := FormatedData +' <filenameandpath></filenameandpath>'+#13#10;
// FormatedData := FormatedData +' <trailer></trailer>'+#13#10;
// FormatedData := FormatedData +' <genre></genre>'+#13#10;
// FormatedData := FormatedData +' <credits></credits>'+#13#10;
FormatedData := FormatedData +' <director>'+GetField(fieldDirector)+'</director>'+#13#10;
FormatedData := FormatedData +'<fileinfo>'+#13#10;
FormatedData := FormatedData +'<streamdetails>'+#13#10;
FormatedData := FormatedData +'</streamdetails>'+#13#10;
FormatedData := FormatedData +'</fileinfo>'+#13#10;
(* Run Actor Script here*)
MovieActors := ActorsToXML(GetField(fieldActors));
MovieGenre := GenreToXML(GetField(fieldCategory));
OutToFile.Append(UTF8Encode(FormatedData + MovieGenre + MovieActors + '</movie>'));
OutToFile.SaveToFile(xCible_nfo);
OutToFile.Free;
FormatedData := '';
// if CopyFile(xSource, xCible_image, True) = True then ShowMessage('Probleme avec : ' + xCible_image);
DeleteFile(xCible_image_old);
DeleteFile(xCible_image);
DeleteFile(xCible_FanArt);
// CopyFile(xSource, xCible_image, False);
ExportPicture(xCible_image);
ExportExtraPicture(0, xCible_FanArt);
end.
François