Como baixar vídeos do Facebook via terminal

Neste artigo veremos como baixar vídeos do Facebook em formato HD ou SD via terminal. Para a tarefa usaremos um script em Python, o Facebook-Video-Downloader.

[ Hits: 7.219 ]

Por: Fábio Berbert de Paula em 20/04/2020 | Blog: https://fabio.automatizando.dev


Introdução



Nesta dica apresentarei uma forma de baixar vídeos do Facebook via terminal. Faremos isso com um ótimo programa escrito em Python que encontrei no GitHub:

Instalação

Primeiro passo será clonar o repositório. Abra um terminal e digite:

git clone https://github.com/sameera-madushan/Facebook-Video-Downloader.git

Entre no diretório do projeto:

cd Facebook-Video-Downloader

E instale as dependências do Python. Lembrando que o script usa o Python3.x:

pip3 install requirements.txt

NOTA: use "sudo pip3 install requirements.txt" caso queira instalar as dependências para todos os usuários do sistema.

Forma de uso

Para usar o script basta digitar:

python3 downloader.py

Uma tela com um prompt será apresentada:

  ___ ___  __   ___    _           ___                  _              _         
 | __| _ )   / (_)__| |___ ___  |    _____ __ ___ _ | |___  __ _ __| |___ _ _ 
 | _|| _    V /| / _` / -_) _  | |) / _  V  V / ' | / _ / _` / _` / -_) '_|
 |_| |___/   \_/ |_\__,_\___\___/ |___/\___/\_/\_/|_||_|_\___/\__,_\__,_\___|_|  
                                                            [Sameera Madushan]



Enter the URL of Facebook video: 

Agora você só precisa colar a URL do vídeo desejado. Para isso abra o vídeo no Facebook, clique com o botão direito sobre ele e escolha a opção "Show Video URL". Copie a URL com Ctrl + C.
Volte ao terminal e cole a URL com: Ctrl + Shift + V (ou botão direito + colar)

Escolha se deseja baixar o vídeo em qualidade HD ou SD e aperte Enter.
Pronto! Teu vídeo foi salvo na pasta onde o comando foi executado com o formato: ano-mes-dia-hora-min-seg.mp4

mediainfo 2020-04-20-12-01-55.mp4
General
Complete name                            : /home/fabio/2020-04-20-16-29-26.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/avc1/mp41)
File size                                : 7.45 MiB
Duration                                 : 3 min 21 s
Overall bit rate                         : 310 kb/s
Movie name                               : 485955588626401
Encoded date                             : UTC 1904-01-01 00:00:00
Tagged date                              : UTC 1904-01-01 00:00:00
Writing application                      : Lavf56.40.101

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : Baseline@L3
Format settings, CABAC                   : No
Format settings, ReFrames                : 5 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 3 min 21 s
Bit rate                                 : 274 kb/s
Width                                    : 400 pixels
Height                                   : 224 pixels
Display aspect ratio                     : 16:9
Original display aspect ratio            : 16:9
Frame rate mode                          : Variable
Frame rate                               : 29.970 FPS
Minimum frame rate                       : 29.960 FPS
Maximum frame rate                       : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.102
Stream size                              : 6.56 MiB (88%)
Writing library                          : x264 core 157
Encoding settings                        : cabac=0 / ref=5 / deblock=1:0:0 / analyse=0x1:0x111 / me=hex / subme=7 / psy=0 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=0 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=7 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=0 / weightp=0 / keyint=90 / keyint_min=9 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=27.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=450 / vbv_bufsize=900 / crf_max=0.0 / nal_hrd=none / filler=0 / ip_ratio=1.40 / aq=2:1.00
Encoded date                             : UTC 1904-01-01 00:00:00
Tagged date                              : UTC 1904-01-01 00:00:00

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : HE-AACv2 / HE-AAC / LC
Codec ID                                 : 40
Duration                                 : 3 min 21 s
Duration_LastFrame                       : 154 ms
Bit rate mode                            : Constant
Bit rate                                 : 32.0 kb/s
Channel(s)                               : 2 channels / 1 channel / 1 channel
Channel positions                        : Front: L R / Front: C / Front: C
Sampling rate                            : 44.1 kHz / 44.1 kHz / 22.05 kHz
Frame rate                               : 21.533 FPS (1024 spf)
Compression mode                         : Lossy
Stream size                              : 787 KiB (10%)
Default                                  : Yes
Alternate group                          : 1
Encoded date                             : UTC 1904-01-01 00:00:00
Tagged date                              : UTC 1904-01-01 00:00:00

Bônus - script para comando

Bom, é meio desconfortável toda hora que quiser baixar um vídeo ter que entrar na pasta do projeto e digitar "python3 downloader.py" né? Então vamos converter o script em comando. Eu particularmente uso uma pasta ~/bin no meu $HOME, mas para simplificar o artigo vou usar o /usr/local/bin.

Copie o downloader.py para a pasta /usr/local/bin. Será necessário permissão de root para escrever lá:

sudo cp downloader.py /usr/local/bin

Por motivos de didática irei renomear o downloader.py para "facebookvideo", escolha o nome que achar mais adequado:

sudo mv /usr/local/bin/downloader.py /usr/local/bin/facebookvideo

Transforme o arquivo em executável:

sudo chmod +x /usr/local/bin/facebookvideo

Porém se você executar o comando agora, irá obter uma mensagem de erro:

facebookvideo
from: can't read /var/mail/datetime
from: can't read /var/mail/tqdm

Isso ocorre porque não indicamos que o script é do tipo Python. Edite o script com seu editor preferido e adicione o conteúdo abaixo na primeira linha:

sudo vim /usr/local/bin/facebookvideo

#!/usr/bin/env python3

E pronto! Agora sempre que quiser baixar um vídeo no Facebook pelo terminal, basta digitar:

facebookvideo

Problemas

O único problema que encontrei no script foi o fato dele não fazer download de vídeos de baixa qualidade. É necessário que o vídeo tenha suporte para download em HD ou SD, caso contrário ele não faz nada.

Quem quiser contribuir com o projeto e adicionar suporte a formatos mais baixos, o trecho de código a ser alterado é este (ponto de partida): o

        _qualityhd = re.search('hd_src:"https', html)
        _qualitysd = re.search('sd_src:"https', html)
        _hd = re.search('hd_src:null', html)
        _sd = re.search('sd_src:null', html)

Fica o convite/desafio para se tornar um contribuidor de software livre! Implemente o código e faça um pull request.

Agradecimentos

Agradecimento especial ao Sameera Madushan por compartilhar o código sob licença GPL 3.0.

Espero ter ajudado!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Adote um projeto, ajude o Viva o Linux

Mais uma política "suja" de marketing da Microsoft

Edital de política de contribuição de artigos

Capturando tela do Android usando shell script

Controlando projetos com o fantástico CVS

Leitura recomendada

Introdução ao clib (Command Line Book)

Varredura de PING Utilizando o Python

Python Flask Básico

Python - Threads

Interagindo com servidores HTTP com Python

  
Comentários
[1] Comentário enviado por dix em 20/04/2020 - 18:13h

Precisei disso a algum tempo e não consegui fazer! Maneiro!

[2] Comentário enviado por maurixnovatrento em 25/04/2020 - 09:56h


Bacana. de vez em quando aparece um video interessante no face para baixar.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts