简体   繁体   English

Python文件中的FFmpeg已存在错误

[英]FFmpeg in Python File already exists error

I'm working on a project using python(3.6) and Django(2.0) in which i'm converting a video to mp4 if it's in any other formate. 我正在使用python(3.6)和Django(2.0)开发一个项目,如果其中有其他格式,我会将视频转换为mp4。

Here's my code: 这是我的代码:

from views.py: 来自views.py:

def generate_thumbnail(filename, thumb_name):
    print('func called')
    print(filename)
    video_input_path = os.path.join(filename)
    img_output_path = os.path.join(thumb_name)
    subprocess.call(['ffmpeg', '-i', video_input_path, '-ss', '00:00:00.000', 'vframes', '1', img_output_path])


def convert_to_mp4(video_name, only_name):
    os.popen(
        "ffmpeg -i '{input}' -ac 2 -b:v 2000k -c:a aac -c:v libx264 -b:a 160k -vprofile high -bf 0 -strict experimental -f mp4 '{output}.mp4'".format(
            input=video_name, output=only_name))
    return True


def perform_upload(video, thumbnail):
    print('vdieo name is: {}'.format(video))
    servise = discovery.build('storage', 'v1', credentials=credentials)
    bucket_name = 'test_bucket004'
    print('Uploading the video...')
    media = MediaFileUpload(video, chunksize=4149304, mimetype='video/mp4',
                            resumable=True)
    req = servise.objects().insert(
        bucket=bucket_name,
        name=str(video),
        media_body=media,
        body={"cacheControl": "public,max-age=31536000"},
        predefinedAcl='publicRead'
    )
    resp = None
    while resp is None:
        status, resp = req.next_chunk()
    print(resp)
    video_url = 'http://storage.googleapis.com/' + bucket_name + '/' + str(video)

    print('Uploading your thumbnail...')
    media = MediaFileUpload(thumbnail, chunksize=4149304, mimetype='image/jpeg',
                            resumable=True)
    req = servise.objects().insert(
        bucket=bucket_name,
        name=str(thumbnail),
        media_body=media,
        body={"cacheControl": "public,max-age=31536000"},
        predefinedAcl='publicRead'
    )
    resp = None
    while resp is None:
        status, resp = req.next_chunk()
    print(resp)
    thumb_url = 'https://storage.googleapis.com/' + bucket_name + '/' + str(thumbnail)

    return video_url, thumb_url


class VideoConverter(generics.ListCreateAPIView):
    def get(self, request, *args, **kwargs):
        return HttpResponse('Get request', status=200)

    def post(self, request, *args, **kwargs):
        serializer = VideoConverterSerializer(data=self.request.data)
        validation = serializer.is_valid()
        print(serializer.errors)
        if validation is True:
            url = request.POST.get('video_url')
            filename = url.split('/')
            filename = filename[-1]
            print(filename)
            ext = filename.split('.')
            print(ext[-1])
            only_name = ext[0]
            urllib.request.urlretrieve(url, filename)
            generate_thumbnail(filename, only_name + '_thumbnail.jpg')
            if ext == 'mp4':
                videourl, thumb_url = perform_upload(filename, only_name + '_thumbnail.jpg')
            else:
                conversion = convert_to_mp4(filename, only_name)
                if conversion is True:
                    videourl, thumb_url = perform_upload(only_name + '.mp4', only_name + '_thumbnail.jpg')

            return HttpResponse('Video url is: {}\n \nThumbnail url is: {}'.format(videourl, thumb_url))
        else:
            return HttpResponse('Not a valid request')

