[英]FFmpeg in Python File already exists error
我正在使用python(3.6)和Django(2.0)開發一個項目,如果其中有其他格式,我會將視頻轉換為mp4。
這是我的代碼:
來自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')
但是,當我將其傳遞給Mp4格式的視頻時,會在IDE控制台中返回如下錯誤:
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(主要)(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:核心媒體視頻
文件“ PHP_GCS.mp4”已存在。 覆蓋? [Y / N]
並在這里停止執行,直到按Enter鍵。我真的很困惑為什么會如此,因為當視頻已經是mp4時,我不使用ffmpeg
而是僅用於縮略圖生成。
這里有什么問題?
提前致謝!
我認為您錯過了代碼中的某些內容。
視頻轉換器中的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
但是您沒有檢查if語句中的正確部分。
if ext[-1] == 'mp4'
應該編寫if ext[-1] == 'mp4'
因為現在您正在將列表與字符串進行比較,該字符串將始終返回false!
這可能會解決您的問題,如果不能解決,請告訴我,我將相應地更新答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.