私的AI研究会 >MyLibrary2
適宜再利用できそうなプログラムをライブラリ化する その2
「matplotlib.animation」を利用して動画編集をする
機能 | 戻り値 | 関数 |
静止画のリサイズ | 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)) |
音声トラックを追加 | - | add_audio(source_path, save_path) |
リストファイルの読み込み | filelist | read_listfile(filepath) |
パラメータ | テスト内容 |
0 | 静止画 と 動画 2枚 の連結 |
1 | 6枚の動画フレームを連結(規定値) |
2 | 4枚の動画フレームを連結(規定値) |
3 | 3枚の動画フレームを連結(規定値) |
4 | 音声トラックを追加 |
5 | リストファイルの読み込み |
10 | リストファイルから 6枚の動画フレームを連結 |
20 | リストファイルから 4枚の動画フレームを連結 |
30 | リストファイルから 3枚の動画フレームを連結 |
40 | 音声トラックを追加 |
$ 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']
「opencv」を利用した画像編集
機能 | 戻り値 | 関数 |
アスペクト比を固定して画像をリサイズ | image | frame_resize(image, maxsize) |
画像を正方形にする(長いほうの辺で) | image | frame_square(image, color=(255, 255, 255)) |
結果の表示と保存(終了処理) | - | image_disp(image, winname='ImageTool', dispf=True, save_path='') |
画像の種類を判別する(imghdr 非推奨対応) | None/True/False | is_pict(filename) |
イメージを表示 | - | image2disp(filepath='cam', winname='', savepath='', width_f=False, loop_f=False) |
パラメータ | テスト内容 |
0 | アスペクト比を固定して画像をリサイズ |
1 | 画像を正方形にする(長いほうの辺で) |
2 | 結果の表示と保存(終了処理) |
3 | イメージを表示(カメラ入力) |
4 | イメージを表示(動画/静止画) |
$ 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
「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
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) PS > pip install yt-dlp
python ytb_down.py 'https://youtu.be/cZM3o5KWLKQ'
(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