But when I pass it a video of Mp4 format it returns an error in the IDE console like this: 但是,当我将其传递给Mp4格式的视频时,会在IDE控制台中返回如下错误:

ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers built with Apple LLVM version 10.0.0 (clang-1000.10.43.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma libavutil 56. 14.100 / 56. 14.100 libavcodec 58. 18.100 / 58. 18.100 libavformat 58. 12.100 / 58. 12.100 libavdevice 58. 3.100 / 58. 3.100 libavfilter 7. 16.100 / 7. 16.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 1.100 / 5. 1.100 libswresample 3. 1.100 / 3. 1.100 libpostproc 55. 1.100 / 55. 1.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'PHP_GCS.mp4': Metadata: major_brand : mp42 minor_version : 1 compatible_brands: mp41mp42isom creation_time : 2018-08-03T13:08:04.000000Z Duration: 00:01:21.40, start: 0.000000, bitrate: 1584 kb/s Stream #0:0(und): V ffmpeg版本4.0.2版权所有(c)2000-2018年,使用Apple LLVM版本10.0.0(clang-1000.10.43.1)配置构建的FFmpeg开发人员:--prefix = / usr / local / Cellar / ffmpeg / 4.0.2- enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc = clang --host-cflags = --host-ldflags = --enable-gpl --enable -libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma libavutil 56.14.100 / 56.14.100 libavcodec 58.18.100 / 58.18.100 libavformat 58.12.100 / 58。 12.100 libavdevice 58. 3.100 / 58. 3.100 libavfilter 7. 16.100 / 7. 16.100 libavresample 4. 0. 0 / 4. 4. 0. 0 libswscale 5. 1.100 / 5. 1.100 libswresample 3. 1.100 / 3. 1.100 libpostproc 55. 1.100 / 55. 1.100输入0,mov,mp4,m4a,3gp,3g2,mj2,来自'PHP_GCS.mp4':元数据:major_brand:mp42 minor_version:1compatible_brands:mp41mp42isom creation_time:2018-08-03T13:08:04.000000Z持续时间:00:01:21.40,开始:0.000000,比特率:1584 kb / s流#0:0(und):V ideo: h264 (Main) (avc1 / 0x31637661), yuv420p, 1918x1078 [SAR 1:1 DAR 137:77], 1581 kb/s, 30 fps, 30 tbr, 600 tbn, 1200 tbc (default) Metadata: creation_time : 2018-08-03T13:08:04.000000Z handler_name : Core Media Video ideo:h264(主要)(avc1 / 0x31637661),yuv420p,1918x1078 [SAR 1:1 DAR 137:77],1581 kb / s,30 fps,30 tbr,600 tbn,1200 tbc(默认)元数据:creation_time:2018 -08-03T13:08:04.000000Z handler_name:核心媒体视频

File 'PHP_GCS.mp4' already exists. 文件“ PHP_GCS.mp4”已存在。 Overwrite ? 覆盖? [y/N] [Y / N]

and stop the execution here until I press the enter button.I'm really confused why this is happining because when the video is already mp4 i'm not using ffmpeg but only for thumbnail generaton. 并在这里停止执行,直到按Enter键。我真的很困惑为什么会如此,因为当视频已经是mp4时,我不使用ffmpeg而是仅用于缩略图生成。

What can be wrong here? 这里有什么问题?

Thanks in advance! 提前致谢!

I think you missed something in your code. 我认为您错过了代码中的某些内容。

You Post handler in video converter has this code: 视频转换器中的Post Post处理程序具有以下代码:

        ext = filename.split('.')
        print(ext[-1])
        only_name = ext[0]
        urllib.request.urlretrieve(url, filename)
        generate_thumbnail(filename, only_name + '_thumbnail.jpg')
        if ext == 'mp4': # mistake here

but you're not checking the correct part on your if statement. 但是您没有检查if语句中的正确部分。

You should write if ext[-1] == 'mp4' because right now you're comparing a list with a string which will always return false! if ext[-1] == 'mp4'应该编写if ext[-1] == 'mp4'因为现在您正在将列表与字符串进行比较,该字符串将始终返回false!

This might solve your problem and if not please let me know and I will update my answer accordingly. 这可能会解决您的问题,如果不能解决,请告诉我,我将相应地更新答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误,文件已存在。 蟒蛇 - Error, file already exists. Python 如果文件已经存在,Python Open() 会给出“无效参数”错误 - Python Open() gives "invalid argument" error if file already exists 如果文件已存在于 python 中,则循环增加一个数字 - A loop to increment a number if the file already exists in python 如果文件已经存在,Python会跳过一个函数 - Python skip a function if the file already exists 如何检查文件是否已经存在(如果不存在),请在Python上下载? - How to check if file already exists, if not, download on Python? 如果文件已经存在,如何迭代地重命名文件(Python) - How to iteratively rename a file if it already exists (Python) Python AWS CDK 资源已存在错误 - Python AWS CDK resource already exists error 使用Python观察到该文件已存在时无法创建文件 - Cannot create a file when that file already exists error observed using Python Python 创建目录错误 当文件已存在时无法创建文件 - Python create directory error Cannot create a file when that file already exists 创建目录然后在Python中打开其中的文件时出错,但如果目录已存在则没有错误 - Error when creating directory and then opening a file within it in Python, but no error if directory already exists
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM