私的AI研究会 >MyLibrary2
適宜再利用できそうなプログラムをライブラリ化する その2
各プロジェクトでテスト運用後、「mylib2」ディレクトリに置く。
Windows の場合
PYTHONPATH = X:\anaconda_win\workspace_2\mylib2
> echo $env:PYTHONPATH X:\anaconda_win\workspace\lib;X:\anaconda_win\workspace_py37\mylib;X:\anaconda_win\workspace_2\mylib2;
Linux の場合
export PYTHONPATH=$PYTHONPATH:$HOME/workspace_2/mylib2
$ printenv PYTHONPATH :/home/XXXXX/workspace_2/mylib2
「matplotlib.animation」を利用して動画編集をする
機能 | 戻り値 | 関数 |
指定サイズ内に縦横比を維持したサイズを得る | bf, h, w | check_size(img_h, img_w, maxsize=0) |
静止画のリサイズ | image | image_resize(image, size=(256, 256)) |
動画のリサイズ | video | video_resize(video, size=(256, 256)) |
静止画 と 動画 2枚 の連結 | animation | img_movie3x1(image, video, video2=None, interval=30, deley=0, pixel_size=(256,256), dpi=64) |
3枚の動画フレームを連結 | animation | merge3x1_ex(listpath, interval=30, deley=0, pixel_size=(256,256), dpi=64): |
merge3x1(source, interval=30, deley=0, pixel_size=(256,256), dpi=64) | ||
4枚の動画フレームを連結 | animation | merge2x2(source, interval=30, deley=0, pixel_size=(256,256), dpi=64) |
merge2x2_ex(listpath, interval=30, deley=0, pixel_size=(256,256), dpi=64) | ||
6枚の動画フレームを連結 | animation | merge3x2_ex(listpath, interval=30, deley=0, pixel_size=(256,256), dpi=64) |
merge3x2(source, interval=30, deley=0, pixel_size=(256,256), dpi=64) | ||
結果動画の表示と保存(終了処理) | - | save_video(ani, save_path, dispf=False) |
動画ファイルを読み出す | video, fps | read_video(filepath)) |
動画ファイルを読み出す(PIL) | images, fps | video2frames(filepath, maxsize = 0) |
音声トラックを追加 | True/False | add_audio(source_path, save_path, log_f=True) |
リストファイルの読み込み | filelist | read_listfile(filepath, log_f=True) |
mp4をmp3/wavに変換 | True/False | mp4_mp3_convert(source_path, save_path, log_f=True) |
動画(mp4/gif)をgifに変換 | True/False | mp4_gif_convert(source_path, save_path, loop_f=0, maxsize=0) |
パラメータ | テスト内容 |
0 | 静止画 と 動画 2枚 の連結 |
1 | 6枚の動画フレームを連結(規定値) |
2 | 4枚の動画フレームを連結(規定値) |
3 | 3枚の動画フレームを連結(規定値) |
4 | 音声トラックを追加 |
5 | リストファイルの読み込み |
6 | mp4をmp3/wavに変換 |
7 | mp4をgifに変換 |
10 | リストファイルから 6枚の動画フレームを連結 |
20 | リストファイルから 4枚の動画フレームを連結 |
30 | リストファイルから 3枚の動画フレームを連結 |
40 | 音声トラックを追加 |
60 | mp4をmp3/wavに変換 |
70 | mp4をgifに変換 |
$ python my_videotool.py <option:0/1/2/3/4/5> $ python my_videotool.py <option:10/20/30/40> <listfile> <savefile>・テスト・コマンド 実行ログ
(py38_learn) python my_videotool.py 0 Source file → './mylib_test/filelist.txt' image file → './mylib_test/04.jpg' driving file → './mylib_test/2.mp4' generated file → './mylib_test/04_output.mp4' Saving mpeg file → 'test_anim.mp4' Saving gif file → 'test_anim.gif'
(py38_learn) python my_videotool.py 1 Source file → './mylib_test/filelist_1.txt' Saving mpeg file → 'test_anim1.mp4' Saving gif file → 'test_anim1.gif'
(py38_learn) python my_videotool.py 2 Source file → './mylib_test/filelist_2.txt' Saving mpeg file → 'test_anim2.mp4' Saving gif file → 'test_anim2.gif'
(py38_learn) python my_videotool.py 3 Source file → './mylib_test/filelist_3.txt' Saving mpeg file → 'test_anim3.mp4' Saving gif file → 'test_anim3.gif'
(py38_learn) python my_videotool.py 4 Source file → './mylib_test/01_video_256.mp4' Saving file → 'h1_13_out.mp4'
(py38_learn) python my_videotool.py 5 Source file → './mylib_test/filelist_1.txt' get data: ['./mylib_test/2.mp4', './mylib_test/mon_output.mp4', './mylib_test/statue-02_output.mp4', './mylib_test/04_output.mp4', './mylib_test/pic3_output.mp4', './mylib_test/f_tsuchiya_1_output.mp4']
(py38_learn) python my_videotool.py 6 Source file → './mylib_test/01_video_256.mp4' Saving file → '01_video_256.mp3'
(py38_learn) python my_videotool.py 7 Source file → './mylib_test/01_video_256.mp4' Saving file → '01_video_256.gif'
「opencv」を利用した画像編集
機能 | 戻り値 | 関数 |
指定サイズ内に縦横比を維持したサイズを得る | bf, h, w | check_size(img_h, img_w, maxsize=0) |
アスペクト比を固定して画像をリサイズ | image | frame_resize(image, maxsize) |
画像を正方形にする(長いほうの辺で) | image | frame_square(image, color=(255, 255, 255)) |
結果の表示と保存(終了処理) | - | image_disp(image, winname='ImageTool', dispf=True, save_path='', maxsize=0, wait_s=0) |
画像の種類を判別する(imghdr 非推奨対応) | None/True/False | is_pict(filename) |
イメージを表示 | - | image2disp(filepath='cam', winname='', savepath='', maxsize=0, loop_f=False) |
画像をタイル状に並べる | ds_image | make_tileimage(images, xmax=WINDOW_WIDTH, ymax=WINDOW_WIDTH) |
パスのリストから画像イメージリストを得る | images | filelist2image(img_path) |
パラメータ | テスト内容 |
0 | アスペクト比を固定して画像をリサイズ |
1 | 画像を正方形にする(長いほうの辺で) |
2 | 結果の表示と保存(終了処理) |
3 | イメージを表示(カメラ入力) |
4 | イメージを表示(動画/静止画) |
5 | 画像をタイル状に並べて表示 |
$ python my_imagetool.py {0/1/...}・テスト・コマンド
(py38_learn) python my_imagetool.py 0 ...../mylib_test/04.jpg → ./04_out.jpg (py38_learn) python my_imagetool.py 1 ...../mylib_test/fashion003.png → ./fashion003_out.png (py38_learn) python my_imagetool.py 2 (py38_learn) python my_imagetool.py 3 (py38_learn) python my_imagetool.py 4
「opencv」で動画と音声を再生 参照サイト → How to handle Video and Audio with OpenCV
機能 | 戻り値 | 関数 |
動画再生(音声付き) | - | movie_play(video_file, title = 'Video with Audio') |
$ python my_movieplay.py・テスト・コマンド
(py38_learn) python my_movieplay.py
「ffmpeg」実行例は「workspace_pylearn/learn」ディレクトリでの実行を想定~
ffmpeg -i "fashion01.mp4" -vf "yadif=deint=interlaced, scale=w=trunc(ih*dar/2)*2:h=trunc(ih/2)*2, setsar=1/1, scale=w=940:h=940:force_original_aspect_ratio=1, pad=w=940:h=940:x=(ow-iw)/2:y=(oh-ih)/2:color=#ffffff" -pix_fmt yuv420p "fashion01_out.mp4"
ffmpeg -i 01.mp4 -ss 00:00:00.00 -t 00:00:03 -filter:v "crop=340:340:450:80" -async 1 01_video_340.mp4
ffmpeg -i 07.mkv -ss 00:08:57.50 -t 00:00:08 -filter:v "crop=600:600:760:50" -async 1 hinton.mp4・入力動画の 550,80 座標から 200x200 を切り取るコマンド
ffmpeg -i news_x.mp4 -ss 00:00:00.00 -t 00:00:10 -filter:v "crop=200:200:550:80" -async 1 news01.mp4・入力動画の 550,28 座標から 780x780 を切り取るコマンド
ffmpeg -i kao_cm.mp4 -ss 00:00:00.00 -t 00:00:05.01 -filter:v "crop=780:780:550:28" -async 1 kao_cm_out01.mp4・入力動画の 550,50 座標から 550x550 を切り取るコマンド
ffmpeg -i asahi_cm.mp4 -ss 00:00:23.10 -t 00:00:07.00 -filter:v "crop=550:550:940:50" -async 1 asahi_cm_out01.mp4
ffmpeg -i outvideo6_17.mp4 -i hi_audio.mp3 -c:v copy -c:a mp3 -map 0:v:0 -map 1:a:0 outvideo6_17_oudio.mp4
ffmpeg -i 01_video_340.mp4 -s 256:256 -q 2 01_video_256.mp4
(py38_gan) pip install yt-dlp
(py38_gan) python ytb_down.py 'https://youtu.be/cZM3o5KWLKQ'
(py38_gan) python ytb_down.py 'https://youtu.be/ri6sIaodM6k'
(py38_learn) pip install ffmpeg== ERROR: Could not find a version that satisfies the requirement ffmpeg== (from versions: 1.1.0, 1.2.0, 1.2.1, 1.3, 1.4) ERROR: No matching distribution found for ffmpeg== (py38_learn) conda search ffmpeg Loading channels: done # Name Version Build Channel ffmpeg 4.2 ha925a31_0 pkgs/main ffmpeg 4.2 hc56fc5f_0 pkgs/main ffmpeg 4.2.2 he774522_0 pkgs/main
conda install ffmpeg
pip install ffmpeg-python
conda search imageio-ffmpeg -c conda-forge
pip install scikit-learn