
Recherche avancée
Médias (29)
-
#7 Ambience
16 octobre 2011, par
Mis à jour : Juin 2015
Langue : English
Type : Audio
-
#6 Teaser Music
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#5 End Title
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#3 The Safest Place
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#4 Emo Creates
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#2 Typewriter Dance
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
Autres articles (96)
-
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
Mediabox : ouvrir les images dans l’espace maximal pour l’utilisateur
8 février 2011, parLa visualisation des images est restreinte par la largeur accordée par le design du site (dépendant du thème utilisé). Elles sont donc visibles sous un format réduit. Afin de profiter de l’ensemble de la place disponible sur l’écran de l’utilisateur, il est possible d’ajouter une fonctionnalité d’affichage de l’image dans une boite multimedia apparaissant au dessus du reste du contenu.
Pour ce faire il est nécessaire d’installer le plugin "Mediabox".
Configuration de la boite multimédia
Dès (...) -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs
Sur d’autres sites (16310)
-
Trying to convert code to be compatible with macOS by not using the .exe version of FFmpeg and FFmprobe. Cant open the .mp4 file when i go to run code
9 juillet 2024, par Bruno HawkinsI am attempting to edit some code in python for extracting frames from a video (using parallel processing to make it faster) a friend created that works on windows, so that it can be used on macOS. However, i am running into some issues and i am not sure what the problem is.


Essentially, when i go to run the frame extractor and try to select a video in the formats specified, it wont let me select it.


i have commented my code best i can. i am an amateur programmer so apologies if it is straightforward.


import os
import subprocess
import multiprocessing
import tkinter as tk
from tkinter import ttk, filedialog, messagebox

