This tutorial deals with audio extraction from video using GPU accelerated libraries supported by FFMPEG in Ubuntu. The full code is available in this GitHub repository. For similar posts about video processing, please refer to Resizing a video is unbelievably fast by GPU acceleration and GPU-based video rotation FFmpeg.
Introduction
FFmpeg is one of the most famous multimedia frameworks which is widely used for processing videos. In order to encode the video, certainly, a video encoder must be used. The NVIDIA GPUs
NVENC
In this tutorial, the main goal is to show how to extract audio from video with GPU-accelerated libraries in Linux. In this tutorial, we do not use the terminal commands directly for employing the FFmpeg with NVENC support. Instead, the python interface is being used to run commands in the terminal. This can be done subprocess
os.sys
The assumption of this tutorial is that the FFmpeg is already installed with NVENC support. The installation guide can be found in FFMPEG WITH NVIDIA ACCELERATION ON UBUNTU LINUXdocumentation provided by NVIDIA.
Audio Extraction from Video
From now on the assumption is that the .txt
file is ready and well-formatted. The python script for processing videos is as below:
import subprocess import os import sys # Pre... textfile_path = 'absolute/path/to/videos.txt' # Read the text file with open(textfile_path) as f: content = f.readlines() # you may also want to remove whitespace characters like `\n` at the end of each line files_list = [x.strip() for x in content] # Extract audio from video. # It already save the video file using the named defined by output_name. for file_num, file_path_input in enumerate(files_list, start=1): # Get the file name withoutextension file_name = os.path.basename(file_path_input) if 'mouthcropped' not in file_name: raw_file_name = os.path.basename(file_name).split('.')[0] file_dir = os.path.dirname(file_path_input) file_path_output = file_dir + '/' + raw_file_name + '.wav' print('processing file: %s' % file_path_input) subprocess.call( ['ffmpeg', '-i', file_path_input, '-codec:a', 'pcm_s16le', '-ac', '1', file_path_output]) print('file %s saved' % file_path_output)
Overall Code Description
videos.txt
.txt
files_list
subprocess.call
,
subprocess.call
an empty space
for i in **/*.mp4; do base=base.mp4 -codec:a pcm_s16le -ac 1
{i%.mp4}; ffmpeg -i
base.wav; done
As a consideration, if we are working on any specific virtual environment it has to be activated at first.
Summary
This tutorial demonstrated how to extract audio from a video and specifically using FFmpeg and Nvidia GPU accelerated library called NVENC. The advantage of using the Python interface is to easily parse the .txtfile and looping through all files. Moreover, it enables the user with options which are more complex to be directly employed in the terminal environment.