Skip to content

Instantly share code, notes, and snippets.

@vitali2y
Created January 26, 2025 22:43
Show Gist options
  • Select an option

  • Save vitali2y/628f4df55c9834797a8bbde0103ed56c to your computer and use it in GitHub Desktop.

Select an option

Save vitali2y/628f4df55c9834797a8bbde0103ed56c to your computer and use it in GitHub Desktop.
Save FB Video In Two Steps

Open FB video (for example walking on the water), then:

  1. open DevTools (F12), then Network tab, watch for calling two GET URLs one-by-one, each with .mp4 inside: first is video without audio, second is just audio (both you can Open in New Tab) - so do Copy As cURL for both, and execute them as below (assuming 1.mp4 and 1.mp3 for both video and audio correspondently):

    IMPORTANT: it's required to remove 2 HTML params from the end of URLs: &bytestart=XXX&byteend=YYY!

    curl --output 1.mp4 https://scontent.xx.fbcdn.net/o1/v/t2/f2/m69/AQO...Kq9.mp4\?strext\=1\&_nc_cat\=108\&_nc_sid\=...&oe\=679C6293
    curl --output 1.mp3 https://scontent.xx.fbcdn.net/o1/v/t2/f2/m69/AQP...HqV.mp4\?strext\=1\&_nc_cat\=1\&_nc_sid\=&oe\=679C8E9F
    
  2. merging downloaded 1.mp4 video and 1.mp3 audio into the final output.mp4 as below:

    ffmpeg -i 1.mp4 -i 1.mp3 -c copy -map 0 -map 1 output.mp4
    

P. S. Alternatively you can play video + audio without merging as:

mpv 1.mp4 --audio-file=1.mp3
@vitali2y
Copy link
Author

Recent practical example for this UA: реальне відео з підводного життя пінгвінів (EN: real video from the underwater life of penguins) FB video - current receipt works as a charm:

# "Copy As cURL" for video
curl --output 1.mp4 'https://scontent.fiev22-2.fna.fbcdn.net/o1/v/t2/f2/m366/AQM9WbRmlBJqW0joe4zlqqXlYl7vdH_-b45R_TEet2OJQuDOjgP_fmqIog7M8FHI66zbL_P2kJKgE_eYJRqeA8qefBrXlglXtfU7EQI.mp4?_nc_cat=102&_nc_oc=Adku6YH-Zwi_juLA4WzVskYiK0Fbl8_icgaXii21PnCZxlEes0g9jOUp50lARK67wDs&_nc_sid=9ca052&_nc_ht=scontent.fiev22-2.fna.fbcdn.net&_nc_ohc=WwoSAlRQkegQ7kNvwEZlHW2&efg=eyJ2ZW5jb2RlX3RhZyI6ImRhc2hfcjJhdjEtcjFnZW4ydnA5X3E5MCIsInZpZGVvX2lkIjo4NDQ2ODI4NjUxMTQyMjIsIm9pbF91cmxnZW5fYXBwX2lkIjowLCJjbGllbnRfbmFtZSI6InVua25vd24iLCJ4cHZfYXNzZXRfaWQiOjMxNTcyOTA2MjEyNDUwMzUsImFzc2V0X2FnZV9kYXlzIjoyNiwidmlfdXNlY2FzZV9pZCI6MTAxMjIsImR1cmF0aW9uX3MiOjE3OCwiYml0cmF0ZSI6MjcyNjE0OSwidXJsZ2VuX3NvdXJjZSI6Ind3dyJ9&ccb=17-1&_nc_gid=mdzJyJFY1dwgD02gCHch_A&_nc_zt=28&oh=00_AfpR7tJ1Wq4r_tKOYfG2yNAiWY4WwZUHc6OgjU3EXOFK7w&oe=6979C5A7' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:146.0) Gecko/20100101 Firefox/146.0' \
  -H 'Accept: */*' \
  -H 'Accept-Language: en-US,en;q=0.5' \
  -H 'Accept-Encoding: gzip, deflate, br, zstd' \
  -H 'Referer: https://www.facebook.com/' \
  -H 'Origin: https://www.facebook.com' \
  -H 'DNT: 1' \
  -H 'Sec-GPC: 1' \
  -H 'Connection: keep-alive' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache' \
  -H 'TE: trailers'

# "Copy As cURL" for audio
curl --output 1.mp3 'https://scontent.fiev22-2.fna.fbcdn.net/o1/v/t2/f2/m412/AQM6IJehhchqEZNe--ihQnfgIa0cA1QYrCfmcmPuzPJtXJTGrpsWQaFV5FreN1sYFDZ77BOkS1FuqOp7QechiQP8DU3wmTXlNgVWAfY.mp4?_nc_cat=104&_nc_oc=AdkdDSIosl9p24GHp5zcftRLvE2MBS8JBgR3v-j-fbHlS-PyAoJxuKG-_7VP99ORGL4&_nc_sid=9ca052&_nc_ht=scontent.fiev22-2.fna.fbcdn.net&_nc_ohc=c114WMWNBJAQ7kNvwGNOTZP&efg=eyJ2ZW5jb2RlX3RhZyI6ImRhc2hfbG5faGVhYWNfdmJyM19hdWRpbyIsInZpZGVvX2lkIjo4NDQ2ODI4NjUxMTQyMjIsIm9pbF91cmxnZW5fYXBwX2lkIjowLCJjbGllbnRfbmFtZSI6InVua25vd24iLCJ4cHZfYXNzZXRfaWQiOjMxNTcyOTA2MjEyNDUwMzUsImFzc2V0X2FnZV9kYXlzIjoyNiwidmlfdXNlY2FzZV9pZCI6MTAxMjIsImR1cmF0aW9uX3MiOjE3OCwiYml0cmF0ZSI6OTIyNDQsInVybGdlbl9zb3VyY2UiOiJ3d3cifQ%3D%3D&ccb=17-1&_nc_gid=mdzJyJFY1dwgD02gCHch_A&_nc_zt=28&oh=00_Afo_1W4z02Th9nL4NlC4zBbmrNX4jYL6Gk-V-gAkeLp7_Q&oe=6979A5F5' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:146.0) Gecko/20100101 Firefox/146.0' \
  -H 'Accept: */*' \
  -H 'Accept-Language: en-US,en;q=0.5' \
  -H 'Accept-Encoding: gzip, deflate, br, zstd' \
  -H 'Referer: https://www.facebook.com/' \
  -H 'Origin: https://www.facebook.com' \
  -H 'DNT: 1' \
  -H 'Sec-GPC: 1' \
  -H 'Connection: keep-alive' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'Pragma: no-cache' \
  -H 'Cache-Control: no-cache'

ffmpeg -i 1.mp4 -i 1.mp3 -c copy -map 0 -map 1 output.mp4

ffplay output.mp4  # strange, but mpv crashed for this video

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment