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


Compartí este artículo