Вывод FFMPEG в точную папку с помощью Python

#python #ffmpeg #compression #video-compression

Вопрос:

я работаю над простым сценарием с использованием ffmpeg, чтобы уменьшить размер видео и добавить водяной знак к видео, а затем переместить окончательный вывод в сжатую папку… это мой сценарий.

сжатие работает, водяной знак работает, но проблема, с которой я сталкиваюсь, заключается в том, что конечный результат помещается в корневую папку, а не в сжатую папку… ниже я описываю структуру папок и свои сценарии

Структура Папок

    rootfolder
    |
    |--media
       |--vids
          |--(video files, mov, mp4s)..
       |--compressed
    |--encode.py
 

Сценарий (encode.py) файл

 import os    
import subprocess
from pathlib import Path


dir_path = os.path.dirname(os.path.realpath(__file__))    
vidfile = dir_path   '/media/vids/mv1.mov'    
watermark = dir_path   '/media/watermark.png'
compressed = str(Path.cwd() / '/media/compressed/')

# 1. compress the video and store it in the media out folder

media_out = str(dir_path   "/compressed_mv1s.mov").replace(" ", "\ ") 
subprocess.run("ffmpeg -i "   vidfile.replace(" ", "\ ")  
               " -vcodec libx264 -crf 22 "   media_out, shell=True)  

#2.add watermark to the video and move it to the compressed folder 

media_watermarked = str(compressed   '/w_mv1.mov').replace(" ", "\ ")
subprocess.run("ffmpeg -i "   media_out   " -i "   watermark  
               " -filter_complex "overlay=main_w-(overlay_w 10) : main_h-(10 overlay_h)" "   media_watermarked, shell=True)
 

таким образом, сжатие видео работает, добавление водяного знака работает, но последняя строка, ошибка от media_watermarked переменной, я не уверен, что я делаю неправильно, но это неправильно решает папку, перемещая окончательный вывод в папку.. это ошибка, которую я получаю

введите описание изображения здесь

Кроме того, как я могу одновременно запустить две команды ffmpeg, чтобы сжать видео и добавить водяной знак одновременно, не делая этого отдельно. Спасибо.

Комментарии:

1. compressed = str(Path.cwd() / '/media/compressed/') сжатый имеет » / «в конце, и media_watermarked = str(compressed '/w_mv1.mov') здесь вы снова добавляете» / » после сжатой строки. Это, может быть, проблема здесь?

2. Почему это делается в 2 командах ffmpeg вместо 1? Вы можете одновременно сжимать и наносить водяные знаки. Это будет быстрее, и вы избежите дополнительной потери генерации .

3. @llogan, вот почему я спросил… если у вас есть решение о том, как я мог бы объединить обе команды в одну.

4. @AndeCaleb Просто добавьте -vcodec libx264 -crf 22 в свою команду водяных знаков.