├── README.md ├── .gitignore └── FFmpegTools.py /README.md: -------------------------------------------------------------------------------- 1 | # FFmpegTools 2 | 推荐Linux系统下安装figlet包 3 | 如是Windows环境,可以删掉这行代码 4 | 5 | os.system("figlet FFmpegTools") 6 | 7 | ## 功能介绍 8 | 9 | 1-获取视频信息 10 | 11 | 2-下载m3u8链接 12 | 13 | 3-录制直播源 14 | 15 | 4-删除视频中的音频 16 | 17 | 5-转换视频格式 18 | 19 | 6-视频压H264与H265编码 20 | 21 | 7-提取视频中的音频文件 22 | 23 | 8-调整视频尺寸(分辨率) 24 | 25 | 9-光流法补帧60FPS 26 | 27 | 10-视频本体倒放 28 | 29 | 11-视频中音频倒放 30 | 31 | 12-退出 32 | 33 | ## 安装使用 34 | git clone https://github.com/theatergong/FFmpegTools 35 | cd FFmpegTools 36 | python FFmpegTools.py 37 | 38 | ## 注意事项 39 | #### 视频输入需要完整路径 40 | #### 需要python环境和FFmpeg 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /FFmpegTools.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | 4 | os.system("clear") 5 | os.system("figlet FFmpegTools") 6 | number = int(input(''' 7 | 1-获取视频信息 8 | 2-下载m3u8链接 9 | 3-录制直播源 10 | 4-删除视频中的音频 11 | 5-转换视频格式 12 | 6-视频压H264与H265编码 13 | 7-提取视频中的音频文件 14 | 8-调整视频尺寸(分辨率) 15 | 9-光流法补帧60FPS 16 | 10-视频本体倒放 17 | 11-视频中音频倒放 18 | 12-退出\n 19 | 输入:''')) 20 | if number == 1: 21 | os.system("clear") 22 | one = str(input("请输入视频文件(带后缀):")) 23 | cmd = 'ffmpeg -i "%s"' %(one) 24 | os.system(cmd) 25 | if number == 2: 26 | os.system("clear") 27 | m3u8 = str(input("请输入m3u8链接:")) 28 | name = str(input("请输入视频保存名称(带路径,带后缀):")) 29 | threads = str(input("请输入线程:")) 30 | cmd = 'ffmpeg -threads %s -i "%s" -vcodec copy -acodec copy "%s"' %(threads, m3u8, name) 31 | os.system(cmd) 32 | if number == 3: 33 | os.system("clear") 34 | m3u8 = str(input("请输入m3u8直播源:")) 35 | name = str(input("请输入视频保存名称(带路径,带后缀):")) 36 | cmd = 'ffmpeg -i "%s" -c copy "%s"' %(m3u8, name) 37 | os.system(cmd) 38 | if number == 4: 39 | os.system("clear") 40 | one = str(input("请输入视频文件(带后缀):")) 41 | two = one.replace(".","_new.") 42 | cmd = 'ffmpeg -i "%s" -an "%s"' %(one, two) 43 | os.system(cmd) 44 | if number == 5: 45 | os.system("clear") 46 | print("支持视频格式如下:") 47 | os.system("ffmpeg -formats") 48 | one = str(input("请输入视频文件(带后缀):")) 49 | two = str(input("请输入视频格式(例如mp4):")) 50 | type = one.split(".")[-1] 51 | three = one.replace(type,two) 52 | cmd = 'ffmpeg -i "%s" -qscale 0 "%s"' %(one, three) 53 | os.system(cmd) 54 | if number == 6: 55 | os.system("clear") 56 | coding = str(input("请输入压制编码(264或265):")) 57 | print("Crf值越大,画质越差,文件越小 —— (范围0-51)") 58 | crf = str(input("请输入Crf值:")) 59 | one = str(input("请输入视频文件(带后缀):")) 60 | two = one.replace(".","_new.") 61 | cmd = 'ffmpeg -i "%s" -c:v libx%s -crf %s -c:a copy "%s"' %(one, coding, crf, two) 62 | os.system(cmd) 63 | if number == 7: 64 | os.system("clear") 65 | one = str(input("请输入视频文件(带后缀):")) 66 | two = one.replace(".","_new.") 67 | cmd = 'ffmpeg -i "%s" -vn -acodec copy "%s"' %(one, two) 68 | os.system(cmd) 69 | if number == 8: 70 | os.system("clear") 71 | print("尺寸大小 —— 例如 1280:720") 72 | size = str(input("请输入尺寸大小:")) 73 | one = str(input("请输入视频文件(带后缀):")) 74 | two = one.replace(".","_new.") 75 | cmd = 'ffmpeg -i "%s" -filter:v scale=%s -c:a copy "%s"' %(one, size, two) 76 | os.system(cmd) 77 | if number == 9: 78 | os.system("clear") 79 | one = str(input("请输入视频文件(带后缀):")) 80 | two = one.replace(".","_new.") 81 | cmd = 'ffmpeg -y -hide_banner -i "%s" -filter_complex "[0:v]scale=-2:-2[v];[v]minterpolate="mi_mode=mci:mc_mode=aobmc:me_mode=bidir:mb_size=16:vsbmc=1:fps=60"" -max_muxing_queue_size 1024 "%s" && am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file://"%s""' %(one, two, two) 82 | os.system(cmd) 83 | if number == 10: 84 | os.system("clear") 85 | one = str(input("请输入视频文件(带后缀):")) 86 | two = one.replace(".","_new.") 87 | cmd = 'ffmpeg -y -hide_banner -i "%s" -vf reverse -af areverse "%s" && am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file://"%s""' %(one, two, two) 88 | os.system(cmd) 89 | if number == 11: 90 | os.system("clear") 91 | one = str(input("请输入视频文件(带后缀):")) 92 | two = one.replace(".","_new.") 93 | cmd = 'ffmpeg -y -hide_banner -i "%s" -af areverse "%s" && am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file://"%s""' %(one, two, two) 94 | os.system(cmd) 95 | if number == 12: 96 | print("程序已退出!") 97 | exit() 98 | --------------------------------------------------------------------------------