Подсчитайте звуковые дорожки в файле mov ie с помощью python - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь получить количество звуковых дорожек в видеофайле. В видео есть несколько дорожек (например, разные, выбираемые языки для одного и того же mov ie.) Поэтому, если есть три дополнительных языка для видео, я хотел бы получить цифру 3 в конце, независимо от того, является ли звук в стерео, моно или в 5.1.

До сих пор я пытался сделать это с помощью moviepy. Я нашел только функцию «reader.nchannels», но она учитывает только левый и правый канал первой звуковой дорожки, поэтому я каждый раз получаю цифру 2.

Код сейчас очень простой, похоже это:

from moviepy.editor import *
from moviepy.audio import *

clip = VideoFileClip(source)
audio_tracks = clip.audio.reader.nchannels

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

audio = AudioFileClip(source)
tracks= audio_tracks.reader.infos

Результат для этого выглядит следующим образом:

"'audio_found': True, 'audio_fps': 48000}"

1 Ответ

0 голосов
/ 23 июня 2020

tburrows13, спасибо за указание в правильном направлении.

Мне удалось получить номера аудиоканалов и сохранить их в переменной через скрипт py. Возможно, это не самое элегантное решение, но оно работает, так что вот оно, если кому-то нужно. Вы должны импортировать «подпроцесс» и использовать с ним ffprobe. ffprobe поставляется с ffmpeg.

Чтобы получить количество потоков, команда выглядит так:

ffprobe <filename here> -show_entries format=nb_streams

Это даст вам количество потоков в файле, а не только aud ios, но и видеопотоки тоже. Есть возможность получить данные только для аудиопотоков, но для моего проекта это не было необходимо.

Вы можете вызвать эту команду с помощью сценария python. Команда должна быть строкой, вы также можете сохранить ее в переменной. Чтобы получить и сохранить вывод этой команды в другой переменной, вы можете использовать это:

variable = subprocess.check_output(subprocesscommand) # subprocesscommand is the string version of the command wrote above. 

Если вы сейчас распечатаете эту переменную, результат будет примерно таким: b '[FORMAT] \ r \ nnb_streams = 3 \ r \ n [/ FORMAT] \ r \ n '

Теперь вам просто нужно нарезать строковое значение, чтобы получить количество потоков.

Еще раз спасибо за вашу помощь !

...