qsv、对接

This commit is contained in:
Jerry Yan 2024-12-07 18:00:57 +08:00
parent fb51d144c0
commit 8d6159d302
3 changed files with 21 additions and 12 deletions

View File

@ -1,9 +1,11 @@
import json
import os.path import os.path
import time
from entity.ffmpeg import FfmpegTask from entity.ffmpeg import FfmpegTask
import logging import logging
from util import ffmpeg from util import ffmpeg, oss
logger = logging.getLogger('biz/ffmpeg') logger = logging.getLogger('biz/ffmpeg')
@ -11,8 +13,10 @@ logger = logging.getLogger('biz/ffmpeg')
def parse_ffmpeg_task(task_info, template_info): def parse_ffmpeg_task(task_info, template_info):
tasks = [] tasks = []
# 中间片段 # 中间片段
task_params_str = task_info.get("taskParams", "{}")
task_params = json.loads(task_params_str)
for part in template_info.get("video_parts"): for part in template_info.get("video_parts"):
source = select_video_if_needed(part.get('source'), task_info, template_info) source = parse_video(part.get('source'), task_params, template_info)
if not source: if not source:
logger.warning("no video found for part: " + str(part)) logger.warning("no video found for part: " + str(part))
continue continue
@ -37,17 +41,22 @@ def parse_ffmpeg_task(task_info, template_info):
return task return task
def select_video_if_needed(source, task_info, template_info): def parse_video(source, task_params, template_info):
print(source)
if source.startswith('PLACEHOLDER_'): if source.startswith('PLACEHOLDER_'):
placeholder_id = source.replace('PLACEHOLDER_', '') placeholder_id = source.replace('PLACEHOLDER_', '')
new_sources = task_info.get('user_videos', {}).get(placeholder_id, []) new_sources = task_params.get(placeholder_id, [])
if type(new_sources) is list: if type(new_sources) is list:
if len(new_sources) == 0: if len(new_sources) == 0:
logger.debug("no video found for placeholder: " + placeholder_id) logger.debug("no video found for placeholder: " + placeholder_id)
return None return None
else: else:
# TODO: Random Pick / Policy Pick # TODO: Random Pick / Policy Pick
new_sources = new_sources[0] new_sources = new_sources[0].get("url")
if new_sources.startswith("http"):
_, source_name = os.path.split(new_sources)
oss.download_from_oss(new_sources, source)
return source_name
return new_sources return new_sources
return os.path.join(template_info.get("local_path"), source) return os.path.join(template_info.get("local_path"), source)

View File

@ -9,7 +9,6 @@ def normalize_task(task_info):
def start_task(task_info): def start_task(task_info):
from biz.ffmpeg import parse_ffmpeg_task, start_ffmpeg_task from biz.ffmpeg import parse_ffmpeg_task, start_ffmpeg_task
task_info = normalize_task(task_info) task_info = normalize_task(task_info)
task_template = "test_template" template_info = get_template_def(task_info.get("templateId"))
template_info = get_template_def(task_template)
ffmpeg_task = parse_ffmpeg_task(task_info, template_info) ffmpeg_task = parse_ffmpeg_task(task_info, template_info)
result = start_ffmpeg_task(ffmpeg_task) result = start_ffmpeg_task(ffmpeg_task)

View File

@ -1,3 +1,5 @@
import uuid
class FfmpegTask(object): class FfmpegTask(object):
@ -123,7 +125,7 @@ class FfmpegTask(object):
if self.task_type == 'encode': if self.task_type == 'encode':
input_args = [] input_args = []
filter_args = [] filter_args = []
output_args = [] output_args = ["-shortest", "-c:v h264_qsv"]
video_output_str = "[0:v]" video_output_str = "[0:v]"
audio_output_str = "[0:v]" audio_output_str = "[0:v]"
video_input_count = 0 video_input_count = 0
@ -170,8 +172,8 @@ class FfmpegTask(object):
output_args.append(audio_output_str) output_args.append(audio_output_str)
return args + input_args + ["-filter_complex", ";".join(filter_args)] + output_args + [self.get_output_file()] return args + input_args + ["-filter_complex", ";".join(filter_args)] + output_args + [self.get_output_file()]
elif self.task_type == 'concat': elif self.task_type == 'concat':
input_args = ["-hwaccel qsv"] input_args = []
output_args = [] output_args = ["-shortest", "-c:v", "h264_qsv", "-r", "25"]
filter_args = [] filter_args = []
video_output_str = "[0:v]" video_output_str = "[0:v]"
audio_output_str = "[0:v]" audio_output_str = "[0:v]"
@ -215,7 +217,6 @@ class FfmpegTask(object):
def set_output_file(self, file=None): def set_output_file(self, file=None):
if file is None: if file is None:
if self.output_file == '': if self.output_file == '':
# TODO: Random Filename self.output_file = "rand_" + str(uuid.uuid4()) + ".mp4"
self.output_file = "rand.mp4"
else: else:
self.output_file = file self.output_file = file