window.addEventListener("scroll", function() { const header = document.getElementById("ordinateur"); if (window.scrollY > 0) { header.classList.add("scrolled"); } else { header.classList.remove("scrolled"); } });
(function(){ "use strict"; function updateMobileHeader(){ const header = document.getElementById("telephone"); if(!header){ return; } if(window.scrollY > 0){ header.classList.add("scrolled"); }else{ header.classList.remove("scrolled"); } } window.addEventListener( "scroll", updateMobileHeader, {passive:true} ); updateMobileHeader(); })();

PRODUCTION VIDÉO · QUÉBEC

Des images qui font voir.
Une histoire qui fait agir.


JT Vidéaste accompagne les entreprises, les événements et les couples de Québec avec une production vidéo professionnelle, humaine et pensée pour être regardée jusqu’au bout.


Ils nous font confiance

NOS CLIENTS


LA BONNE VIDÉO POUR LE BON MOMENT

NOS SERVICES

01

Mariage

Immortalisez les moments forts de votre journée avec une vidéo naturelle et intemporelle.

Découvrir
02

Événements

Captation, ambiance et moments clés pour conserver une trace professionnelle.

Découvrir
03

Entreprises

Des vidéos professionnelles qui renforcent votre image et votre crédibilité.

Découvrir
04

Réseaux sociaux

Du contenu court et percutant conçu pour attirer l’attention et engager votre audience.

Découvrir
(function(){ var track = document.getElementById( "jtServicesFinalTrack" ); var dots = document.querySelectorAll( "#jtServicesFinalDots .jt-services-final-dot" ); if(!track || !dots.length){ return; } var ticking = false; var resizeTimer; /* ========================================================= CARTES ========================================================= */ function getCards(){ return track.querySelectorAll( ".jt-services-final-card" ); } /* ========================================================= CALCUL CARTE ACTIVE ========================================================= */ function calculateActive(){ if(window.innerWidth > 700){ return; } var cards = getCards(); if(!cards.length){ return; } var center = track.scrollLeft + (track.clientWidth / 2); var closest = 0; var smallestDistance = Infinity; for( var i = 0; i < cards.length; i++ ){ var card = cards[i]; var cardCenter = card.offsetLeft + (card.offsetWidth / 2); var distance = Math.abs( cardCenter - center ); if(distance < smallestDistance){ smallestDistance = distance; closest = i; } } for( var j = 0; j < dots.length; j++ ){ dots[j].classList.toggle( "active", j === closest ); } } /* ========================================================= MISE À JOUR FLUIDE ========================================================= */ function updateDots(){ if(ticking){ return; } ticking = true; requestAnimationFrame(function(){ calculateActive(); ticking = false; }); } /* ========================================================= SWIPE / SCROLL ========================================================= */ track.addEventListener( "scroll", updateDots, { passive:true } ); /* ========================================================= CLIC SUR LES POINTS ========================================================= */ for( var i = 0; i < dots.length; i++ ){ dots[i].addEventListener( "click", function(event){ event.preventDefault(); event.stopPropagation(); if(window.innerWidth > 700){ return; } var index = parseInt( this.getAttribute("data-index"), 10 ); var cards = getCards(); if(!cards[index]){ return; } var card = cards[index]; var target = card.offsetLeft - ( (track.clientWidth - card.offsetWidth) / 2 ); for( var j = 0; j < dots.length; j++ ){ dots[j].classList.remove("active"); } this.classList.add("active"); track.scrollTo({ left:target, behavior:"smooth" }); } ); } /* ========================================================= INITIALISATION ========================================================= */ setTimeout( function(){ calculateActive(); }, 100 ); /* ========================================================= RESIZE ========================================================= */ window.addEventListener( "resize", function(){ clearTimeout(resizeTimer); resizeTimer = setTimeout( function(){ calculateActive(); }, 120 ); }); })();

RÉALISATIONS SÉLECTIONNÉES

Du vrai travail. Déjà en ligne.

Cathy & Christophe
MARIAGE — 2024

Cathy & Christophe

Film de mariage
Promo Réno-Jouets
VIDÉO PROMOTIONNELLE — 2026

Promo Réno-Jouets

