收到错误消息未知编码器'libx264',任何帮助表示赞赏



作为课程的一部分,我正试图使用ffmpeg python将视频文件压缩到python中的目标大小,用于a级项目,但我一直收到这个错误,说它不知道编码器。不确定我该做什么,因为这对我来说简直是一个全新的空间。我是应该安装编解码器还是什么的,或者有其他选择吗?

import os, ffmpeg
##import section:this part is where I import all of the modules I will use
import  tkinter
import shutil
from tkinter import filedialog
import os

def fileSelect():                                                                           #start of fileSelect function
global startingLocation                                                                 #declares startingLocation as global variable
global originalName                                                                     #declares originalName as global variable
global fileType                                                                         #declares fileType as global variable
startingLocation = filedialog.askopenfilename(initialdir="/", title="Select file",      #tkinter function that opens file explorer, lets user select file saves the file path as a variable
filetypes=(("video files", "*.mp4"),("images", "*.jpg*")))
originalName = os.path.basename(startingLocation)                                       #os function that gets the actaul file name from the path string
print (originalName)                                                                    #print statement to check if originalName has been found
fileType = startingLocation.split('.')                                                  #splits original name where any full stop in found and saves array as variable
fileType = fileType[-1]                                                                 #changes variable to have the str value of the final item in the array; the file type
fileType = '.' + fileType                                                               #adds fullstop to the start of the file type so i dont have to repeatedly do it
print (fileType)                                                                        #print statement to check file type is found correctly
def outputSelect():                                                                         #start of outputSelect function
global outputLocation                                                                  #declares outputLocation as global variable
outputLocation = filedialog.askdirectory(initialdir="/", title="Select folder")        #tkinter function that opens file explorer, lets the user select of folder as saves the folder path as a variable
def fileNewName():                                                                          #start of fileNewName function
global customName                                                                       #declares customName as global variable
customName = input("Enter the end name of your file")                                   #simple code assigning user input to the custom name vairable
customName = customName + fileType                                                      #add the fileType onto the end of the custom name
def compress():                                                                             #start of compress function
fileSelect()                                                                            #calls the fileSelect function
outputSelect()                                                                          #calls the outputSelect function
fileNewName()
global src
global dst                                                                           #calls the fileNewName function
src = startingLocation                                                                  #assigns startingLocation str as src, so the shutil module is able to use it in a cleaner way
dst = outputLocation                                                                    #assigns outputLocation dst as src, so the shutil module is able to use it in a cleaner way
shutil.copy(src, dst)                                                                   #shutil command that copies the file from src to dst
src = outputLocation + '/' + originalName                                               #reassigns src as the location of the file copy
dst = outputLocation + '/' + customName                                                 #reassigns dst as the location of the file copy but with a new name
shutil.move(src,dst)

def compress_video(video_full_path, output_file_name, target_size):
# Reference: https://en.wikipedia.org/wiki/Bit_rate#Encoding_bit_rate
min_audio_bitrate = 32000
max_audio_bitrate = 256000
probe = ffmpeg.probe(video_full_path)
# Video duration, in s.
duration = float(probe['format']['duration'])
# Audio bitrate, in bps.
audio_bitrate = float(next((s for s in probe['streams'] if s['codec_type'] == 'audio'), None)['bit_rate'])
# Target total bitrate, in bps.
target_total_bitrate = (target_size * 1024 * 8) / (1.073741824 * duration)
# Target audio bitrate, in bps
if 10 * audio_bitrate > target_total_bitrate:
audio_bitrate = target_total_bitrate / 10
if audio_bitrate < min_audio_bitrate < target_total_bitrate:
audio_bitrate = min_audio_bitrate
elif audio_bitrate > max_audio_bitrate:
audio_bitrate = max_audio_bitrate
# Target video bitrate, in bps.
video_bitrate = target_total_bitrate - audio_bitrate
i = ffmpeg.input(video_full_path)
ffmpeg.output(i, os.devnull,
**{'c:v': 'libx264', 'b:v': video_bitrate, 'pass': 1, 'f': 'mp4'}
).overwrite_output().run()
ffmpeg.output(i, output_file_name,
**{'c:v': 'libx264', 'b:v': video_bitrate, 'pass': 2, 'c:a': 'aac', 'b:a': audio_bitrate}
).overwrite_output().run()
compress()
compress_video(dst, outputLocation, 3 * 1000)

很可能,根据您收到的错误,您应该安装适当的编解码器。按照在线指示搜索";安装libx264";。您将根据所使用的操作系统找到特定信息。如果您面临更多问题,请提供您的操作系统版本、到目前为止安装的软件列表以及到目前为止可能尝试过的软件。

相关内容

最新更新