歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python整合FFmpeg實現視頻文件的批量轉換

Python整合FFmpeg實現視頻文件的批量轉換

日期:2017/3/1 11:12:56   编辑:Linux編程

轉換工具層出不窮,ffmpeg才是全能的轉換工具,只是不支持圖形操作。

沒有關系,命令行方式,在freebsd/linux下直接來

我們的思路是,設定一個文件夾存放源視頻文件,python讀取該文件夾下的全部文件,並對文件通過ffmpeg進行分析,根據需要,修改目標文件的編碼、分辨率等等,調用ffmpeg轉換。

我這次的需求是,我家液晶電視只支持分辨來,長寬均小於720,編碼只支持divx/xvid的avi文件,且fps只能小於25——多次實踐,才總結出來的,電視說明書也沒說!!

下面的程序將

  1. /root//root2/video/origin
下存在的全部文件轉換成液晶電視需要的avi格式電影
  1. # coding=gb2312
  1. import string
  2. import os
  3. import time
  4. import re
  5. import sys
  6. if len(sys.argv) < 2:
  7. print 'please input q'
  8. sys.exit()
  9. #遍歷origin下的文件
  10. for root,dirs,files in os.walk('/root//root2/video/origin'):
  11. for name in files:
  12. name= name.replace('[','''''\[''')#對文件名中的[進行轉義
  13. newname =name[0: name.rindex('.')]
  14. #運行一次ffmpeg,獲取分辨率
  15. (si, so, se) = os.popen3('cd /root//root2/video;mkdir -p ffm; rm -f ffm/ffm.txt ; csh -c "(ffmpeg -i origin/' +name+ ' >& ffm/ffm.txt)"; grep Stream ffm/ffm.txt')
  16. t=so.readlines()
  17. ti=0
  18. for line in se.readlines() :
  19. print line
  20. width=0
  21. height=0
  22. #如果帶3個參數,最後兩個就是最終高寬
  23. if len(sys.argv)>3:
  24. width=string.atof(sys.argv[2])
  25. height=string.atof(sys.argv[3])
  26. reg="^\s*Stream.*,\s*(\d+)x(\d+),"
  27. #Stream #0.0: Video: RV40 / 0x30345652, 1020x572, 23 fps, 23 tbr, 23 tbn, 23 tbc
  28. for line in t:
  29. result = re.compile(reg).findall(line)
  30. for c in result:
  31. print name+' '+c[0] + 'x' + c[1]
  32. #液晶電視高寬不能超過720
  33. if len(sys.argv)<=3:
  34. width=string.atof(c[0])
  35. height=string.atof(c[1])
  36. if width>720:
  37. height=height*720/width
  38. width=720
  39. if height>720:
  40. width=width*720/height
  41. height=720
  42. width=int(round(width))
  43. height=int(round(height))
  44. print 'new:',width,'x',height
  45. break
  46. #生成命令,mp3+xvid avi
  47. cmd ='csh -c "' + "cd /root//root2/video;touch ffm/output.log;(ffmpeg -y -i origin/"+name+" -acodec libmp3lame -ar 44100 -ab 64K -vcodec libxvid -qmin "+sys.argv[1]+" -qmax "+sys.argv[1]+" -r 25 -s "+str(width)+"x"+str(height)+" -aspect "+str(width)+":"+str(height)+" -threads 0 -f avi ./ok/xvid/"+newname+".avi" + ' >>& ffm/output.log)"'
  48. print cmd
  49. #運行
  50. (si, so, se) = os.popen3(cmd)
  51. for line in se.readlines() :#打印輸出
  52. print line
  53. for line in so.readlines() :#打印輸出
  54. print line
  55. print cmd,' finish'#再顯示一次命令
Copyright © Linux教程網 All Rights Reserved