{"cells":[{"metadata":{},"cell_type":"markdown","source":"# ffmpeg-python example to extract audio from mp4 video\n\nDocumentation of ffmpeg-python --> [ffmpeg-python in Github](https://github.com/kkroening/ffmpeg-python)\n\nI hope the code was self descriptive.\n"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"!tar xvf ../input/ffmpeg-static-build/ffmpeg-git-amd64-static.tar.xz\n!mkdir -p /tmp/pip/cache/\n!cp ../input/ffmpegpython/ffmpeg_python-0.2.0-py3-none-any.whl /tmp/pip/cache/\n!pip install --no-index --find-links /tmp/pip/cache/ ffmpeg_python","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\n\npath = '/kaggle/input/deepfake-detection-challenge/train_sample_videos/'\ndf = pd.read_json(path + '/metadata.json')\ndf = df.T\ndf['filename'] = df.index\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport librosa\nimport librosa.display\nfrom matplotlib import pyplot as plt\nfrom matplotlib.pyplot import figure\n\n\ndef melspectrogram(audio, sr=44100, n_mels=128):\n    return librosa.amplitude_to_db(librosa.feature.melspectrogram(audio, sr=sr, n_mels=n_mels))\n\ndef show_melspectrogram(mel, sr=44100):\n    plt.figure(figsize=(14,4))\n    librosa.display.specshow(mel, sr=sr, x_axis='time', y_axis='mel')\n    plt.title('Log mel spectrogram')\n    plt.colorbar(format='%+02.0f dB')\n    plt.tight_layout()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport ffmpeg\nfrom ffmpeg import Error\n\nclass ffmpegProcessor:\n    def __init__(self):\n        self.cmd = 'ffmpeg-git-20191209-amd64-static/ffmpeg'\n        \n    def extract_audio(self, filename):\n        try:\n            out, err = (\n                ffmpeg\n                .input(filename)\n                .output('-', format='f32le', acodec='pcm_f32le', ac=1, ar='44100')\n                .run(cmd=self.cmd, capture_stdout=True, capture_stderr=True)\n            )\n        except Error as err:\n            print(err.stderr)\n            raise\n        \n        return np.frombuffer(out, np.float32)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ap = ffmpegProcessor()\n\nsample = df.sample(4)\n\nfor index, row in sample.iterrows():\n    audio = ap.extract_audio(path + row.filename)\n    show_melspectrogram(melspectrogram(audio))\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}