Ffmpeg कमांड जो आपको चाहिए वह कुछ इस तरह है:
ffmpeg -i input.foo -c:v libx264 -profile:v high -level 5 -preset slow -b:v $videobitrate -an -pass 1 output.bar;
ffmpeg -y -i input.foo -c:v libx264 -profile:v high -level 5 -preset slow -b:v $videobitrate -b:a $audiobitrate -pass 2 output.bar
libx264 h264 एनकोडर है, और सभी विकल्प ffmpeg से पास हो जाते हैं, वे काफी आत्म व्याख्या हैं। पहले पास के लिए ऑडियो की जरूरत नहीं है, इसलिए एक -an। यदि आप चाहें तो आउटपुट / देव / नल को पाइप कर सकते हैं, लेकिन जो भी हो। मैं सिर्फ दूसरे पास में -y स्विच का उपयोग करता हूं ताकि यह बिना पूछे टेम्प फाइल को ओवरराइट कर दे। डिफ़ॉल्ट रूप से ऑडियो कोडेक aac है, इसलिए आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है।
ffprobe आप $ videobitrate और $ audiobitrate का मूल्य प्राप्त करने में मदद कर सकते हैं (मैं एक सकारात्मक वातावरण मान रहा हूं, अन्यथा यह% videobitrate% और% audiobitrate% होने जा रहा है)। मूल्यों को एक ऐसे रूप में प्राप्त करने के लिए आपको कुछ sed, awk या perl voodoo करने होंगे, जिनका आप उपयोग कर सकते हैं। यहाँ मेरी मशीन पर एक यादृच्छिक mp4 पर ffprobe का उत्पादन है:
ffprobe version 2.1.3 Copyright (c) 2007-2013 the FFmpeg developers
built on Feb 12 2014 22:10:38 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/usr/local/Cellar/ffmpeg/2.1.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-aacenc --enable-libass --enable-ffplay --enable-libspeex --enable-libschroedinger --enable-libfdk-aac --enable-openssl --enable-libopus --enable-frei0r --enable-libcaca --enable-libopenjpeg --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1/include/openjpeg-1.5 '
libavutil 52. 48.101 / 52. 48.101
libavcodec 55. 39.101 / 55. 39.101
libavformat 55. 19.104 / 55. 19.104
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 90.100 / 3. 90.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'loop.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.19.104
Duration: 00:00:19.56, start: 0.000000, bitrate: 201 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 400x226 [SAR 226:225 DAR 16:9], 129 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 75 kb/s (default)
Metadata:
handler_name : SoundHandler
झुंझलाहट ffprobe सब कुछ डंप करने के लिए stderr, तो आप इसे stdout को पुनर्निर्देशित करने की जरूरत है। मैं आपको नहीं बताऊंगा कि अंडे कैसे चूसें, आपका सेड-फू मेरा से बेहतर हो सकता है, लेकिन इसके लिए जो देर में आए , उदाहरण के लिए पूरे शेबंग के लिए बिटरेट प्राप्त करने के लिए ऊपर आप कुछ ऐसा कर सकते हैं:
videobitrate=$(ffprobe input.foo 2>&1|grep bitrate |sed "s/.*bitrate: \([0-9]*\) \([km]*\).*/\1\2/")
और ऑडियो के लिए:
audiobitrate=$(ffprobe input.foo 2>&1|grep Audio|sed "s/.* \([0-9]*\) \([km]*\)b\/s.*/\1\2/")
निश्चित नहीं है कि ऑडियो का बिटरेट क्यों निर्दिष्ट किया गया था, लेकिन वीडियो का नहीं, इसलिए हो सकता है क्योंकि मैं आमतौर पर एक स्थिर दर कारक (निरंतर बिटरेट के बजाय स्थिर गुणवत्ता) के साथ संपीड़ित करता हूं। आपको अपनी फिल्मों पर ffprobe आउटपुट की जांच करनी होगी। वहां से यह आपके ऊपर है कि आपको किन चरों की जरूरत है। ध्यान दें कि ffmpeg 100k या 3m जैसी संख्याओं को पार्स करेगा।