{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Quelques exemples pour traiter une vid\u00e9o"]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## T\u00e9l\u00e9charger une vid\u00e9o\n", "\n", "[outils](http://www.xavierdupre.fr/app/code_beatrix/helpsphinx/api/video.html#youtube)"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["from code_beatrix.art.video import *"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["'Harry Potter Theme Song.mp4'"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["download_youtube_video('Htaj3o3JD8I', '.', res=None)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La librairie [librosa](https://librosa.github.io/librosa_gallery/index.html) permet de retraiter le son comme de s\u00e9parer les voix du fond sonore."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Extraire le son"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["son = video_extract_audio('Harry Potter Theme Song.mp4')"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["son30 = audio_extract_audio(son, '00:00:00', '00:00:30')"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Jouer le son"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 662/662 [00:01<00:00, 580.64it/s]\n"]}, {"data": {"text/html": ["
"], "text/plain": [""]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["son30.ipython_display()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Liste des vid\u00e9os film\u00e9es"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["['Harry Potter Theme Song.mp4',\n", " 'WIN_20180113_16_40_32_Pro.mp4',\n", " 'WIN_20180113_16_40_40_Pro.mp4',\n", " 'WIN_20180113_16_42_41_Pro.mp4',\n", " 'WIN_20180113_16_43_33_Pro.mp4',\n", " 'WIN_20180113_16_43_42_Pro.mp4',\n", " 'WIN_20180113_16_44_31_Pro.mp4',\n", " 'WIN_20180113_16_45_39_Pro.mp4',\n", " 'WIN_20180113_16_46_26_Pro.mp4',\n", " 'WIN_20180113_16_47_17_Pro.mp4',\n", " 'WIN_20180113_16_47_28_Pro.mp4',\n", " 'WIN_20180113_16_47_39_Pro.mp4',\n", " 'WIN_20180113_16_58_37_Pro.mp4']"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["import os\n", "[_ for _ in os.listdir(r'.') if 'mp4' in _ and ('Harry' in _ or \"WIN_20180113_16\" in _)]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Extraire un bout de la video\n", "\n", "J'ai perdu la vid\u00e9o qui me servait d'exemple, donc j'en prends une autre hasard mais le principe reste le m\u00eame."]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": ["from pyensae.datasource import download_data\n", "vidfile = download_data(\"gonzague_van_bervesseles_traitement_donnees.mp4\")"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": ["vid = video_extract_video(vidfile, '00:00:06', '00:00:22')"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Acc\u00e9l\u00e9rer une vid\u00e9o"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": ["vid2 = video_modification(vid, speed=2.)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Mettre des vid\u00e9os bout \u00e0 bout"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": ["video_mur = video_concatenate([vid2, vid])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Mettre des sons bout \u00e0 bout"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": ["son3 = audio_concatenate([son30, son30])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Remplacer le son d'une vid\u00e9o"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": ["video_truquee = video_replace_audio(video_mur, son3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Sauver une vid\u00e9o sur disque"]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["[MoviePy] >>>> Building video rapide_crash2_truquee2.mp4\n", "[MoviePy] Writing audio in rapide_crash2_truquee2TEMP_MPY_wvf_snd.mp3\n"]}, {"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 192/192 [00:00<00:00, 691.81it/s]\n"]}, {"name": "stdout", "output_type": "stream", "text": ["[MoviePy] Done.\n", "[MoviePy] Writing video rapide_crash2_truquee2.mp4\n"]}, {"name": "stderr", "output_type": "stream", "text": ["100%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 289/289 [00:33<00:00, 8.57it/s]\n"]}, {"name": "stdout", "output_type": "stream", "text": ["[MoviePy] Done.\n", "[MoviePy] >>>> Video ready: rapide_crash2_truquee2.mp4 \n", "\n"]}], "source": ["video_save(video_truquee, 'rapide_crash2_truquee2.mp4', verbose=True)"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0"}}, "nbformat": 4, "nbformat_minor": 2}