
Recherche avancée
Médias (91)
-
Richard Stallman et le logiciel libre
19 octobre 2011, par
Mis à jour : Mai 2013
Langue : français
Type : Texte
-
Stereo master soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
Elephants Dream - Cover of the soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Image
-
#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
Autres articles (64)
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...) -
Support de tous types de médias
10 avril 2011Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)
-
List of compatible distributions
26 avril 2011, parThe table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)
Sur d’autres sites (10525)
-
Setting up multiple resolution value in Fast API for transcoding uploaded video files
23 janvier 2024, par Sanji VinsmokeI created an API for transcoding video files like adaptive bit rate of youtube. I used Fast API. Currently, I am trying to set resolution values for each file. But whenever I am adding multiple resolutions, I am recieving "422 unprocessible entity" error in the Swagger.


Here is my code :


async def transcode_video(input_path, output_folder, res, unique_id, total_files, pbar):
 # Use asyncio for command execution with progress bar
 output_path = os.path.join(output_folder, f"{res}p.m3u8")

 # Calculate the target size
 target_size = calculate_target_size(input_path)

 cmd_duration = f"ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {input_path}"
 total_duration = float(subprocess.check_output(cmd_duration, shell=True, text=True).strip())

 cmd = (
 f"ffmpeg -i {input_path} -vf scale=-2:{res} -c:a aac -b:a 128k "
 f"-g 50 -hls_time 1 -hls_list_size 0 "
 f"-crf 23 -b:v 100k -fs {target_size} "
 f"-hls_segment_filename \"{output_path.replace('.m3u8', '_%03d.ts')}\" "
 f"{output_path}"
 )

 process = await asyncio.create_subprocess_shell(
 cmd,
 stdout=asyncio.subprocess.PIPE,
 stderr=asyncio.subprocess.PIPE
 )

 while True:
 line = await process.stderr.readline()
 if not line:
 break
 line = line.decode().strip()
 if "time=" in line:
 # Extracting the time progress from FFmpeg output
 time_str = line.split("time=")[1].split()[0]
 current_time = sum(x * float(t) for x, t in zip([3600, 60, 1], time_str.split(":")))
 progress = (current_time / total_duration) * 100
 pbar.update(progress - pbar.n)

 # Wait for the transcoding process to complete
 await process.wait()

 if process.returncode != 0:
 raise HTTPException(status_code=500, detail="Video transcoding failed.")
 pbar.close()

 # Increment the total number of transcoded files
 total_files[0] += 1

@app.post("/transcode/")
async def transcode_video_endpoint(files: List[UploadFile] = File(...), resolutions: List[int] = None):
 # Counters for transcoded videos
 total_files = [0]

 # Iterate over each file
 for file in files:
 # Check if the file is a valid video file based on its extension
 valid_video_extensions = {".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv"}
 if not any(file.filename.lower().endswith(ext) for ext in valid_video_extensions):
 print(f"Skipping non-video file: {file.filename}")
 continue

 # Assign a unique ID for each file
 unique_id = str(uuid.uuid4())

 # Log the filename and unique ID
 print(f"Processing file: {file.filename} with unique ID: {unique_id}")

 # Create a folder for the unique ID
 unique_id_folder = os.path.join(OUTPUT_FOLDER, unique_id)
 Path(unique_id_folder).mkdir(parents=True, exist_ok=True)

 # Save the uploaded file
 input_path = os.path.join(UPLOAD_FOLDER, file.filename)
 with open(input_path, "wb") as video_file:
 video_file.write(file.file.read())

 # Check if the file is a valid video file using ffprobe
 try:
 subprocess.run(
 ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_type", "-of", "csv=p=0", input_path],
 check=True, capture_output=True
 )
 except subprocess.CalledProcessError:
 print(f"Skipping non-video file: {file.filename}")
 continue

 # Determine the resolutions to transcode based on the provided or default resolution
 resolutions_to_transcode = [res for res in [240, 360, 480, 720] if resolutions is None or res in resolutions]

 # If resolutions is not exactly 360, 480, 720, or 1080, transcode to the nearest lower resolution
 if resolutions is not None:
 resolutions_to_transcode = [get_closest_lower_resolution(res) for res in resolutions]

 # Transcode the video into the specified resolutions
 for res in resolutions_to_transcode:
 output_folder = os.path.join(unique_id_folder, f"{res}p")
 Path(output_folder).mkdir(parents=True, exist_ok=True)

 # Call the transcode_video function with tqdm progress bar
 with tqdm(total=100, desc=f"Transcoding {res}p", position=0, leave=True) as pbar:
 await transcode_video(input_path, output_folder, res, unique_id, total_files, pbar)

 # Create index.m3u8 file after transcoding all resolutions
 create_index_m3u8(unique_id, resolutions_to_transcode)

 return JSONResponse(content={"message": f"{total_files[0]} videos transcoded."})



