Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2024, 20:52   #1
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию Отдать результат во вторую программу

Код:
subprocess.call('ffmpeg -i file -vcodec copy -an /1.webm', shell=True)
Выполняем, сохраняем в файл. Далее

Код:
MediaInfo.parse('/1.webm')
Далее

Код:
os.remove('/1.webm')
Вопрос в том, предусмотрена ли возможность, не сохраняя в файл, отдать результат от ffmpeg в MediaInfo?

Если да, то как?
Zuldek вне форума Ответить с цитированием
Старый 01.09.2024, 14:01   #2
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 236
По умолчанию

Цитата:
Сообщение от Zuldek Посмотреть сообщение
subprocess.call('ffmpeg -i file -vcodec copy -an /1.webm', shell=True)
Выполняем, сохраняем в файл. Далее

Код:
MediaInfo.parse('/1.webm')
Далее

Код:
os.remove('/1.webm')
Вопрос в том, предусмотрена ли возможность, не сохраняя в файл, отдать результат от ffmpeg в MediaInfo?

Если да, то как?
Да, существует возможность не сохранять результат в файл и передать его напрямую из ffmpeg в MediaInfo. Для этого можно использовать конвейер (pipe) в Unix-подобных системах или аналог в Windows.

В Python вы можете использовать модуль subprocess для создания конвейера. Вот пример, как это можно сделать:

Код:
import subprocess

# Создаем конвейер
ffmpeg_process = subprocess.Popen(['ffmpeg', '-i', 'file', '-vcodec', 'copy', '-an', '-f', 'webm', '-'],
                                  stdout=subprocess.PIPE)

# Передаем результат в MediaInfo
mediainfo_process = subprocess.Popen(['mediainfo', '-'], stdin=ffmpeg_process.stdout, stdout=subprocess.PIPE)

# Читаем результат из MediaInfo
output, _ = mediainfo_process.communicate()

# Выводим результат
print(output.decode('utf-8'))
В этом примере мы создаем два процесса: ffmpeg и MediaInfo. Мы передаем результат из ffmpeg в MediaInfo через конвейер, используя аргумент stdout=subprocess.PIPE при создании процесса ffmpeg. Затем мы передаем этот конвейер в качестве входных данных для процесса MediaInfo, используя аргумент stdin=ffmpeg_process.stdout.

Таким образом, результат из ffmpeg передается напрямую в MediaInfo, без сохранения в файл.

Обратите внимание, что в этом примере мы используем аргумент -f webm в ffmpeg, чтобы указать формат выходных данных. Это необходимо, чтобы MediaInfo мог правильно распознать формат данных.

Также обратите внимание, что в этом примере мы используем subprocess.Popen вместо subprocess.call, поскольку нам нужно создать конвейер и передать данные между процессами.
MakarovDs вне форума Ответить с цитированием
Старый 01.09.2024, 20:06   #3
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Получается, но формат в ffmpeg может быть разный. Возможно не привязывая к формату?
Код:
'-f', 'webm', '-'
Пока у меня ошибка, пробую...

Никак не выходит, все равно необходимо указать выходной файл который будет создан...
Пока подвисает на процессе, но так думаю что это заработает, когда решиться вопрос с выходным файлом. Который не будет создавать...

Слышал что на разных операционных системах, по разному указывается тогда когда не нужно создавать файл...

У меня Ubunto, как на ней верно прописать?
Zuldek вне форума Ответить с цитированием
Старый 01.09.2024, 20:10   #4
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Если выполнить команду ffmpeg, такой какой она есть. Отдает
Код:
[mp4 @ 0x555fc77831c0] muxer does not support non seekable output
[out#0/mp4 @ 0x555fc77ef780] Could not write header (incorrect codec parameters ?): Invalid argument
Zuldek вне форума Ответить с цитированием
Старый 02.09.2024, 01:28   #5
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Код:
['ffmpeg', '-i', 'file.mp4', '-vcodec', 'copy', '-an', '-f', 'mp4', '-']
Вечность просидел, так и не разобрался в чем тут дело
Zuldek вне форума Ответить с цитированием
Старый 02.09.2024, 01:39   #6
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Код:
ffmpeg = sub.Popen(['ffmpeg', '-i', file, '-vcodec', 'copy', '-an', '-f', 'null', '/dev/null'],  stdout=sub.PIPE)
info = sub.Popen(['mediainfo', '-'], stdin=ffmpeg.stdout, stdout=sub.PIPE)
output, error = info.communicate()
pprint.pp(output)
Надеюсь что получилось, но по прежнему ничего не могу вытащить

Код:
[out#0/null @ 0x5620ec149780] video:78606KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
size=N/A time=00:08:18.83 bitrate=N/A speed=2.61e+03x
Ранее вытаскивал так:
Код:
sub.call(f'ffmpeg -i {file} -vcodec copy -an ' + FIX, shell=True)
fps = MediaInfo.parse(FIX).video_tracks[0].frame_rate
Zuldek вне форума Ответить с цитированием
Старый 02.09.2024, 01:41   #7
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Будто бы консоль подвисает если не нажать энтер...
Zuldek вне форума Ответить с цитированием
Старый 02.09.2024, 12:25   #8
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Zuldek Посмотреть сообщение
Если выполнить команду ffmpeg, такой какой она есть. Отдает
Код:
[mp4 @ 0x555fc77831c0] muxer does not support non seekable output
В контейнере MP4 служебная информация о потоках и кодеках хранится в конце. Про WebM не скажу. Я бы попробовал MKV для начала. Что с ним выдаст?
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Старый 02.09.2024, 14:17   #9
Zuldek
Пользователь
 
Регистрация: 01.01.2024
Сообщений: 22
По умолчанию

Код:
['ffmpeg', '-i', file, '-vcodec', 'copy', '-movflags', '+faststart', '-an', '-f', 'null', '/dev/null']
Добавил параметр '-movflags', '+faststart', но и с ним тоже самое
Zuldek вне форума Ответить с цитированием
Старый 03.09.2024, 14:42   #10
MakarovDs
Форумчанин
 
Аватар для MakarovDs
 
Регистрация: 10.01.2020
Сообщений: 236
По умолчанию

Цитата:
Сообщение от Zuldek Посмотреть сообщение
['ffmpeg', '-i', file, '-vcodec', 'copy', '-movflags', '+faststart', '-an', '-f', 'null', '/dev/null']
Добавил параметр '-movflags', '+faststart', но и с ним тоже самое
О господи! Да чё ты мучаешься то... Спроси ChatGPT, или другие генеративные нейросети они тебе все сгенерируют, и помогут...
MakarovDs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отдать большой файл в web-API постепенно finetyro ASP.NET 0 21.06.2022 21:53
[C#] Напишите программу, которая проверяет вторую с права цифру в восьмеричном представлении числа, введенного пользователем. ВаLерий C# (си шарп) 13 17.09.2018 12:14
отдать файл на скачивание marwell. PHP 5 04.05.2014 23:20
Как использовать вторую программу? @нтошка Общие вопросы Delphi 10 23.05.2012 13:56
отдать пользователю php файл aferistz PHP 9 19.07.2011 00:40