def extract_frames(video_path, output_folder, fps, start_time, duration, process_number):
 video_name = os.path.splitext(os.path.basename(video_path))[0]
 part_output_folder = os.path.join(output_folder, f"part_{process_number}")
 if not os.path.exists(part_output_folder):
 os.makedirs(part_output_folder)

 # Using 'ffmpeg' instead of 'ffmpeg.exe' for macOS compatibility
 ffmpeg_command = [
 'ffmpeg', '-ss', str(start_time), '-t', str(duration), '-i', video_path, '-vf', f'fps={fps}',
 os.path.join(part_output_folder, f'{video_name}_frame_%07d.png')
 ]

 print(f"Running FFmpeg command: {' '.join(ffmpeg_command)}")

 try:
 process = subprocess.run(ffmpeg_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 if process.returncode != 0:
 print(f"Cannot process the file {video_path}: {process.stderr.decode('utf-8')}")
 return part_output_folder, 0
 except Exception as e:
 print(f"Failed to run FFmpeg command: {str(e)}")
 return part_output_folder, 0

 frame_count = len([f for f in os.listdir(part_output_folder) if f.endswith('.png')])
 return part_output_folder, frame_count

def worker_function(queue, video_path, output_folder, fps, start_time, duration, process_number):
 result = extract_frames(video_path, output_folder, fps, start_time, duration, process_number)
 queue.put(result)

def parallel_frame_extraction(video_path, output_folder, fps, num_processes):
 # Use 'ffprobe' instead of 'ffprobe.exe' for macOS compatibility
 ffprobe_command = [
 'ffprobe', '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'format=duration', '-of',
 'default=noprint_wrappers=1:nokey=1', video_path
 ]

 try:
 result = subprocess.run(ffprobe_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 duration = float(result.stdout.strip())
 except Exception as e:
 messagebox.showerror("Error", f"Failed to get video duration: {str(e)}")
 return

 chunk_duration = duration / num_processes
 processes = []
 manager = multiprocessing.Manager()
 queue = manager.Queue()

 if not os.path.exists(output_folder):
 os.makedirs(output_folder)

 for i in range(num_processes):
 start_time = i * chunk_duration
 p = multiprocessing.Process(target=worker_function,
 args=(queue, video_path, output_folder, fps, start_time, chunk_duration, i))
 p.start()
 processes.append(p)

 for p in processes:
 p.join()

 global_frame_offset = 0
 while not queue.empty():
 part_output_folder, frame_count = queue.get()
 frame_files = sorted([f for f in os.listdir(part_output_folder) if f.endswith('.png')])
 for i, frame_file in enumerate(frame_files):
 new_name = os.path.join(output_folder,
 f'{os.path.basename(video_path)}_frame_{global_frame_offset + i:07d}.png')
 os.rename(os.path.join(part_output_folder, frame_file), new_name)
 global_frame_offset += frame_count
 os.rmdir(part_output_folder)

 messagebox.showinfo("Complete",
 f"Frame extraction completed for {video_path}. Total frames extracted: {global_frame_offset}")

def start_frame_extraction():
 video_path = filedialog.askopenfilename(filetypes=[("Video files", "*.mp4;*.avi;*.mkv")])
 if not video_path:
 return

 output_folder = output_folder_var.get()
 if not output_folder:
 return

 fps = int(fps_var.get())
 num_processes = int(num_processes_var.get())

 parallel_frame_extraction(video_path, output_folder, fps, num_processes)

if __name__ == "__main__":
 root = tk.Tk()
 root.title("Frame Extraction")

 output_folder_var = tk.StringVar()
 fps_var = tk.StringVar(value="1")
 num_processes_var = tk.StringVar(value="4")

 def browse_output_folder():
 folder_selected = filedialog.askdirectory()
 output_folder_var.set(folder_selected)

 tk.Label(root, text="Output Folder:").grid(row=0, column=0, padx=10, pady=10)
 tk.Entry(root, textvariable=output_folder_var, width=50).grid(row=0, column=1, padx=10, pady=10)
 tk.Button(root, text="Browse", command=browse_output_folder).grid(row=0, column=2, padx=10, pady=10)

 tk.Label(root, text="FPS:").grid(row=1, column=0, padx=10, pady=10)
 tk.Entry(root, textvariable=fps_var, width=10).grid(row=1, column=1, padx=10, pady=10)

 tk.Label(root, text="Number of Processes:").grid(row=2, column=0, padx=10, pady=10)
 tk.Entry(root, textvariable=num_processes_var, width=10).grid(row=2, column=1, padx=10, pady=10)

 tk.Button(root, text="Start Frame Extraction", command=start_frame_extraction).grid(row=3, column=0, columnspan=3,
 padx=10, pady=20)

 root.mainloop()



I tried changing the FFmpeg and FFmprobe path formats from


ffmpeg_path = os.path.join(os.path.dirname(__file__), 'ffmpeg-7.0.1-essentials_build', 'bin', 'ffmpeg.exe')
ffprobe_path = os.path.join(os.path.dirname(__file__), 'ffmpeg-7.0.1-essentials_build', 'bin', 'ffprobe.exe')




to


ffmpeg_command = [
 'ffmpeg', '-ss', str(start_time), '-t', str(duration), '-i', video_path, '-vf', f'fps={fps}',
 os.path.join(part_output_folder, f'{video_name}_frame_%07d.png')
]

ffprobe_command = [
 'ffprobe', '-v', 'error', '-select_streams', 'v:0', '-show_entries', 'format=duration', '-of',
 'default=noprint_wrappers=1:nokey=1', video_path
]




I found this online so im not sure if it is the correct thing to do.


Thanks for any help.


-
Revision f231a3edee : Merge "Code cleanup inside the decoder code."
18 juin 2013, par Dmitry KovalevChanged Paths :
Modify /vp9/decoder/vp9_decodframe.c
Merge "Code cleanup inside the decoder code." -
There is a code that I want to make and improve with this code [closed]
30 novembre 2023, par kenan bahadircrop_command = f'ffmpeg -i "input_file" -filter_complex "crop=1080:1080:420:0,scale=1920:1920:flags=lanczos" -acodec aac -strict experimental "temp_output_file"'
os.system(crop_command)


My question is as follows : I want to upload a short video to YouTube. I have the code below, but it does not work as I want.
crop_command = f'ffmpeg -i "input_file" -filter_complex "crop=1080:1080:420:0,scale=1920:1920:flags=lanczos" -acodec aac -strict experimental "temp_output_file"'
os.system(crop_command)