V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ljq29
V2EX  ›  Python

Python 调用 ffmpeg 的时候,中文名称报错

  •  
  •   ljq29 · 2019-05-29 10:32:30 +08:00 · 5331 次点击
    这是一个创建于 2040 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rtrt,现在用 python 命令调用 ffmpeg 提取视频里面的音频,英文文件名没用问题,中文文件名会报错。 命令行是这样的

    command = "ffmpeg -i " + name_movie + " -ab 160k -ac 2 -ar 8000 -vn " + name_sound subprocess.call(command, shell=True)

    其中文件名是 类似 [ 5-18 ] 学习 1 我是谁.mp4 这样的

    头部用了 #--coding=utf-8-- 也不行

    10 条回复    2019-05-30 05:12:44 +08:00
    ljq29
        1
    ljq29  
    OP
       2019-05-29 10:35:30 +08:00
    这样提示:
    ffmpeg version N-93933-geae251ead9 Copyright (c) 2000-2019 the FFmpeg developers
    built with gcc 8.3.1 (GCC) 20190414
    configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex
    --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
    libavutil 56. 28.100 / 56. 28.100
    libavcodec 58. 52.102 / 58. 52.102
    libavformat 58. 27.103 / 58. 27.103
    libavdevice 58. 7.100 / 58. 7.100
    libavfilter 7. 54.101 / 7. 54.101
    libswscale 5. 4.101 / 5. 4.101
    libswresample 3. 4.100 / 3. 4.100
    libpostproc 55. 4.100 / 55. 4.100
    銆?-18 銆戝涔犺嚜鍔ㄩ┚椹舵苯杞︾殑姝g‘濮垮娍: Invalid argument
    xiadong1994
        2
    xiadong1994  
       2019-05-29 10:47:40 +08:00
    编码问题。字符串是 utf-8 的(�?-18 ] 学习自动驾驶汽车的正确姿势),打出来变成 gbk 了,怀疑你在用 windows。
    jifengg
        3
    jifengg  
       2019-05-29 10:56:30 +08:00
    1.调用 ffmpeg 的时候能否把编码换成 utf8 ;
    2.文件名里面包含了空格,最好用双引号包起来;
    7654
        4
    7654  
       2019-05-29 10:59:09 +08:00
    在 cmd 下简单处理视频,中文字符 ffmpeg 处理的时候也是乱码,但是不影响结果
    ljq29
        5
    ljq29  
    OP
       2019-05-29 11:07:22 +08:00
    @xiadong1994 确实在用 Windows,然而这里: https://blog.csdn.net/jihengshan/article/details/44958315 说是编码的问题,python 不知道怎么处理。
    现在是临时把文件改名,处理完了再改回去: https://blog.csdn.net/weixin_34417814/article/details/88261765
    zhangzhi0123
        6
    zhangzhi0123  
       2019-05-29 13:12:55 +08:00
    前两天我写这个,使用的是 linux 系统,所以没遇到这个问题,有个包 ffmpy,你去试试,看看有没有对这个问题做处理。
    krixaar
        7
    krixaar  
       2019-05-29 14:40:38 +08:00
    只是显示问题,因为 cmd 的默认代码页不是 Unicode (通常是 936 也就是 GBK ),所以为了正常显示,需要先 subprocess.call('chcp 65001', shell=True) 把 cmd 的代码页改成 unicode。问题是这种乱七八糟的文件名是不是得多加个引号才能正常执行?
    nlysh007
        8
    nlysh007  
       2019-05-29 14:51:13 +08:00
    跟 python 关系不大,把文件路径加上 ""
    cnrting
        9
    cnrting  
       2019-05-30 03:25:17 +08:00 via iPhone
    同楼上,文件路径加上""应该就好了
    smallgoogle
        10
    smallgoogle  
       2019-05-30 05:12:44 +08:00
    win 加引号即可。。linux 如果没有中文包。你就需要安装一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:06 · PVG 21:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.