If I provide one resolution it works fine. But if I provide a list of resolutions for all the uploaded videos I am getting error 422.



Code Details
422 
Error: Unprocessable Entity

Response body
Download
{
 "detail": [
 {
 "loc": [
 "body",
 "resolutions",
 0
 ],
 "msg": "value is not a valid integer",
 "type": "type_error.integer"
 }
 ]
}



I used python 3.8.18. Can you help me please ? I tried with list, object but always getting the error.


-
How to enlarge a video without changing the resolution in python ? [closed]
18 janvier 2024, par Killian RakotonanaharyI'm trying to convert a youtube video into a 9 : 16 video. So I'm scaling the video to 1080x1920, and it's returns me a minimized video with two black borders at the bottom and at the top.


I would like to zoom into the video, so the video will be able to fill all the format, with ffmpeg, or opencv or moviepy.


I tryied to crop the video with ffmpeg but the video is cropped without the black borders, like if the black borders wasnt a part of the file,
I tryed to zoom with ffmpeg but the zoompan continuously zoom during all the video, and the black borders are not affected by the zoom,
I tryed to remove the edges where the pixel value is less than or equal to a given threshold, but the ratio is not kept, and its result to a strechted video.
I would like to do something like https://new.express.adobe.com/tools/resize-video


Enlarge the video without affecting the resolution, so it's just result to a zoom effect.


The actual code is resizing the video to 9 : 16 with two black border at the bottom and on the top.


def divideWithCheckPoints(checkpointRanges):
 videoPath = 'assets/video.mp4'
 output_folder = 'assets/'

 video_clip = VideoFileClip(videoPath)
 
 for i, (start_time, end_time) in enumerate(checkpointRanges):
 output_file = f'{output_folder}video_part_{i+1}.mp4'
 command = [
 'ffmpeg',
 '-i', videoPath,
 '-ss', str(start_time),
 '-to', str(end_time),
 '-vf', "scale=1080:1920", # resize video
 '-c:a', 'aac',
 '-b:v', '1M', 
 output_file
 ]
 subprocess.run(command, check=True)
 
 last_start_time = checkpointRanges[-1][1]
 last_end_time = video_clip.duration 
 last_output_file = f'{output_folder}video_part_{len(checkpointRanges)+1}.mp4'
 command = [
 'ffmpeg',
 '-i', videoPath,
 '-ss', str(last_start_time),
 '-to', str(last_end_time),
 '-vf', "scale=1080:1920", # resize video
 '-c:a', 'aac', 
 last_output_file
 ]
 subprocess.run(command)



Output :




Expected :




-
FFmpeg frame counter + resolution/bitrate/FPS box
4 janvier 2024, par NoyaZ_I was trying to use
drawtext
FFmpeg filter to insert a frame counter at the bottom of my video by using this command :

ffmpeg -i input.mp4 -vf "drawtext=fontfile=C\\:/Windows/fonts/consola.ttf: text='Frame\\: %{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2\*lh): fontcolor=black: fontsize=50: box=1: boxcolor=white: boxborderw=5" -c:a copy output.mp4


So far all works fine. I was wondering how could I insert also a resolution/bitrate box at the top of the video as shown in the image below :




Which parameters/metadata can come in hand ?