[Python] After upgrade ffmpeg code doesn't working clip build

Discussão em 'Python' iniciado por Stack, Fevereiro 11, 2025.

  1. Stack

    Stack Membro Participativo

    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::post($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...

Compartilhe esta Página