FFmpeg рдХреЛ WebAssembly (= ffmpeg.js) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛: рднрд╛рдЧ 1 - рдкрд╛рдХ рдХрд▓рд╛



рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рднрд╛рдЧреЛрдВ рдХреА рд╕реВрдЪреА:


  1. рдЦрд╛рдирд╛ рдкрдХрд╛рдиреЗ (рдЖрдк рдпрд╣рд╛рдБ рд╣реИрдВ)
  2. Emscripten рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди
  3. рдХрдиреНрд╡рд░реНрдЯ AVI рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mp4




рдЗрд╕ рднрд╛рдЧ рд╕реЗ рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ:


  1. рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?
  2. рдбреЙрдХрдЯрд░ рдореЗрдВ FFmpeg рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ



рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?


рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:


  1. рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ C / C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрдирд╛рдПрдВ (рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдФрд░ рдЙрдкрдпреЛрдЧреА)
  2. рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬреНрдЮрд╛рдкрди

рдХреНрдпреЛрдВ ffmpeg?


FFmpeg рдПрдХ рдореБрдХреНрдд рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реАрдбрд┐рдпреЛ, рдСрдбрд┐рдпреЛ рдФрд░ рдЕрдиреНрдп рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ / рдкреНрд░рд╕рд╛рд░рдгреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕реЗрдЯ рд╣реИред (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ)


рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рдРрд╕реА рдХреНрд╖рдорддрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдмрд╕ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк "ffmpeg.js" рдХреЛ Google рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓реЗрдВрдЧреЗ:



рдпреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдмреЗрд╢рдХ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ:


  1. FFmpeg рдФрд░ Emscripten рджреЛрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  2. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╕рдорд░реНрдерди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЬрдорд╛ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдмрдбрд╝реЗ C / C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрдирд╛рдпрд╛ред


рдбреЙрдХрдЯрд░ рдореЗрдВ FFmpeg рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо FFmpeg рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред


рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, FFmpeg рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 4.1.4 рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


$ git clone --depth 1 --branch n4.1.4 https://github.com/FFmpeg/FFmpeg 

--depth 1 рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЛ рдЧрддрд┐ рдорд┐рд▓реЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╕рднреА рдХрдорд┐рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рд╕рдлрд▓ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред


рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред (FFmpeg рдорд╛рдирдХ рдореЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╛рдЬреЗрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ)


FFmpeg рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд INSTALL.md рдлрд╛рдЗрд▓ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ:


# FFmpeg рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


1. рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП `/ / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ 'рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА `рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ - рдорджрдж` рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред


`рдХреЙрдиреНрдлрд╝рд┐рдЧрд░` рдХреЛ FFmpeg рд╕реНрд░реЛрдд рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдкрд╛рд╕ рдХрд░реЗрдВ, рдЙрджрд╛ред `/ ffmpegdir / ffmpeg / config`ред


2. рдЕрдм FFmpeg рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП `make` рдЯрд╛рдЗрдк рдХрд░реЗрдВред рдЖрдкрдХреЛ рдЬреАрдПрдирдпреВ рдореЗрдХ 3.81 рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред


3. рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'make install' рдЯрд╛рдЗрдк рдХрд░реЗрдВред


рдиреЛрдЯрд┐рд╕
- - -


- рдЧреИрд░-рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрднрд░рддрд╛рдПрдВ (рдЙрджрд╛ред Libx264, libvpx) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реИрдВред


рдЪреВрдВрдХрд┐ рд╣рдо FFmpeg рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рджреЛ рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдРрд╕рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рдкрд░ рдЗрд╕рдХреА рдПрдХрд░реВрдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред


рдЪрд▓реЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ bash рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб-with-docker.sh рдмрдирд╛рддреЗ рд╣реИрдВ:


 #!/bin/bash docker pull gcc:4 docker run -it \ -v $PWD:/usr/src \ gcc:9.1 \ sh -c 'cd /usr/src && ./configure --disable-x86asm && make -j4' 

--disable-x86asm рдХреЛ ffmpeg рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗ рдЬрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:


 $ chmod +x build-with-docker.sh $ ./build-with-docker.sh 

рдЖрдкрдХреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЖрдкрдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреА рдЧрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрдХрд▓рди рдореЗрдВ рд▓рдЧрднрдЧ 10-30 рдорд┐рдирдЯ рд▓рдЧреЗрдВрдЧреЗред


рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк рдХрдИ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рджреЗрдЦреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ gcc 9.1 рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдЦреНрдд рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред


рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк ffmpeg рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 $ ./ffmpeg 

рдпрд╛


 $ docker run -it -v $PWD:/usr/src gcc:9.1 /usr/src/ffmpeg 

рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦреЗрдВрдЧреЗ:


ffmpeg рд╕рдВрд╕реНрдХрд░рдг n4.1.4 рдХреЙрдкреАрд░рд╛рдЗрдЯ 2000тАУ2019 FFmpeg рдбреЗрд╡рд▓рдкрд░реНрд╕
9.1.0 рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ (GCC)
рд╡рд┐рдиреНрдпрд╛рд╕: - рдЕрдХреНрд╖рдо- x86asm
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
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
рд╣рд╛рдЗрдкрд░ рдлрд╛рд╕реНрдЯ рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдПрдирдХреЛрдбрд░
рдЙрдкрдпреЛрдЧ: ffmpeg [рд╡рд┐рдХрд▓реНрдк] [[рд╢рд┐рд╢реБ рд╡рд┐рдХрд▓реНрдк] -i рд╢рд┐рд╢реБ] ... {[рд╕рдВрдЧрдарди рд╡рд┐рдХрд▓реНрдк] рд╕рдВрдЧрдарди} ...


рдкреВрд░реНрдг рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -h рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, 'рдореИрди ffmpeg' рдЪрд▓рд╛рдПрдВ


рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо FFmpeg рдХреЛ Emscripten рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi473098/


All Articles