Hackeando audio con youtube-dl y FFmpeg

Descargar contenido de YouTube es un tema tabú, relacionado directamente con la piratería. Anteriormente expliqué cómo utilizar la herramienta youtube-dl para descargar audio y video de YouTube. En ese artículo hablaba además sobre la licencia de YouTube y la descarga de contenido protegido por copyright. Sin embargo existe contenido con licencias abiertas que es posible descargar. Incluso podríamos querer descargar un video de nuestra propiedad que hemos subido con antelación.

En este artículo voy a demostrar algunas tareas interesantes que es posible llevar a cabo con youtube-dl y FFmpeg.







Listar todos los formatos disponibles de un video de YouTube

emi@hal9000:~ % youtube-dl -F 'https://www.youtube.com/watch?v=6RaByM8LPKg' [youtube] 6RaByM8LPKg: Downloading webpage [youtube] 6RaByM8LPKg: Downloading video info webpage [info] Available formats for 6RaByM8LPKg: format code extension resolution note 249 webm audio only DASH audio 51k , opus @ 50k, 5.28MiB 250 webm audio only DASH audio 68k , opus @ 70k, 6.66MiB 171 webm audio only DASH audio 107k , vorbis@128k, 10.44MiB 251 webm audio only DASH audio 125k , opus @160k, 12.30MiB 140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 13.32MiB 278 webm 256x144 144p 70k , webm container, vp9, 30fps, video only, 3.59MiB 242 webm 426x240 240p 117k , vp9, 30fps, video only, 5.63MiB 160 mp4 256x144 144p 140k , avc1.4d400c, 30fps, video only, 7.44MiB 243 webm 640x360 360p 244k , vp9, 30fps, video only, 11.37MiB 134 mp4 640x360 360p 298k , avc1.4d401e, 30fps, video only, 13.14MiB 133 mp4 426x240 240p 334k , avc1.4d4015, 30fps, video only, 16.79MiB 244 webm 854x480 480p 429k , vp9, 30fps, video only, 19.18MiB 135 mp4 854x480 480p 648k , avc1.4d401f, 30fps, video only, 25.22MiB 247 webm 1280x720 720p 1005k , vp9, 30fps, video only, 38.35MiB 136 mp4 1280x720 720p 1294k , avc1.4d401f, 30fps, video only, 52.18MiB 248 webm 1920x1080 1080p 1843k , vp9, 30fps, video only, 80.18MiB 137 mp4 1920x1080 1080p 2478k , avc1.640028, 30fps, video only, 105.82MiB 43 webm 640x360 medium , vp8.0, vorbis@128k, 28.72MiB 18 mp4 640x360 medium 325k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 34.17MiB 22 mp4 1280x720 hd720 624k , avc1.64001F, mp4a.40.2@192k (44100Hz) (best)

Descargar una versión específica de un video

Para descargar una versión específica del listado anterior, simplemente se debe utilizar la opción -f con el código de formato como parámetro (valor numérico en la primera columna). Esto simplifica mucho la tarea de selección de calidad de audio y video, sin necesidad de pasar ningún otro parámetro u opción adicional.

Si, por ejemplo, quisiera descargar sólo el audio en formato opus con bitrate de 160k, elijo el código de formato 251:

emi@hal9000:~ % youtube-dl -f 251 'https://www.youtube.com/watch?v=6RaByM8LPKg' [youtube] 6RaByM8LPKg: Downloading webpage [youtube] 6RaByM8LPKg: Downloading video info webpage [download] Destination: Solución Kernel Panic en Manjaro si se usa el GRUB de Antergos para manejarla-6RaByM8LPKg.webm [download] 100% of 12.30MiB in 00:01

Por cierto, se trata de un video de Yoyo Fernández, el cual particularmente utiliza una licencia Creative Commons.

Obtener información de un archivo con FFmpeg

