Извлечение аудиоканала из видеофайла для подачи в функцию decode_wav в TensorFlow - PullRequest
0 голосов
/ 10 октября 2019

Я хочу передать аудиоканал видеофайла следующей функции TenorFlow:

tf.audio.decode_wav(
contents,
desired_channels=-1,
desired_samples=-1,
name=None)

Где Args:

  • содержимое: Тензор типа string,Аудио в кодировке WAV, обычно из файла.

  • требуемый_каналы: необязательный int. По умолчанию -1. Требуется количество образцов каналов.

  • required_samples: необязательный int. По умолчанию -1. Длина аудио запрашивается.

  • name: имя для операции (необязательно).

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вы можете извлечь аудио видео, например ::100100

import subprocess

command = "ffmpeg -i C:/test.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav"

subprocess.call(command, shell=True)
1003 * и передать файл *.wav в качестве тензора tf.audio.decode_wav:
raw_audio = tf.io.read_file(filename)
waveform = tf.audio.decode_wav(raw_audio)

Ссылки:

0 голосов
/ 13 октября 2019

Для Windows 10 я решил свою проблему следующим образом:

  1. Я скачал и установил ffmpeg для Windows отсюда
  2. Извлеченное аудио wavфайлы из видео в виде:

    import os,shlex, subprocess
    files = os.listdir('.')
    #convert all video files of the current directory to wav audio files
    for f in files:
        if(f.endswith('.wmv') or f.endswith('.mp4') or f.endswith('.avi')):
            command_line = "ffmpeg -i "+f+" -ab 160k -ac 2 -ar 44100 -vn "+f[0:-4]+".wav"
            #command_line = "ffmpeg -i default.wmv -ab 160k -ac 2 -ar 44100 -vn default.wav"
            args = shlex.split(command_line)
            print(args)
            p = subprocess.Popen(args) # Success!
            print(p)
    
  3. Декодированные аудиофайлы в формате:

        import tensorflow as tf
    files = os.listdir('.')
    #convert all video files of the current directory to wav audio files
    for filename in files:
        if(filename.endswith('.wav')):
            print(filename)
            audio_binary = tf.io.read_file(filename,name=None)
            waveform,_ = tf.audio.decode_wav(
                audio_binary,
                desired_channels=-1,
                desired_samples=-1,
                name=None
            )
    
...