I have a problem after upgrading ffmpeg from 4.2.2 to 5.2.2, my code no longer works. When I upload a video to my React-Native application I get a file corruption error on my FFmpeg python agent. -> sends to Laravel which stores the video on the minio storage; the video is available -> sends http to the minio key to download locally the mp4 video is corrupted on the minio too... I have the impression that it's an error downloading the video locally that makes the video corrupt, but I have no idea how I can debug this problem. If I upload the video directly from my web interface I don't have this problem. The only difference is processClipSynchronously which is set to True on mobile and False on web. Laravel Agent send to python microservice : // Store uploaded video file $videoFilePath = $this->storeVideoFile($learningGoal, $videoFile); // Add video to storyboard $agentResponse = Http:ost($this->agentUrl . 'learning-goals/' . $learningGoal->id . '/storyboards/' . $storyboardId . '/chapters/' . $chapterId . '/videos', [ 'clip' => $videoFilePath, 'processClipSynchronously' => $processClipSynchronously ]); Python agent video : @app.route('/learning-goals/<learning_goal_id>/storyboards/<storyboard_id>/chapters/<chapter_id>/videos', methods=['post']) def post_storyboard_videos(learning_goal_id, storyboard_id, chapter_id): storyboard = get_storyboard(learning_goal_id, storyboard_id) chapter, position = get_chapter(storyboard, chapter_id) if 'clip' in request.get_json(): chapter['clip'] = request.get_json()['clip'] if 'duration' in storyboard: del chapter['duration'] if 'thumbnail' in storyboard: del chapter['thumbnail'] if 'ncAudioPreviewPath' in chapter: del chapter['ncAudioPreviewPath'] if 'trim_start' in chapter: del chapter['trim_start'] if 'trim_end' in chapter: del chapter['trim_end'] if 'perform_nc' in chapter: del chapter['perform_nc'] else: abort(400) new_storyboard = create_new_version_storyboard(storyboard) if 'processClipSynchronously' in request.get_json() and request.get_json()['processClipSynchronously']: treat_clip(new_storyboard, chapter) #Mobile trigger here else: thread = StoppableThread(target=treat_clip, args=(new_storyboard, chapter)) thread.daemon = True thread.start() chapter, position = get_chapter(new_storyboard, chapter_id) return json.loads(dumps(chapter)) def treat_clip(storyboard, chapter): logging.info( 'start treating clip (' + chapter['clip'] + ') for learning goal : ' + str(storyboard['learningGoalId'])) file = app.config['VOLUME_PATH'] + chapter['clip'] os.makedirs(dirname(file), exist_ok=True) temp_files_to_remove = [] if not os.path.exists(file): # Download file from S3 storage. s3.download_file(chapter['clip'], file) # Clean the file at the end (it's already in S3). temp_files_to_remove.append(file) else: logging.warn(f'Not downloading {chapter["clip"]} from S3 as it already exists on the filesystem') resolution_width, resolution_height = get_resolution(file) is_rotated_video = is_rotated(file) sample_aspect_ratio = get_sample_aspect_ratio(file) frame_rate = get_frame_rate(file) if not file.endswith( '.mp4') or resolution_width != 1920 or resolution_height != 1080 or is_rotated_video or sample_aspect_ratio != '1:1' or frame_rate > 60: chapter['clip'] = format_video(chapter['clip'], resolution_width, resolution_height, frame_rate, is_rotated_video, str(storyboard['learningGoalId']), 1920, 1080) file = app.config['VOLUME_PATH'] + chapter['clip'] # Update file to S3 storage s3.upload_file(file, chapter['clip']) # Clean the new file at the end. temp_files_to_remove.append(file) clip = VideoFileClip(file) chapter['duration'] = float(clip.duration) thumbnail_relative_path = create_video_thumbnail(storyboard, clip, 0) .... It's VideoFileClip from moviepy who generate error : Moov atom not found I think S3 not have time to download file, and corrumpt, but I don't know how to test or fix that thanks in advance Continue reading...