Una vez descargado es posible obtener información acerca de formatos y codecs utilizados con ffmpeg . Para ello simplemente especificar el archivo de entrada, omitiendo un archivo de salida:

emi@hal9000:~ % ffmpeg -i 'Solución Kernel Panic en Manjaro si se usa el GRUB de Antergos para manejarla-6RaByM8LPKg.webm' ffmpeg version 4.1.1 Copyright (c) 2000-2019 the FFmpeg developers built with FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 6.0.1) configuration: --prefix=/usr/local --mandir=/usr/local/man --datadir=/usr/local/share/ffmpeg --pkgconfigdir=/usr/local/libdata/pkgconfig --enable-shared --enable-pic --enable-gpl --enable-postproc --enable-avfilter --enable-avresample --enable-pthreads --cc=cc --enable-alsa --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libaom --enable-libass --disable-libbs2b --disable-libcaca --enable-libcdio --disable-libcelt --disable-libcodec2 --disable-libdav1d --disable-libdavs2 --disable-libdc1394 --disable-debug --enable-htmlpages --disable-libdrm --disable-libfdk-aac --disable-libflite --enable-fontconfig --enable-libfreetype --enable-frei0r --disable-libfribidi --disable-gcrypt --disable-libgme --enable-gmp --enable-gnutls --enable-version3 --disable-libgsm --enable-iconv --disable-libilbc --disable-libjack --disable-libklvanc --disable-libkvazaar --disable-ladspa --enable-libmp3lame --disable-liblensfun --disable-libbluray --disable-librsvg --disable-librtmp --disable-libxml2 --disable-lv2 --disable-mbedtls --enable-mmx --disable-libmodplug --disable-libmysofa --enable-nonfree --enable-openal --disable-opencl --enable-libopencv --disable-opengl --disable-libopenh264 --disable-libopenjpeg --disable-libopenmpt --disable-openssl --disable-optimizations --disable-libopus --disable-libpulse --enable-runtime-cpudetect --disable-librubberband --enable-sdl2 --disable-libsmbclient --disable-libsnappy --disable-sndio --disable-libsoxr --disable-libspeex --disable-libsrt --enable-sse --disable-libssh --disable-libtensorflow --disable-libtesseract --enable-libtheora --disable-libtwolame --enable-libv4l2 --disable-vaapi --disable-vapoursynth --disable-vdpau --disable-libvidstab --enable-libvorbis --disable-libvo-amrwbenc --enable-libvpx --disable-libwavpack --disable-libwebp --enable-libx264 --disable-libx265 --disable-libxavs2 --disable-libxcb --enable-libxvid --disable-outdev=xv --disable-libzimg --disable-libzmq --disable-libzvbi libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 Input #0, matroska,webm, from 'Solución Kernel Panic en Manjaro si se usa el GRUB de Antergos para manejarla-6RaByM8LPKg.webm': Metadata: encoder : google Duration: 00:14:39.46, start: -0.007000, bitrate: 117 kb/s Stream #0:0(eng): Audio: opus, 48000 Hz, stereo, fltp (default) At least one output file must be specified

Se observa que el archivo incluye un stream de audio en formato opus stereo con un bitrate de 117 kb/s. La diferencia de bitrate entre lo que reporta youtube-dl y ffmpeg se debe a que este último reporta el bitrate promedio (cuando se utiliza bitrate variable).

Convertir a otros formatos con FFmpeg

Finalmente es posible convertir el archivo descargado a cualquier otro formato de audio o video utilizando FFmepg. Es tan simple como especificar un archivo de salida y FFmpeg detecta el formato automáticamente de acuerdo a la extensión utilizada.

Por ejemplo, para convertir el archivo opus a mp3 con bitrate de 128k, ejecutar:

ffmpeg -i 'Solución Kernel Panic en Manjaro si se usa el GRUB de Antergos para manejarla-6RaByM8LPKg.webm' -ab 128k salida.mp3

Referencias



Tal vez pueda interesarte