Réno-Jouets
document.querySelectorAll(".jt-video").forEach(function(video){ function loadVideo(){ if(video.querySelector("iframe")) return; var videoId = video.getAttribute("data-video-id"); var iframe = document.createElement("iframe"); iframe.src = "https://www.youtube-nocookie.com/embed/" + videoId + "?autoplay=1&rel=0"; iframe.title = video.getAttribute("aria-label"); iframe.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"; iframe.allowFullscreen = true; video.innerHTML = ""; video.appendChild(iframe); } video.addEventListener("click",loadVideo); video.addEventListener( "keydown", function(event){ if( event.key === "Enter" || event.key === " " ){ event.preventDefault(); loadVideo(); } }); });

UNE PRODUCTION SANS FLOU

Quatre étapes. Un projet bien cadré.

Tu n’as pas besoin de savoir produire une vidéo. Sache ce que tu veux accomplir, je structure le reste.

01

Comprendre

Objectif, public, message, lieux, échéance et canaux de diffusion.

02

Préparer

Angle créatif, déroulement, questions, plans et logistique du tournage.

03

Tourner

Image 4K, prise de son professionnelle et drone lorsque pertinent.

04

Livrer

Montage, ajustements et fichiers adaptés au Web et aux réseaux sociaux.

(function(){ function initJTProcess(){ if(window.innerWidth > 600) return; const track = document.getElementById( "jtProcessTrack" ); if(!track) return; const groups = track.querySelectorAll( ".jt-process-group" ); if(groups.length < 2) return; /* =================================================== LARGEUR DU PREMIER GROUPE =================================================== */ const firstGroup = groups[0]; const groupWidth = firstGroup.getBoundingClientRect().width; /* =================================================== VITESSE =================================================== */ const speed = 28; let position = 0; let lastTime = performance.now(); /* =================================================== ANIMATION INFINIE =================================================== */ function animate(time){ const delta = time - lastTime; lastTime = time; position -= (speed * delta) / 1000; /* boucle invisible */ if( position <= -groupWidth ){ position += groupWidth; } track.style.transform = "translate3d(" + position + "px,0,0)"; requestAnimationFrame( animate ); } requestAnimationFrame( animate ); } /* ===================================================== ATTENDRE CARRD ===================================================== */ if( document.readyState === "complete" ){ setTimeout( initJTProcess, 500 ); }else{ window.addEventListener( "load", function(){ setTimeout( initJTProcess, 500 ); } ); } })();

Vidéaste mariage captant une cérémonie à Québec

DERRIÈRE LA CAMÉRA

Jeremy Tremblay, vidéaste.

Une approche proche du terrain, assez légère pour rester naturelle et assez rigoureuse pour livrer un résultat professionnel.

Je prends en charge les étapes essentielles de la production : préparation, tournage, son, montage et livraison. Il utilise un équipement Sony 4K, des micros professionnels et un drone, avec une certification de pilote de base en VLOS de Transports Canada.


4K Captation Sony
Image haute qualité
VLOS Pilote de drone certifié
Plans aériens lorsque pertinent
LOCAL Basé à Québec
Québec et environs


UNE PRODUCTION SANS FLOU

Avant d’appuyer sur « rec ».

JT Vidéaste réalise des vidéos corporatives et promotionnelles, des témoignages, des captations d’événements, des films de mariage ainsi que des images aériennes lorsque le lieu et les conditions le permettent.

Oui. Le service peut couvrir la préparation, le tournage, la prise de son, le montage, l’étalonnage et la livraison dans les formats nécessaires pour le Web et les réseaux sociaux.

Les projets sont principalement réalisés à Québec, dans la Capitale-Nationale et en Chaudière-Appalaches. Les déplacements plus loin, notamment vers Montréal, peuvent être discutés selon le mandat.

Décris simplement le type de projet, le lieu, la date souhaitée et l’usage prévu de la vidéo. Ces quelques détails permettent de proposer une approche et une soumission adaptées.

(function(){ "use strict"; var questions = document.querySelectorAll(".jt-faq-question"); questions.forEach(function(button){ button.addEventListener("click",function(){ var item = button.closest(".jt-faq-item"); var wasActive = item.classList.contains("active"); /* * Ferme toutes les autres FAQ */ document .querySelectorAll(".jt-faq-item") .forEach(function(other){ other.classList.remove("active"); var otherButton = other.querySelector(".jt-faq-question"); if(otherButton){ otherButton.setAttribute( "aria-expanded", "false" ); } }); /* * Ouvre celle sélectionnée */ if(!wasActive){ item.classList.add("active"); button.setAttribute( "aria-expanded", "true" ); } }); }); })();

Ce que nos clients disent

Les avis clients sont essentiels pour bâtir la confiance.

Avis Google
★★★★★
5.0 · 7 avis Google

Service incroyable et professionnel 🤩👌🏻 Un des meilleurs vidéastes à Québec. Très abordable, je le recommande à tout le monde!

★★★★★
AT
Alyson Treg
Avis Google

Excellent service avec Jeremy Tremblay ! Très professionnel, ponctuel et à l’écoute. La qualité vidéo était impeccable et le résultat final dépassait mes attentes. Je le recommande sans hésitation !

★★★★★
DL
Denise Lafortune
Avis Google

Vidéaste très sérieux et professionnel dans son approche. Le travail est rendu dans les temps et est fait avec soin. Je recommande.

★★★★★
NT
Nathan Tremblay
Avis Google

Un gars passionné, je le recommande!!

★★★★★
D
David
Avis Google

Jeune homme passionné, qui aime ce qu'il fait... ça se voit. Merci Jérémy pour ton beau travail... je le recommande.

★★★★★
KK
Kiwi Kawaii
Avis Google

Motivé et professionnel

★★★★★
VT
Vanessa Tremblay
Avis Google

Motivé, passionné et professionnel

★★★★★
MT
Michel Tremblay
Avis Google
(function(){ const track = document.getElementById("jtReviewTrack"); const dots = document.querySelectorAll(".jt-review-dot"); if(!track) return; const total = track.children.length; let index = 0; let timer; function show(){ track.style.transform = "translate3d(-" + (index * 100) + "%,0,0)"; dots.forEach(function(dot,i){ dot.classList.toggle( "active", i === index ); }); } function next(){ index++; if(index >= total){ index = 0; } show(); } function restart(){ clearInterval(timer); timer = setInterval(next,5000); } restart(); /* ===================================================== SWIPE MOBILE ===================================================== */ let startX = 0; let startY = 0; track.addEventListener( "touchstart", function(e){ startX = e.touches[0].clientX; startY = e.touches[0].clientY; }, {passive:true} ); track.addEventListener( "touchend", function(e){ const endX = e.changedTouches[0].clientX; const endY = e.changedTouches[0].clientY; const distanceX = startX - endX; const distanceY = startY - endY; if( Math.abs(distanceX) > 45 && Math.abs(distanceX) > Math.abs(distanceY) ){ if(distanceX > 0){ next(); }else{ index--; if(index < 0){ index = total - 1; } show(); } restart(); } }, {passive:true} ); })();

UN PROJET EN TÊTE?

Faisons une vidéo qui mérite d’être regardée.

Explique-moi ce que tu veux montrer, à qui tu veux parler et quand tu veux tourner. Je te répondrai avec une approche claire pour ton projet.

JT
ASSISTANT JT VIDÉASTE ● HORS LIGNE

Parlons de votre projet

Quelques informations avant de commencer.

JT FIN DU CLAVARDAGE

Cette conversation est maintenant terminée.

(()=>{"use strict"; const R=document.getElementById("jtchat"); if(!R)return; const $=s=>R.querySelector(s); /* ===================================================== CONFIG ===================================================== */ const URL="https://gacnvseubiivdiwntnol.supabase.co"; const KEY="sb_publishable_3FmGyMt-PJFnmDKstY4Tmg_9tm3vIDg"; const AI=URL+"/functions/v1/jt-ai-chat"; let S=null; let C=null; let online=false; let closed=false; let busy=false; let unread=0; let audio=null; let channels=[]; let realtimeOK=false; /* ===================================================== OUVERTURE ===================================================== */ const W=$(".jt-window"); const O=$("#jtopen"); const X=$(".jt-close"); let scrollPos=0; function openChat(){ if(W.classList.contains("open"))return; W.classList.add("open"); if(innerWidth<=600){ scrollPos=scrollY||0; R.classList.add("jt-mobile"); document.documentElement.classList.add("jt-locked"); document.body.classList.add("jt-chat-lock"); document.body.style.top="-"+scrollPos+"px"; } clearBadge(); } function closeChat(){ W.classList.remove("open"); R.classList.remove("jt-mobile"); document.documentElement.classList.remove("jt-locked"); document.body.classList.remove("jt-chat-lock"); document.body.style.top=""; if(innerWidth<=600) scrollTo(0,scrollPos); } O.onclick=e=>{ e.preventDefault(); e.stopPropagation(); W.classList.contains("open") ?closeChat() :openChat(); }; X.onclick=e=>{ e.preventDefault(); e.stopPropagation(); closeChat(); }; document.addEventListener("keydown",e=>{ if(e.key==="Escape"&&W.classList.contains("open")) closeChat(); }); /* ===================================================== BADGE ===================================================== */ function badge(){ const b=$("#jtbadge"); if(!b)return; if(unread>0){ b.textContent=unread>99?"99+":unread; b.classList.add("on"); }else{ b.textContent=""; b.classList.remove("on"); } } function clearBadge(){ unread=0; badge(); } function notify(){ if(W.classList.contains("open"))return; unread++; badge(); sound(); } /* ===================================================== SON ===================================================== */ function sound(){ try{ audio=audio||new(window.AudioContext||window.webkitAudioContext)(); if(audio.state==="suspended") audio.resume(); const o=audio.createOscillator(); const g=audio.createGain(); o.frequency.value=720; o.type="sine"; g.gain.setValueAtTime(.0001,audio.currentTime); g.gain.exponentialRampToValueAtTime(.05,audio.currentTime+.01); g.gain.exponentialRampToValueAtTime(.0001,audio.currentTime+.16); o.connect(g); g.connect(audio.destination); o.start(); o.stop(audio.currentTime+.17); }catch(e){} } /* ===================================================== ERREUR ===================================================== */ function error(t){ const e=$(".jt-error"); if(e)e.textContent=t||""; } /* ===================================================== TYPING ===================================================== */ function typing(t){ const e=$("#jttyping"); if(!e)return; e.textContent=t||""; e.classList.toggle("on",!!t); } function aiTyping(v){ if(v) typing("Assistant JT Vidéaste écrit..."); else if(!online) typing(""); } function jeremyTyping(v){ typing(v?"JT Vidéaste est en train d'écrire...":""); } /* ===================================================== STATUS ===================================================== */ function setOnline(v){ online=!!v; const title=$("#jttitle"); const status=$("#jtstatus"); const end=$(".jt-end"); if(title) title.textContent=online ?"JT VIDÉASTE" :"ASSISTANT JT VIDÉASTE"; if(status){ status.textContent=online ?"● EN LIGNE" :"● HORS LIGNE"; status.classList.toggle("online",online); } if(end) end.style.display=online||closed ?"none" :"block"; } /* ===================================================== MESSAGE ===================================================== */ function addMessage(text,me,id){ const box=$(".jt-messages"); if(!box)return; if(id&&box.querySelector('[data-jtid="'+id+'"]')) return; const d=document.createElement("div"); d.className="jt-msg "+(me?"jt-me":"jt-ai"); if(id) d.dataset.jtid=id; d.textContent=text; box.appendChild(d); box.scrollTop=box.scrollHeight; } /* ===================================================== SUPABASE ===================================================== */ function removeChannel(ch){ if(!ch||!S)return; try{ S.removeChannel(ch); }catch(e){} const i=channels.indexOf(ch); if(i>=0) channels.splice(i,1); } function removeAllChannels(){ channels.forEach(ch=>{ try{ S.removeChannel(ch); }catch(e){} }); channels=[]; } function addChannel(ch){ channels.push(ch); return ch; } /* ===================================================== REALTIME STATUS ===================================================== */ function realtimeStatus(status){ console.log("JT Realtime:",status); if(status==="SUBSCRIBED"){ realtimeOK=true; } if( status==="CHANNEL_ERROR"|| status==="TIMED_OUT"|| status==="CLOSED" ){ realtimeOK=false; console.warn( "JT Realtime indisponible:", status ); } } /* ===================================================== SUPABASE INIT ===================================================== */ function initSupabase(){ if(!window.supabase) return false; try{ S=window.supabase.createClient( URL, KEY, { realtime:{ params:{ eventsPerSecond:10 } } } ); return true; }catch(e){ console.error("Supabase init error",e); return false; } } /* ===================================================== ONLINE ===================================================== */ function listenSettings(){ if(!S)return; const ch=addChannel( S.channel("jt-settings-client") .on( "postgres_changes", { event:"UPDATE", schema:"public", table:"chat_settings", filter:"id=eq.1" }, p=>{ if(p.new) setOnline(p.new.is_online); } ) .subscribe(realtimeStatus) ); } /* ===================================================== CHARGER ONLINE ===================================================== */ async function loadOnline(){ if(!S)return; const q=await S .from("chat_settings") .select("is_online") .eq("id",1) .maybeSingle(); if(!q.error&&q.data) setOnline(q.data.is_online); } /* ===================================================== MESSAGE REALTIME ===================================================== */ function listenMessages(){ if(!S||!C)return; const ch=addChannel( S.channel("jt-msg-"+C) .on( "postgres_changes", { event:"INSERT", schema:"public", table:"messages", filter:"conversation_id=eq."+C }, p=>{ const m=p.new; if(!m)return; if(m.sender_type==="client") return; if( m.sender_type==="assistant"|| m.sender_type==="admin" ){ busy=false; aiTyping(false); jeremyTyping(false); addMessage( m.message, false, m.id ); notify(); } } ) .subscribe(realtimeStatus) ); } /* ===================================================== STATUS CONVERSATION ===================================================== */ function listenConversation(){ if(!S||!C)return; const ch=addChannel( S.channel("jt-status-"+C) .on( "postgres_changes", { event:"UPDATE", schema:"public", table:"conversations", filter:"id=eq."+C }, p=>{ if( !p.new|| p.new.status!=="closed" ) return; closed=true; busy=false; typing(""); const input=$(".jt-write textarea"); const send=$(".jt-send"); const end=$(".jt-end"); const finish=$(".jt-client-finish"); if(input){ input.disabled=true; input.value=""; } if(send) send.disabled=true; if(end) end.style.display="none"; if(finish) finish.classList.add("on"); } ) .subscribe(realtimeStatus) ); } /* ===================================================== TYPING ===================================================== */ function listenTyping(){ if(!S||!C)return; const ch=addChannel( S.channel("jt-typing-"+C) .on( "broadcast", { event:"typing" }, p=>{ const x=p.payload||{}; if( x.sender==="admin"|| x.sender==="jeremy" ){ jeremyTyping( x.typing===true ); } } ) .subscribe(realtimeStatus) ); } /* ===================================================== CHARGEMENT SUPABASE ===================================================== */ function load(){ if(window.supabase){ startSupabase(); return; } const s=document.createElement("script"); s.src= "https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"; s.onload=startSupabase; s.onerror=()=>{ console.error( "Impossible de charger Supabase" ); }; document.head.appendChild(s); } async function startSupabase(){ if(!initSupabase()){ error( "Connexion temporairement indisponible." ); return; } await loadOnline(); listenSettings(); } /* ===================================================== SAUVEGARDE ===================================================== */ async function save(text){ if(!S||!C||closed||!text) return false; const q=await S .from("messages") .insert({ conversation_id:C, sender_type:"client", message:text, is_ai:false, is_automatic:false }); if(q.error){ console.error( "MESSAGE ERROR", q.error ); return false; } return true; } /* ===================================================== IA ===================================================== */ async function askAI(text){ if( !C|| closed|| online|| busy ) return; busy=true; aiTyping(true); try{ const r=await fetch( AI, { method:"POST", headers:{ "Content-Type":"application/json", "apikey":KEY, "Authorization":"Bearer "+KEY }, body:JSON.stringify({ conversation_id:C, message:text }) } ); if(!r.ok) console.error( "AI ERROR", r.status ); }catch(e){ console.error( "AI ERROR", e ); } setTimeout(()=>{ busy=false; if(!online) typing(""); },20000); } /* ===================================================== DÉMARRER ===================================================== */ const start=$(".jt-start"); if(start){ start.onclick=async e=>{ e.preventDefault(); e.stopPropagation(); if(!S){ error( "Connexion temporairement indisponible." ); return; } const fn=($("#jt-fn")||{}).value?.trim()||""; const ln=($("#jt-ln")||{}).value?.trim()||""; const ph=($("#jt-ph")||{}).value?.trim()||""; const em=($("#jt-em")||{}).value?.trim()||""; const pj=($("#jt-pj")||{}).value?.trim()||""; if(!fn){ error("Veuillez entrer votre prénom."); return; } if(!ln){ error("Veuillez entrer votre nom."); return; } if(!em){ error("Veuillez entrer votre courriel."); return; } error(""); start.disabled=true; start.textContent="Connexion..."; C=crypto.randomUUID(); const q=await S .from("conversations") .insert({ id:C, first_name:fn, last_name:ln, phone:ph, email:em, description:pj, status:"open", ai_enabled:true }); if(q.error){ console.error(q.error); C=null; error( q.error.message|| "Impossible de démarrer la conversation." ); start.disabled=false; start.textContent= "Commencer la conversation →"; return; } closed=false; busy=false; clearBadge(); const form=$(".jt-form"); const chat=$(".jt-chat"); const end=$(".jt-end"); if(form) form.style.display="none"; if(chat) chat.classList.add("on"); if(end){ end.disabled=false; end.style.display= online?"none":"block"; } listenMessages(); listenConversation(); listenTyping(); addMessage( "Bonjour "+fn+" ! Merci de contacter JT Vidéaste. Comment puis-je vous aider ?", false ); if(pj){ addMessage( pj, true ); const ok=await save(pj); if(ok&&!online) askAI(pj); } start.disabled=false; start.textContent= "Commencer la conversation →"; }; } /* ===================================================== ENVOYER ===================================================== */ async function sendMessage(){ if(closed||!C) return; const input=$(".jt-write textarea"); if(!input) return; const text=input.value.trim(); if(!text) return; input.value=""; addMessage( text, true ); const ok=await save(text); if(ok&&!online) askAI(text); } const send=$(".jt-send"); if(send){ send.onclick=e=>{ e.preventDefault(); e.stopPropagation(); sendMessage(); }; } const input=$(".jt-write textarea"); if(input){ input.onkeydown=e=>{ if( e.key==="Enter"&& !e.shiftKey ){ e.preventDefault(); sendMessage(); } }; } /* ===================================================== TERMINER ===================================================== */ async function finishConversation(){ if( !S|| !C|| closed|| online ) return; const end=$(".jt-end"); if(end) end.disabled=true; const q=await S .from("conversations") .update({ status:"closed", closed_at:new Date().toISOString(), closed_by:"client" }) .eq("id",C); if(q.error){ console.error(q.error); if(end) end.disabled=false; error( "Impossible de terminer la conversation." ); return; } closed=true; typing(""); const input=$(".jt-write textarea"); const send=$(".jt-send"); if(input) input.disabled=true; if(send) send.disabled=true; if(end) end.style.display="none"; const finish=$(".jt-client-finish"); if(finish) finish.classList.add("on"); } const end=$(".jt-end"); if(end){ end.onclick=e=>{ e.preventDefault(); e.stopPropagation(); finishConversation(); }; } /* ===================================================== NOUVELLE CONVERSATION ===================================================== */ const newBtn=$(".jt-finish-new"); if(newBtn){ newBtn.onclick=e=>{ e.preventDefault(); e.stopPropagation(); removeAllChannels(); C=null; closed=false; busy=false; clearBadge(); typing(""); const box=$(".jt-messages"); const form=$(".jt-form"); const chat=$(".jt-chat"); const finish=$(".jt-client-finish"); const input=$(".jt-write textarea"); const send=$(".jt-send"); const end=$(".jt-end"); const start=$(".jt-start"); if(box) box.innerHTML=""; if(finish) finish.classList.remove("on"); if(chat) chat.classList.remove("on"); if(form) form.style.display="flex"; if(input){ input.disabled=false; input.value=""; } if(send) send.disabled=false; if(end){ end.disabled=false; end.style.display= online?"none":"block"; } if(start){ start.disabled=false; start.textContent= "Commencer la conversation →"; } error(""); openChat(); }; } /* ===================================================== RESIZE ===================================================== */ window.addEventListener( "resize", ()=>{ if( innerWidth<=600&& W.classList.contains("open") ){ R.classList.add("jt-mobile"); }else if(innerWidth>600){ R.classList.remove("jt-mobile"); } } ); /* ===================================================== START ===================================================== */ load(); })();
(function(){ "use strict"; /* ========================================================= CONFIGURATION ========================================================= */ var STORAGE_KEY = "jt_cookie_consent"; /* ========================================================= ÉLÉMENTS ========================================================= */ var overlay = document.getElementById( "jtCookieOverlay" ); var box = document.getElementById( "jtCookieBox" ); var accept = document.getElementById( "jtCookieAccept" ); var reject = document.getElementById( "jtCookieReject" ); var customize = document.getElementById( "jtCookieCustomize" ); var back = document.getElementById( "jtCookieBack" ); var save = document.getElementById( "jtCookieSave" ); var analyticsToggle = document.getElementById( "jtCookieAnalyticsToggle" ); /* ========================================================= OUVRIR ========================================================= */ function openCookies(){ if(!overlay) return; /* On s'assure que le preloader est complètement terminé avant d'afficher les cookies. */ var preloader = document.getElementById( "jt-preloader" ); if(preloader){ return; } /* Afficher les cookies */ overlay.classList.add( "jt-cookie-show" ); /* Bloquer le scroll */ document.documentElement.style.overflow = "hidden"; document.body.style.overflow = "hidden"; } /* ========================================================= FERMER ========================================================= */ function closeCookies(){ overlay.classList.remove( "jt-cookie-show" ); document.documentElement.style.overflow = ""; document.body.style.overflow = ""; } /* ========================================================= SAUVEGARDER ========================================================= */ function saveConsent(analytics){ localStorage.setItem( STORAGE_KEY, JSON.stringify({ necessary:true, analytics:analytics, date:new Date().toISOString() }) ); /* ===================================================== GOOGLE ANALYTICS ===================================================== */ if(analytics){ loadGoogleAnalytics(); } closeCookies(); } /* ========================================================= GOOGLE ANALYTICS ========================================================= */ function loadGoogleAnalytics(){ if( window.jtGoogleAnalyticsLoaded ){ return; } window.jtGoogleAnalyticsLoaded = true; var script = document.createElement( "script" ); script.async = true; script.src = "https://www.googletagmanager.com/gtag/js?id=G-RS39G0TH8L"; document.head.appendChild( script ); window.dataLayer = window.dataLayer || []; function gtag(){ dataLayer.push(arguments); } window.gtag = gtag; gtag( "js", new Date() ); gtag( "config", "G-RS39G0TH8L", { anonymize_ip:true } ); } /* ========================================================= ACCEPTER ========================================================= */ accept.addEventListener( "click", function(){ saveConsent(true); } ); /* ========================================================= REFUSER ========================================================= */ reject.addEventListener( "click", function(){ saveConsent(false); } ); /* ========================================================= PERSONNALISER ========================================================= */ customize.addEventListener( "click", function(){ box.classList.add( "jt-cookie-settings-open" ); } ); /* ========================================================= RETOUR ========================================================= */ back.addEventListener( "click", function(){ box.classList.remove( "jt-cookie-settings-open" ); } ); /* ========================================================= TOGGLE ========================================================= */ analyticsToggle.addEventListener( "click", function(){ analyticsToggle.classList.toggle( "active" ); } ); /* ========================================================= ENREGISTRER ========================================================= */ save.addEventListener( "click", function(){ var analytics = analyticsToggle.classList.contains( "active" ); saveConsent( analytics ); } ); /* ========================================================= CHOIX EXISTANT ========================================================= */ var existing = localStorage.getItem( STORAGE_KEY ); /* SI UN CHOIX EXISTE : On ne fait absolument rien. */ if(existing){ try{ var consent = JSON.parse(existing); if(consent.analytics){ loadGoogleAnalytics(); } }catch(e){} return; } /* ========================================================= PREMIÈRE VISITE ========================================================= IMPORTANT : On ne lance PLUS : setTimeout(openCookies,500) Le cookie attend maintenant que le PRELOADER disparaisse. ========================================================= */ /* Fonction qui attend la disparition du preloader. */ function waitForPreloader(){ var preloader = document.getElementById( "jt-preloader" ); /* Le preloader existe encore : on attend. */ if(preloader){ requestAnimationFrame( waitForPreloader ); return; } /* Le preloader est supprimé : on affiche immédiatement le cookie. */ openCookies(); } /* ========================================================= LANCER L'ATTENTE ========================================================= */ waitForPreloader(); })();

erreur
404

Cette page n'existe pas.

La page que vous recherchez a peut-être été déplacée, supprimée ou n’a simplement jamais existé.


JT VIDÉASTE

Paiement

Entrez votre numéro de facture et votre nom de famille ou entreprise

Sous-total0,00 $
Sous-total0,00 $
TPS0,00 $
TVQ0,00 $
Total à payer0,00 $
Le montant affiché comprend la TPS et la TVQ. Aucun frais supplémentaire n'est ajouté au client.
Paiement par Interac

Envoyez votre transfert à :

[email protected]

Inscrivez FAC-001 dans le message.

(()=>{ const SB="https://tbpfzhcqzdlxpdmttstv.supabase.co", KEY="sb_publishable_V49JGvqbFgNOJZ40lgVatA_iBEEfP5k", SF="create-stripe-checkout"; const $=id=>document.getElementById(id); let inv=null, base=0, subtotal=0, tps=0, tvq=0, total=0; const money=v=> new Intl.NumberFormat("fr-CA",{ style:"currency", currency:"CAD" }).format(+v||0); const norm=v=> String(v||"") .trim() .toLowerCase() .normalize("NFD") .replace(/[\u0300-\u036f]/g,""); const date=v=> v? new Intl.DateTimeFormat("fr-CA",{ day:"numeric", month:"long", year:"numeric" }).format(new Date(v+"T00:00:00")) :"—"; async function getInvoice(n){ const r=await fetch( SB+"/rest/v1/rpc/get_invoice_for_payment", { method:"POST", headers:{ "Content-Type":"application/json", apikey:KEY, Authorization:"Bearer "+KEY }, body:JSON.stringify({ p_invoice_number:n }) }); const d=await r.json(); if(!r.ok) throw Error(d.message||d.details||"Erreur Supabase"); if(!d?.length) throw Error("Aucune facture trouvée."); return d[0]; } /* ========================================================= CALCUL DU PAIEMENT IMPORTANT : LE SOUS-TOTAL VIENT DIRECTEMENT DE SUPABASE. AUCUN CALCUL DU SOUS-TOTAL À PARTIR DU TOTAL TTC. AUCUN FRAIS STRIPE. ========================================================= */ function calc(){ /* Le champ subtotal de Supabase est la source officielle du montant AVANT TAXES. TPS = 5 % TVQ = 9,975 % Le total est ensuite calculé à partir du subtotal. */ subtotal=Math.round( (Number(inv?.subtotal)||0)*100 )/100; tps=Math.round( subtotal*.05*100 )/100; tvq=Math.round( subtotal*.09975*100 )/100; total=Math.round( (subtotal+tps+tvq)*100 )/100; $("baseAmount").textContent=money(subtotal); $("payAmount").textContent=money(subtotal); $("payTps").textContent=money(tps); $("payTvq").textContent=money(tvq); $("amount").textContent=money(total); } $("find").onclick=async()=>{ const n=$("num").value.trim(); const ln=$("lastname").value.trim(); $("err").textContent=""; if(!n||!ln){ $("err").textContent= "Entrez votre numéro de facture et votre nom."; return; } $("find").disabled=true; $("find").textContent="Vérification..."; $("load").style.display="block"; try{ const x=await getInvoice(n); if(norm(x.customer_last_name)!==norm(ln)) throw Error( "Le numéro de facture ou le nom est incorrect." ); inv=x; const type= String(x.invoice_type||"deposit").toLowerCase(); base=type==="deposit" ?Number(x.deposit_amount)||0 :Number(x.final_amount)||Number(x.total)||0; if( (type==="deposit"&&x.deposit_paid)|| (type!=="deposit"&&x.final_paid) ) throw Error( type==="deposit" ?"Le dépôt de cette facture est déjà payé." :"Le paiement final de cette facture est déjà payé." ); $("rnum").textContent= x.invoice_number||"—"; $("client").textContent= [x.customer_first_name,x.customer_last_name] .filter(Boolean) .join(" ")||"—"; $("date").textContent= date(x.event_date); $("invoiceType").textContent= type==="deposit" ?"DÉPÔT" :"PAIEMENT FINAL"; $("description").textContent= x.description||"—"; $("status").textContent= x.status==="paid" ?"PAYÉ" :x.status==="partial" ?"PARTIEL" :x.status==="cancelled" ?"ANNULÉ" :"EN ATTENTE"; $("interacInvoice").textContent= x.invoice_number||"FAC-001"; if(x.invoice_pdf_path){ const p= SB+ "/storage/v1/object/public/invoice-pdfs/"+ x.invoice_pdf_path; $("frame").src=p; $("openPdf").href=p; $("openPdf").style.display="block"; }else{ $("frame").removeAttribute("src"); $("openPdf").style.display="none"; } calc(); $("search").style.display="none"; $("result").style.display="block"; }catch(e){ $("err").textContent= e.message||"Une erreur est survenue."; }finally{ $("load").style.display="none"; $("find").disabled=false; $("find").textContent="Continuer"; } }; $("num").onkeydown= $("lastname").onkeydown=e=>{ if(e.key==="Enter") $("find").click(); }; document.querySelectorAll(".method").forEach(b=> b.onclick=()=>{ document.querySelectorAll(".method") .forEach(x=> x.classList.remove("active") ); b.classList.add("active"); const stripe= b.dataset.m==="stripe"; $("stripe").classList.toggle( "on", stripe ); $("interac").classList.toggle( "on", !stripe ); /* Changement de mode de paiement : aucun changement du montant. */ calc(); }); $("pdfBtn").onclick=()=>{ $("pdf").classList.toggle("open"); $("pdfBtn").classList.toggle("open"); }; /* ========================================================= STRIPE ========================================================= */ $("stripeBtn").onclick=async()=>{ if(!inv) return; const b=$("stripeBtn"); const err=$("stripeError"); err.textContent=""; b.disabled=true; b.textContent="Connexion à Stripe..."; try{ const r=await fetch( SB+"/functions/v1/"+SF, { method:"POST", headers:{ "Content-Type":"application/json", apikey:KEY, Authorization:"Bearer "+KEY }, body:JSON.stringify({ invoice_id:inv.id, /* Le montant envoyé à Stripe est le total calculé à partir du subtotal Supabase. Aucun frais Stripe n'est ajouté. */ amount:Number(total.toFixed(2))||0 }) }); const d=await r.json() .catch(()=>({})); if(!r.ok) throw Error( d.error|| d.message|| "Impossible de créer le paiement Stripe." ); if(!d.checkout_url) throw Error( "Lien Stripe manquant." ); location.href=d.checkout_url; }catch(e){ err.textContent= e.message|| "Erreur Stripe."; b.disabled=false; b.textContent= "Payer par carte"; } }; /* ========================================================= INTERAC ========================================================= */ $("interacBtn").onclick=async()=>{ if(!inv) return; const b=$("interacBtn"); const final= String(inv.invoice_type||"") .toLowerCase()!=="deposit"; b.disabled=true; b.textContent="Enregistrement..."; try{ const q=await fetch( SB+ "/rest/v1/payments?invoice_id=eq."+ encodeURIComponent(inv.id)+ "&payment_method=eq.interac"+ "&status=eq.pending&select=id", { headers:{ apikey:KEY, Authorization:"Bearer "+KEY } }); const old=await q.json(); if(!q.ok) throw Error( "Impossible de vérifier le paiement." ); if(!old?.length){ const r=await fetch( SB+"/rest/v1/payments", { method:"POST", headers:{ "Content-Type":"application/json", apikey:KEY, Authorization:"Bearer "+KEY, Prefer:"return=minimal" }, body:JSON.stringify({ invoice_id:inv.id, payment_type: final ?"final" :"deposit", payment_method: "interac", /* Interac paie exactement le total. Aucun frais Stripe. */ amount: Number(total.toFixed(2))||0, /* Aucun frais Stripe pour Interac. */ stripe_fee:0, total_charged: Number(total.toFixed(2))||0, status:"pending", interac_reference:null, paid_at:null }) }); if(!r.ok){ const t=await r.text(); let d={}; try{ d=JSON.parse(t) }catch(_){} throw Error( d.message|| d.details|| d.hint|| "Impossible d'enregistrer." ); } } b.textContent= "Demande envoyée ✓"; b.style.background="#00b67a"; b.style.color="#fff"; $("interacSuccess").innerHTML= "Paiement Interac signalé."+ "

Votre demande a été enregistrée. "+ "Nous allons vérifier le transfert.

"; $("interacSuccess").style.display= "block"; }catch(e){ alert(e.message); b.disabled=false; b.textContent= "J'ai effectué mon transfert"; } }; $("back").onclick=()=>{ $("result").style.display="none"; $("search").style.display="block"; $("num").value=""; $("lastname").value=""; $("err").textContent=""; $("interacSuccess").style.display= "none"; $("interacBtn").disabled=false; $("interacBtn").textContent= "J'ai effectué mon transfert"; $("interacBtn").style.background=""; $("interacBtn").style.color=""; $("stripeError").textContent=""; inv=null; base=0; subtotal=0; tps=0; tvq=0; total=0; }; })();

CAPTATION ÉVÉNEMENTIELLE · QUÉBEC

Ton événement ne devrait pas finir quand la salle se vide.


Une captation vidéo bien préparée permet de conserver le contenu, montrer l’ambiance et créer du matériel utile pour la suite.

ConférenceLancementSpectacleActivité spécialeRésumé vidéo

CAPTER CE QUI COMPTE

Le contenu, l’énergie et les moments clés.

Chaque événement a son rythme. Avant de tourner, on identifie les prises de parole, les séquences incontournables, les contraintes du lieu et la façon dont les images seront utilisées. La captation peut ensuite servir à revoir une conférence, publier un résumé dynamique, alimenter les réseaux sociaux ou promouvoir la prochaine édition.

01

Repérage des priorités

Horaire, moments clés, personnes à suivre, son disponible et contraintes du lieu.

02

Captation sur place

Plans d’ensemble, détails, réactions, entrevues et son selon le mandat.

03

Montage exploitable

Version complète, résumé ou extraits à déterminer selon la diffusion prévue.


AVANT, PENDANT, APRÈS

Une journée peut produire plus qu’une seule vidéo.

Lorsque les plans sont pensés d’avance, la même captation peut soutenir plusieurs usages sans diluer le message.

Vidéo récapitulative

Un montage rythmé qui restitue l’ambiance et les faits saillants.

Conférence complète

Une version structurée pour les personnes absentes ou la rediffusion.

Entrevues sur place

Des réactions et témoignages recueillis pendant que l’expérience est fraîche.

Extraits sociaux

Des séquences courtes à planifier selon les plateformes et le contenu capté.


L’ÉVÉNEMENT EST AU CALENDRIER?

Réservons le tournage avant que la date se remplisse.

Envoie la date, le lieu, la durée et le livrable souhaité. Jeremy pourra évaluer l’équipement et la couverture nécessaires.


PRODUCTION VIDÉO POUR ENTREPRISES

Vidéo corporative à

Québec.


Une vidéo professionnelle pour présenter ton entreprise, expliquer ton offre et donner aux bons clients une raison claire de te choisir.

ConceptTournage 4KSon professionnelDroneMontage

ÊTRE COMPRIS AVANT D’ÊTRE CHOISI

Ton entreprise mérite mieux qu’une explication compliquée.

Une bonne vidéo corporative montre rapidement qui tu aides, comment tu travailles et ce qui rend ton approche crédible. Elle peut soutenir une page Web, une présentation, une campagne ou tes réseaux sociaux sans perdre le fil du message. JT Vidéaste prépare le tournage avec toi, dirige les prises de vue et les entrevues, capte un son propre et construit un montage adapté au contexte où la vidéo sera réellement utilisée.

01

Message clair

Objectif, public et angle de la vidéo définis avant de tourner.

02

Tournage complet

Image 4K, entrevues, plans d’ambiance, son et drone au besoin.

03

Formats utiles

Montage principal et déclinaisons à convenir selon les canaux.


SELON TON OBJECTIF

Un format qui sert le parcours du client.

Le meilleur format n’est pas le plus long. C’est celui qui répond à la bonne question au bon moment.

Présentation d’entreprise

Pour faire comprendre ton offre, ton équipe et ta façon de travailler.

Vidéo promotionnelle

Pour lancer un produit, une campagne, une activité ou une nouvelle offre.

Témoignage client

Pour transformer une expérience réelle en preuve de confiance crédible.

Recrutement et marque employeur

Pour montrer le quotidien, la culture et les personnes derrière l’organisation.


PROJETS D’ENTREPRISE

VOIR LE TRAVAIL EN CONTEXTE.

TOUTES LES RÉALISATIONS (function(){ const showcase=document.querySelector(".jt-project-showcase"); if(!showcase)return; const cards=Array.from(showcase.querySelectorAll(".jt-project-card")); const prev=showcase.querySelector(".jt-project-arrow-left"); const next=showcase.querySelector(".jt-project-arrow-right"); let current=0,locked=false; function updateCards(){ cards.forEach((card,i)=>{ card.classList.remove("active","next","next2"); const position=(i-current+cards.length)%cards.length; if(position===0)card.classList.add("active"); else if(position===1)card.classList.add("next"); else if(position===2)card.classList.add("next2"); }); } function changeProject(direction){ if(locked)return; locked=true; current=direction===1 ?(current+1)%cards.length :(current-1+cards.length)%cards.length; updateCards(); setTimeout(()=>locked=false,430); } prev.addEventListener("click",()=>changeProject(-1)); next.addEventListener("click",()=>changeProject(1)); cards.forEach(card=>{ card.addEventListener("click",()=>{ if(!card.classList.contains("active"))return; if(card.querySelector("iframe"))return; const id=card.getAttribute("data-video-id"); const iframe=document.createElement("iframe"); iframe.src="https://www.youtube-nocookie.com/embed/"+id+"?autoplay=1&rel=0"; iframe.title="JT Vidéaste"; iframe.allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"; iframe.allowFullscreen=true; iframe.style.position="absolute"; iframe.style.inset="0"; iframe.style.width="100%"; iframe.style.height="100%"; iframe.style.border="0"; card.innerHTML=""; card.appendChild(iframe); }); }); let startX=0,startY=0; showcase.addEventListener("touchstart",e=>{ if(!e.touches.length)return; startX=e.touches[0].clientX; startY=e.touches[0].clientY; },{passive:true}); showcase.addEventListener("touchend",e=>{ if(!e.changedTouches.length)return; const endX=e.changedTouches[0].clientX; const endY=e.changedTouches[0].clientY; const diffX=endX-startX; const diffY=endY-startY; if(Math.abs(diffX)>50&&Math.abs(diffX)>Math.abs(diffY)) changeProject(diffX<0?1:-1); },{passive:true}); updateCards(); })();

PRÈS DU TERRAIN

Production vidéo dans la grande région de Québec.

JT Vidéaste dessert principalement la ville de Québec, la Capitale-Nationale et la rive sud. Un tournage ailleurs au Québec, notamment vers Montréal, peut aussi être planifié selon le projet.

QUÉBEC
BEAUPORT
LÉVIS
SAINTE-FOY

TON ENTREPRISE A QUELQUE CHOSE À MONTRER

Transformons-le en une vidéo claire et crédible.

Indique le message, le public et la date visée. Jeremy pourra proposer un format adapté au mandat.


FILM DE MARIAGE · QUÉBEC

Les voix. Les gestes.

Votre histoire.


Une captation attentive et un montage vivant pour retrouver ce que les photos seules ne peuvent pas faire entendre.

PréparatifsCérémonieDiscoursSoiréeDrone selon conditions

REVIVRE, PAS REJOUER

Un film fidèle à l’énergie de votre journée.

Le rôle du vidéaste n’est pas de transformer le mariage en plateau de tournage. Jeremy observe, anticipe et intervient avec discrétion pour capter les moments tels qu’ils arrivent. Les vœux, les discours, les regards et l’ambiance deviennent la matière d’un film construit autour de votre couple — sans poses forcées ni scénario qui ne vous ressemble pas.

01

Avant le mariage

Échange sur l’horaire, les lieux, les personnes importantes et vos priorités.

02

Pendant la journée

Captation 4K, prise de son et présence discrète aux moments essentiels.

03

Après

Sélection des moments, montage, couleur, son et livraison numérique.


CE QUI RESTE

Le mouvement et les voix changent tout.

Un film permet de revoir les moments vécus et ceux que vous n’avez pas pu voir pendant la journée.

Les préparatifs

Les détails, la fébrilité et les échanges avant la cérémonie.

La cérémonie

L’arrivée, les vœux, les alliances et les réactions de vos proches.

Les discours

Les mots qui font rire, surprennent et touchent, captés avec un son soigné.

La célébration

L’énergie de la réception, de la première danse jusqu’à la soirée.


Christophe et Cathy — Film de mariage
FILM DE MARIAGE · 2024

Christophe & Cathy

Film de mariage
VOIR LE FILM
(function(){ var video = document.querySelector( ".jt-wedding-feature-video" ); if(!video)return; function loadWeddingVideo(){ if(video.querySelector("iframe"))return; var id = video.getAttribute("data-video-id"); var iframe = document.createElement("iframe"); iframe.src = "https://www.youtube-nocookie.com/embed/" + id+ "?autoplay=1&rel=0"; iframe.title = "Christophe et Cathy — Film de mariage"; iframe.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"; iframe.allowFullscreen = true; iframe.style.position="absolute"; iframe.style.top="0"; iframe.style.left="0"; iframe.style.width="100%"; iframe.style.height="100%"; iframe.style.border="0"; video.innerHTML=""; video.appendChild(iframe); } video.addEventListener( "click", loadWeddingVideo ); video.addEventListener( "keydown", function(e){ if( e.key==="Enter" || e.key===" " ){ e.preventDefault(); loadWeddingVideo(); } }); })();

VOTRE DATE EST FIXÉE?

Voyons si elle est encore disponible.

Indiquez la date, les lieux principaux et le type de film recherché. Jeremy pourra confirmer la disponibilité et préparer une proposition adaptée.


DERRIÈRE LA CAMÉRA

Jeremy Tremblay,

vidéaste.


Une approche proche du terrain, assez légère pour garder les échanges naturels et assez structurée pour livrer une vidéo utile.


L’APPROCHE JT

Filmer avec une raison.

Un plan doit soutenir le message, l’émotion ou la prochaine action. Le matériel et le montage suivent le besoin du projet plutôt qu’une formule fixe.

Comprendre

Le public, le contexte et ce que la vidéo doit accomplir.

Mettre à l’aise

Diriger clairement sans rendre le tournage artificiel.

Rester utile

Livrer des images pensées pour leur véritable contexte de diffusion.


Vidéaste mariage captant une cérémonie à Québec

UNE PERSONNE, UN FIL CONDUCTEUR

Le projet reste cohérent du début à la fin.

Jeremy prend en charge les étapes essentielles : préparation, tournage, son, montage et livraison.

Son travail couvre les vidéos d’entreprise et promotionnelles, les événements, les mariages et les prises de vue aériennes lorsque le contexte le permet. Chaque production commence par l’objectif réel de la vidéo et l’endroit où elle sera diffusée.


4K Captation Sony
Image haute qualité
VLOS Pilote de drone certifié
Plans aériens lorsque pertinent
LOCAL Basé à Québec
Québec et environs


UNE IDÉE, UN BESOIN OU UNE DATE

Parle du projet directement avec Jeremy.

Explique-moi ce que tu veux montrer, à qui tu veux parler et quand tu veux tourner. Je te répondrai avec une approche claire pour ton projet.


PORTFOLIO JT VIDÉASTE

Les images parlent.

Regarde.


Vidéos promotionnelles, projets d’entreprise et film de mariage : une sélection de productions publiques réalisées par Jeremy Tremblay.


Christophe et Cathy
MARIAGE · 2024
Christophe & Cathy
Film de mariage
Promo Réno-Jouets
VIDÉO PROMOTIONNELLE · 2026
Promo Réno-Jouets
Réno-Jouets
Le chemin des jouets
VIDÉO D’ENTREPRISE · 2026
Le chemin des jouets
Réno-Jouets
Promo L’Expresso
VIDÉO PROMOTIONNELLE · 2026
Promo L’Expresso
L'Expresso Céramiqu'Arts
document.querySelectorAll(".jt-portfolio-video").forEach(function(video){ function loadVideo(){ if(video.querySelector("iframe")) return; var id=video.getAttribute("data-video-id"); var iframe=document.createElement("iframe"); iframe.src= "https://www.youtube-nocookie.com/embed/" +id+ "?autoplay=1&rel=0"; iframe.title="JT Vidéaste"; iframe.allow= "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"; iframe.allowFullscreen=true; video.innerHTML=""; video.appendChild(iframe); } video.addEventListener("click",loadVideo); video.addEventListener("keydown",function(e){ if(e.key==="Enter" || e.key===" "){ e.preventDefault(); loadVideo(); } }); });

DERRIÈRE LE RÉSULTAT

Une méthode simple, du premier échange à la livraison.

Chaque projet est préparé selon son objectif, son public et son contexte de diffusion. Le matériel et le montage suivent le besoin, pas une recette fixe.

Image 4K

Captation Sony et sélection d’objectifs adaptée aux plans recherchés.

Son professionnel

Microphones adaptés aux entrevues, prises de parole et ambiances.

Drone certifié

Prises de vue aériennes lorsque le lieu, la réglementation et les conditions le permettent.


TON PROJET POURRAIT ÊTRE LE PROCHAIN

Décris l’idée. On trouvera la bonne façon de la filmer.

Explique-moi ce que tu veux montrer, à qui tu veux parler et quand tu veux tourner. Je te répondrai avec une approche claire pour ton projet.


PRODUCTION VIDÉO À QUÉBEC

Le bon format pour

le bon objectif.


JT Vidéaste prépare, tourne et monte des vidéos pour faire comprendre une entreprise, prolonger un événement ou raconter une journée de mariage.


01
ENTREPRISES ET ORGANISATIONS

Vidéo corporative

Présentation d’entreprise, publicité, témoignage client, recrutement et contenu destiné au Web ou aux réseaux sociaux.

Découvrir
02
CONFÉRENCES, LANCEMENTS ET SPECTACLES

Captation d’événement

Captation des prises de parole et de l’ambiance, puis montage d’un contenu complet ou d’un résumé à rediffuser.

Découvrir
03
LES VOIX, LES GESTES, L’AMBIANCE

Film de mariage

Une captation discrète, un son soigné et un montage sensible pour conserver l’histoire réelle de la journée.

Découvrir

DU PREMIER ÉCHANGE À LA LIVRAISON

Une production prise en charge.

Jeremy peut couvrir la préparation, le tournage, la prise de son, le montage, l’étalonnage et la livraison des formats convenus. Le drone est utilisé lorsque le lieu, la réglementation et les conditions le permettent.

Préparation

Objectif, public, message, déroulement, lieux et échéance.

Production

Image Sony 4K, son professionnel et direction des prises de vue.

Livraison

Montage et fichiers adaptés aux usages définis pour le projet.


TU N’AS PAS À CONNAÎTRE LA PRODUCTION VIDÉO

Explique le besoin. Jeremy cadrera le reste.

Explique-moi ce que tu veux montrer, à qui tu veux parler et quand tu veux tourner. Je te répondrai avec une approche claire pour ton projet.


CONFIDENTIALITÉ

Des renseignements
recueillis seulement
pour répondre à ta
demande.

Dernière mise à jour : 9 août 2026

Responsable

JT Vidéaste, exploité par Jeremy Tremblay, est responsable des renseignements transmis au moyen de ce site. Toute question ou demande peut être envoyée à [email protected] ou faite au 418 478-5350.

Renseignements recueillis

Le formulaire peut recueillir ton nom, ton entreprise, ton courriel, ton téléphone, le type de service, la date visée, la description du projet et les paramètres d’attribution publicitaire présents dans le lien utilisé.

Utilisation

Ces renseignements servent à répondre à la demande, évaluer le projet, préparer une soumission, effectuer le suivi et mesurer la provenance des demandes. JT Vidéaste ne les vend pas.

Fournisseurs

Les renseignements sont conservés dans l’infrastructure d’hébergement du site et peuvent être transmis par FormSubmit afin d’acheminer la demande à l’adresse courriel de JT Vidéaste. Selon l’infrastructure utilisée par ces fournisseurs, un traitement peut avoir lieu à l’extérieur du Québec.

Conservation et sécurité

Les renseignements sont conservés seulement le temps nécessaire pour répondre, préparer la soumission et effectuer le suivi, sous réserve des obligations applicables. L’accès doit être limité aux personnes qui en ont besoin pour traiter la demande.

Témoins et mesure

JT Vidéaste n’a actuellement activé aucun témoin publicitaire ou outil d’analyse sur ce site. Des mécanismes techniques strictement nécessaires peuvent être utilisés par l’hébergement. La politique et les choix de consentement devront être mis à jour avant l’activation d’une mesure publicitaire.

Tes droits

Tu peux demander l’accès à tes renseignements, leur correction ou leur retrait en communiquant avec JT Vidéaste. Le consentement peut être retiré, sous réserve des obligations déjà engagées et des exigences légales applicables.


CONTACTER JT VIDÉASTE

Parlons de ce que

tu veux montrer.


Entreprise, événement ou mariage : donne le contexte, la date et l’usage prévu. Jeremy pourra te guider sur la suite.


CONTACT DIRECT

JEREMY TREMBLAY VIDÉASTE

Services principalement offerts à Québec, dans la Capitale-Nationale et en Chaudière-Appalaches. Les projets ailleurs peuvent être discutés selon le mandat.

PROJET
Demande de soumission
Commencer

VOIR LE TRAVAIL AU QUOTIDIEN

JT Vidéaste ailleurs sur le Web.

Instagram Voir Facebook Voir YouTube Voir LinkedIn Voir

DEMANDE REÇUE

Merci. Ton projet
est maintenant
entre de bonnes
mains.

Les renseignements ont été enregistrés. Jeremy pourra les examiner et communiquer avec toi pour préciser le besoin, le tournage et la livraison.

Projet urgent? 418 478-5350
Réponse sous 24h

PARLONS DU PROJET

Quelques détails suffisent pour commencer.

Tu n’as pas besoin d’arriver avec un scénario. Décris le besoin, le public, le lieu et la date visée. Jeremy pourra t’aider à cadrer la production.


CONTACT DIRECT

418 478-5350
[email protected]

Réponse sous 24 h — Nous vous contacterons par courriel dans un délai de 24 heures suivant l’envoi de votre demande.