From: Jean-Baptiste M. <jb...@kd...> - 2013-03-31 18:43:25
|
Git commit e9388f39f0d977f0a89ed8c8971502c5f9d5065b by Jean-Baptiste Mardelle. Committed on 31/03/2013 at 20:42. Pushed by mardelle into branch 'master'. Make audio / video bitrate easily configurable in custom render profiles: http://kdenlive.org/mantis/view.php?id=3012 M +1 -1 export/profiles.xml M +48 -22 src/renderwidget.cpp M +108 -35 src/widgets/saveprofile_ui.ui http://commits.kde.org/kdenlive/e9388f39f0d977f0a89ed8c8971502c5f9d5065b diff --git a/export/profiles.xml b/export/profiles.xml index cce81c3..740f1fa 100644 --- a/export/profiles.xml +++ b/export/profiles.xml @@ -92,7 +92,7 @@ </group> <group name="WebM" renderer="avformat" extension="webm" type="av"> - <profile name="WebM" bitrates="200,400,600,800,1000,2000,4000,6000,8000,10000,12000" defaultbitrate="8000" + <profile name="WebM" bitrates="200,400,600,800,1000,2000,4000,6000,8000,10000,12000,18000,25000" defaultbitrate="8000" audiobitrates="64,128,192,256,384" defaultaudiobitrate="128" args="acodec=vorbis ab=%audiobitrate+'k' ar=44100 aq=50 vcodec=libvpx minrate=0 vb=%bitrate+'k' aspect=%dar maxrate=%bitrate*2+'k' g=120 qmax=42 qmin=10" /> </group> diff --git a/src/renderwidget.cpp b/src/renderwidget.cpp index 9ef29df..c521e39 100644 --- a/src/renderwidget.cpp +++ b/src/renderwidget.cpp @@ -464,6 +464,25 @@ void RenderWidget::slotSaveProfile() ui.parameters->setText(arguments.join(" ")); ui.extension->setText(m_view.size_list->currentItem()->data(ExtensionRole).toString()); ui.profile_name->setFocus(); + QListWidgetItem *item = m_view.size_list->currentItem(); + if (ui.parameters->toPlainText().contains("%bitrate")) { + if ( item && item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) { + QStringList bitrates = item->data(BitratesRole).toStringList(); + ui.vbitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultBitrateRole).canConvert(QVariant::String)) + ui.default_vbitrate->setValue(item->data(DefaultBitrateRole).toInt()); + } + } + else ui.vbitrates->setHidden(true); + if (ui.parameters->toPlainText().contains("%audiobitrate")) { + if ( item && item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) { + QStringList bitrates = item->data(AudioBitratesRole).toStringList(); + ui.abitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String)) + ui.default_abitrate->setValue(item->data(DefaultAudioBitrateRole).toInt()); + } + } + else ui.abitrates->setHidden(true); if (d->exec() == QDialog::Accepted && !ui.profile_name->text().simplified().isEmpty()) { QString newProfileName = ui.profile_name->text().simplified(); @@ -481,19 +500,13 @@ void RenderWidget::slotSaveProfile() profileElement.setAttribute("args", args); if (args.contains("%bitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultbitrate", m_view.comboBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboBitrates->count(); i++) - bitrateValues << m_view.comboBitrates->itemText(i); - profileElement.setAttribute("bitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultbitrate", QString::number(ui.default_vbitrate->value())); + profileElement.setAttribute("bitrates", ui.vbitrates_list->text()); } if (args.contains("%audiobitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultaudiobitrate", m_view.comboAudioBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboAudioBitrates->count(); i++) - bitrateValues << m_view.comboAudioBitrates->itemText(i); - profileElement.setAttribute("audiobitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultaudiobitrate", QString::number(ui.default_abitrate->value())); + profileElement.setAttribute("audiobitrates", ui.abitrates_list->text()); } doc.appendChild(profileElement); saveProfile(doc.documentElement()); @@ -619,6 +632,25 @@ void RenderWidget::slotEditProfile() ui.extension->setText(extension); ui.parameters->setText(params); ui.profile_name->setFocus(); + if (ui.parameters->toPlainText().contains("%bitrate")) { + if ( item->data(BitratesRole).canConvert(QVariant::StringList) && item->data(BitratesRole).toStringList().count()) { + QStringList bitrates = item->data(BitratesRole).toStringList(); + ui.vbitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultBitrateRole).canConvert(QVariant::String)) + ui.default_vbitrate->setValue(item->data(DefaultBitrateRole).toInt()); + } + } + else ui.vbitrates->setHidden(true); + if (ui.parameters->toPlainText().contains("%audiobitrate")) { + if ( item->data(AudioBitratesRole).canConvert(QVariant::StringList) && item->data(AudioBitratesRole).toStringList().count()) { + QStringList bitrates = item->data(AudioBitratesRole).toStringList(); + ui.abitrates_list->setText(bitrates.join(",")); + if (item->data(DefaultAudioBitrateRole).canConvert(QVariant::String)) + ui.default_abitrate->setValue(item->data(DefaultAudioBitrateRole).toInt()); + } + } + else ui.abitrates->setHidden(true); + d->setWindowTitle(i18n("Edit Profile")); if (d->exec() == QDialog::Accepted) { slotDeleteProfile(false); @@ -678,19 +710,13 @@ void RenderWidget::slotEditProfile() profileElement.setAttribute("args", args); if (args.contains("%bitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultbitrate", m_view.comboBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboBitrates->count(); i++) - bitrateValues << m_view.comboBitrates->itemText(i); - profileElement.setAttribute("bitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultbitrate", QString::number(ui.default_vbitrate->value())); + profileElement.setAttribute("bitrates", ui.vbitrates_list->text()); } if (args.contains("%audiobitrate")) { // profile has a variable bitrate - profileElement.setAttribute("defaultaudiobitrate", m_view.comboAudioBitrates->currentText()); - QStringList bitrateValues; - for (int i = 0; i < m_view.comboAudioBitrates->count(); i++) - bitrateValues << m_view.comboAudioBitrates->itemText(i); - profileElement.setAttribute("audiobitrates", bitrateValues.join(",")); + profileElement.setAttribute("defaultaudiobitrate", QString::number(ui.default_abitrate->value())); + profileElement.setAttribute("audiobitrates", ui.abitrates_list->text()); } profiles.appendChild(profileElement); @@ -960,8 +986,8 @@ void RenderWidget::slotExport(bool scriptExport, int zoneIn, int zoneOut, const QStringList paramsList = renderArgs.split(' ', QString::SkipEmptyParts); QScriptEngine sEngine; - sEngine.globalObject().setProperty("bitrate", m_view.comboBitrates->currentText()); - sEngine.globalObject().setProperty("audiobitrate", m_view.comboAudioBitrates->currentText()); + sEngine.globalObject().setProperty("bitrate", m_view.comboBitrates->currentText().toInt()); + sEngine.globalObject().setProperty("audiobitrate", m_view.comboAudioBitrates->currentText().toInt()); sEngine.globalObject().setProperty("dar", '@' + QString::number(m_profile.display_aspect_num) + '/' + QString::number(m_profile.display_aspect_den)); sEngine.globalObject().setProperty("passes", static_cast<int>(m_view.checkTwoPass->isChecked()) + 1); diff --git a/src/widgets/saveprofile_ui.ui b/src/widgets/saveprofile_ui.ui index 1939f25..026e4e4 100644 --- a/src/widgets/saveprofile_ui.ui +++ b/src/widgets/saveprofile_ui.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>249</width> - <height>229</height> + <width>329</width> + <height>495</height> </rect> </property> <property name="windowTitle"> @@ -21,8 +21,58 @@ </property> </widget> </item> - <item row="0" column="1" colspan="2"> - <widget class="KComboBox" name="destination_list"/> + <item row="6" column="0" colspan="3"> + <widget class="QGroupBox" name="vbitrates"> + <property name="title"> + <string>Video</string> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="2" column="0"> + <widget class="QLabel" name="label_7"> + <property name="text"> + <string>Default bitrate</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="KLineEdit" name="vbitrates_list"/> + </item> + <item row="0" column="0"> + <widget class="QLabel" name="label_6"> + <property name="text"> + <string>Bitrates</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QSpinBox" name="default_vbitrate"> + <property name="maximum"> + <number>500000</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="8" column="2"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + <item row="5" column="0" colspan="3"> + <widget class="KTextEdit" name="parameters"> + <property name="readOnly"> + <bool>false</bool> + </property> + <property name="acceptRichText"> + <bool>false</bool> + </property> + </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_2"> @@ -31,9 +81,6 @@ </property> </widget> </item> - <item row="1" column="1" colspan="2"> - <widget class="KLineEdit" name="group_name"/> - </item> <item row="2" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> @@ -41,6 +88,16 @@ </property> </widget> </item> + <item row="0" column="1" colspan="2"> + <widget class="KComboBox" name="destination_list"/> + </item> + <item row="4" column="0" colspan="3"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Parameters</string> + </property> + </widget> + </item> <item row="2" column="1" colspan="2"> <widget class="KLineEdit" name="profile_name"/> </item> @@ -58,47 +115,63 @@ </property> </widget> </item> - <item row="4" column="0" colspan="3"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>Parameters</string> - </property> - </widget> - </item> - <item row="5" column="0" colspan="3"> - <widget class="KTextEdit" name="parameters"> - <property name="readOnly"> - <bool>false</bool> - </property> - <property name="acceptRichText"> - <bool>false</bool> - </property> - </widget> + <item row="1" column="1" colspan="2"> + <widget class="KLineEdit" name="group_name"/> </item> - <item row="6" column="2"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + <item row="7" column="0" colspan="3"> + <widget class="QGroupBox" name="abitrates"> + <property name="title"> + <string>Audio</string> </property> + <layout class="QGridLayout" name="gridLayout_3"> + <item row="0" column="0"> + <widget class="QLabel" name="label_8"> + <property name="text"> + <string>Bitrates</string> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="label_9"> + <property name="text"> + <string>Default bitrate</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="KLineEdit" name="abitrates_list"/> + </item> + <item row="3" column="1"> + <widget class="QSpinBox" name="default_abitrate"> + <property name="maximum"> + <number>500000</number> + </property> + </widget> + </item> + </layout> + <zorder>label_9</zorder> + <zorder>label_8</zorder> + <zorder>abitrates_list</zorder> + <zorder>label_9</zorder> + <zorder>label_8</zorder> + <zorder>abitrates_list</zorder> + <zorder>default_abitrate</zorder> </widget> </item> </layout> </widget> <customwidgets> <customwidget> - <class>KLineEdit</class> - <extends>QLineEdit</extends> - <header>klineedit.h</header> - </customwidget> - <customwidget> <class>KComboBox</class> <extends>QComboBox</extends> <header>kcombobox.h</header> </customwidget> <customwidget> + <class>KLineEdit</class> + <extends>QLineEdit</extends> + <header>klineedit.h</header> + </customwidget> + <customwidget> <class>KTextEdit</class> <extends>QTextEdit</extends> <header>ktextedit.h</header> |