From 47d0065effc36e4306a6464cb256315f37ad07dd Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 25 Feb 2019 20:40:23 -0800 Subject: [PATCH] implemented translating without restarting #514 --- dialogs/debugdialog.cpp | 23 +- dialogs/debugdialog.h | 4 +- mainwindow.cpp | 430 +++++---- mainwindow.h | 86 +- panels/effectcontrols.h | 3 +- panels/grapheditor.h | 3 +- panels/panels.cpp | 4 +- panels/project.h | 3 +- panels/timeline.h | 2 +- panels/viewer.cpp | 5 +- panels/viewer.h | 5 +- rendering/cacher.cpp.autosave | 1269 ------------------------- rendering/cacher.h | 7 +- rendering/renderfunctions.cpp | 3 +- ts/olive_ar.ts | 1578 +++++++++++++++++-------------- ts/olive_bs.ts | 871 ++++++++--------- ts/olive_cs.ts | 1578 +++++++++++++++++-------------- ts/olive_de.ts | 1582 +++++++++++++++++-------------- ts/olive_es.ts | 1651 +++++++++++++++++---------------- ts/olive_fr.ts | 1578 +++++++++++++++++-------------- ts/olive_it.ts | 1651 +++++++++++++++++---------------- ts/olive_ru.ts | 859 ++++++++--------- ts/olive_sr.ts | 871 ++++++++--------- ui/menuhelper.cpp | 297 ++++-- ui/menuhelper.h | 303 +++--- ui/otreeview.cpp | 9 - ui/otreeview.h | 16 - ui/panel.cpp | 15 +- ui/panel.h | 4 +- 29 files changed, 7306 insertions(+), 7404 deletions(-) delete mode 100644 rendering/cacher.cpp.autosave delete mode 100644 ui/otreeview.cpp delete mode 100644 ui/otreeview.h diff --git a/dialogs/debugdialog.cpp b/dialogs/debugdialog.cpp index b45fb66f7..33e8e29a2 100644 --- a/dialogs/debugdialog.cpp +++ b/dialogs/debugdialog.cpp @@ -23,24 +23,39 @@ #include #include #include +#include #include "debug.h" DebugDialog* olive::DebugDialog = nullptr; DebugDialog::DebugDialog(QWidget *parent) : QDialog(parent) { - setWindowTitle(tr("Debug Log")); - QVBoxLayout* layout = new QVBoxLayout(this); textEdit = new QTextEdit(this); textEdit->setWordWrapMode(QTextOption::NoWrap); - layout->addWidget(textEdit); + layout->addWidget(textEdit); + + Retranslate(); +} + +void DebugDialog::Retranslate() +{ + setWindowTitle(tr("Debug Log")); } void DebugDialog::update_log() { textEdit->setHtml(get_debug_str()); - textEdit->verticalScrollBar()->setValue(textEdit->verticalScrollBar()->maximum()); + textEdit->verticalScrollBar()->setValue(textEdit->verticalScrollBar()->maximum()); +} + +void DebugDialog::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + } else { + QDialog::changeEvent(e); + } } void DebugDialog::showEvent(QShowEvent *) { diff --git a/dialogs/debugdialog.h b/dialogs/debugdialog.h index 9f9d146bb..3f9d84d75 100644 --- a/dialogs/debugdialog.h +++ b/dialogs/debugdialog.h @@ -28,10 +28,12 @@ class DebugDialog : public QDialog { Q_OBJECT public: DebugDialog(QWidget* parent = 0); + void Retranslate(); public slots: void update_log(); protected: - void showEvent(QShowEvent* event); + virtual void changeEvent(QEvent* e) override; + virtual void showEvent(QShowEvent* event) override; private: QTextEdit* textEdit; }; diff --git a/mainwindow.cpp b/mainwindow.cpp index 5c04d4c60..5ffea5b86 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -236,7 +236,7 @@ MainWindow::MainWindow(QWidget *parent) : olive::proxy_generator.start(); // set default window title - updateTitle(); + Retranslate(); } MainWindow::~MainWindow() { @@ -345,48 +345,43 @@ void MainWindow::setup_menus() { QMenuBar* menuBar = new QMenuBar(this); setMenuBar(menuBar); + olive::MenuHelper.InitializeSharedMenus(); + // INITIALIZE FILE MENU - QMenu* file_menu = menuBar->addMenu(tr("&File")); - connect(file_menu, SIGNAL(aboutToShow()), this, SLOT(fileMenu_About_To_Be_Shown())); + file_menu = MenuHelper::create_submenu(menuBar, this, SLOT(fileMenu_About_To_Be_Shown())); - QMenu* new_menu = file_menu->addMenu(tr("&New")); + new_menu = MenuHelper::create_submenu(file_menu); olive::MenuHelper.make_new_menu(new_menu); - file_menu->addAction(tr("&Open Project"), olive::Global.get(), SLOT(open_project()), QKeySequence("Ctrl+O"))->setProperty("id", "openproj"); + open_project = MenuHelper::create_menu_action(file_menu, "openproj", olive::Global.get(), SLOT(open_project()), QKeySequence("Ctrl+O")); - clear_open_recent_action = new QAction(tr("Clear Recent List"), menuBar); - clear_open_recent_action->setProperty("id", "clearopenrecent"); - connect(clear_open_recent_action, SIGNAL(triggered()), panel_project, SLOT(clear_recent_projects())); + open_recent = MenuHelper::create_submenu(file_menu); - open_recent = file_menu->addMenu(tr("Open Recent")); + clear_open_recent_action = MenuHelper::create_menu_action(nullptr, "clearopenrecent", panel_project, SLOT(clear_recent_projects())); - open_recent->addAction(clear_open_recent_action); + save_project = MenuHelper::create_menu_action(file_menu, "saveproj", olive::Global.get(), SLOT(save_project()), QKeySequence("Ctrl+S")); - file_menu->addAction(tr("&Save Project"), olive::Global.get(), SLOT(save_project()), QKeySequence("Ctrl+S"))->setProperty("id", "saveproj"); - file_menu->addAction(tr("Save Project &As"), olive::Global.get(), SLOT(save_project_as()), QKeySequence("Ctrl+Shift+S"))->setProperty("id", "saveprojas"); + save_project_as = MenuHelper::create_menu_action(file_menu, "saveprojas", olive::Global.get(), SLOT(save_project_as()), QKeySequence("Ctrl+Shift+S")); file_menu->addSeparator(); - file_menu->addAction(tr("&Import..."), panel_project, SLOT(import_dialog()), QKeySequence("Ctrl+I"))->setProperty("id", "import"); + import_action = MenuHelper::create_menu_action(file_menu, "import", panel_project, SLOT(import_dialog()), QKeySequence("Ctrl+I")); file_menu->addSeparator(); - file_menu->addAction(tr("&Export..."), olive::Global.get(), SLOT(open_export_dialog()), QKeySequence("Ctrl+M"))->setProperty("id", "export"); + export_action = MenuHelper::create_menu_action(file_menu, "export", olive::Global.get(), SLOT(open_export_dialog()), QKeySequence("Ctrl+M")); file_menu->addSeparator(); - file_menu->addAction(tr("E&xit"), this, SLOT(close()))->setProperty("id", "exit"); + exit_action = MenuHelper::create_menu_action(file_menu, "exit", this, SLOT(close())); // INITIALIZE EDIT MENU - QMenu* edit_menu = menuBar->addMenu(tr("&Edit")); - connect(edit_menu, SIGNAL(aboutToShow()), this, SLOT(editMenu_About_To_Be_Shown())); + edit_menu = MenuHelper::create_submenu(menuBar, this, SLOT(editMenu_About_To_Be_Shown())); - undo_action = edit_menu->addAction(tr("&Undo"), olive::Global.get(), SLOT(undo()), QKeySequence("Ctrl+Z")); - undo_action->setProperty("id", "undo"); - redo_action = edit_menu->addAction(tr("Redo"), olive::Global.get(), SLOT(redo()), QKeySequence("Ctrl+Shift+Z")); - redo_action->setProperty("id", "redo"); + undo_action = MenuHelper::create_menu_action(edit_menu, "undo", olive::Global.get(), SLOT(undo()), QKeySequence("Ctrl+Z")); + redo_action = MenuHelper::create_menu_action(edit_menu, "redo", olive::Global.get(), SLOT(redo()), QKeySequence("Ctrl+Shift+Z")); edit_menu->addSeparator(); @@ -394,9 +389,8 @@ void MainWindow::setup_menus() { edit_menu->addSeparator(); - edit_menu->addAction(tr("Select &All"), &olive::FocusFilter, SLOT(select_all()), QKeySequence("Ctrl+A"))->setProperty("id", "selectall"); - - edit_menu->addAction(tr("Deselect All"), panel_timeline, SLOT(deselect()), QKeySequence("Ctrl+Shift+A"))->setProperty("id", "deselectall"); + select_all_action = MenuHelper::create_menu_action(edit_menu, "selectall", &olive::FocusFilter, SLOT(select_all()), QKeySequence("Ctrl+A")); + deselect_all_action = MenuHelper::create_menu_action(edit_menu, "deselectall", panel_timeline, SLOT(deselect()), QKeySequence("Ctrl+Shift+A")); edit_menu->addSeparator(); @@ -404,344 +398,431 @@ void MainWindow::setup_menus() { edit_menu->addSeparator(); - edit_menu->addAction(tr("Ripple to In Point"), panel_timeline, SLOT(ripple_to_in_point()), QKeySequence("Q"))->setProperty("id", "rippletoin"); - edit_menu->addAction(tr("Ripple to Out Point"), panel_timeline, SLOT(ripple_to_out_point()), QKeySequence("W"))->setProperty("id", "rippletoout"); - edit_menu->addAction(tr("Edit to In Point"), panel_timeline, SLOT(edit_to_in_point()), QKeySequence("Ctrl+Alt+Q"))->setProperty("id", "edittoin"); - edit_menu->addAction(tr("Edit to Out Point"), panel_timeline, SLOT(edit_to_out_point()), QKeySequence("Ctrl+Alt+W"))->setProperty("id", "edittoout"); + ripple_to_in_point_ = MenuHelper::create_menu_action(edit_menu, "rippletoin", panel_timeline, SLOT(ripple_to_in_point()), QKeySequence("Q")); + ripple_to_out_point_ = MenuHelper::create_menu_action(edit_menu, "rippletoout", panel_timeline, SLOT(ripple_to_out_point()), QKeySequence("W")); + edit_to_in_point_ = MenuHelper::create_menu_action(edit_menu, "edittoin", panel_timeline, SLOT(edit_to_in_point()), QKeySequence("Ctrl+Alt+Q")); + edit_to_out_point_ = MenuHelper::create_menu_action(edit_menu, "edittoout", panel_timeline, SLOT(edit_to_out_point()), QKeySequence("Ctrl+Alt+W")); edit_menu->addSeparator(); olive::MenuHelper.make_inout_menu(edit_menu); - edit_menu->addAction(tr("Delete In/Out Point"), panel_timeline, SLOT(delete_inout()), QKeySequence(";"))->setProperty("id", "deleteinout"); - edit_menu->addAction(tr("Ripple Delete In/Out Point"), panel_timeline, SLOT(ripple_delete_inout()), QKeySequence("'"))->setProperty("id", "rippledeleteinout"); + delete_inout_point_ = MenuHelper::create_menu_action(edit_menu, "deleteinout", panel_timeline, SLOT(delete_inout()), QKeySequence(";")); + ripple_delete_inout_point_ = MenuHelper::create_menu_action(edit_menu, "rippledeleteinout", panel_timeline, SLOT(ripple_delete_inout()), QKeySequence("'")); edit_menu->addSeparator(); - edit_menu->addAction(tr("Set/Edit Marker"), &olive::FocusFilter, SLOT(set_marker()), QKeySequence("M"))->setProperty("id", "marker"); + setedit_marker_ = MenuHelper::create_menu_action(edit_menu, "marker", &olive::FocusFilter, SLOT(set_marker()), QKeySequence("M")); // INITIALIZE VIEW MENU - QMenu* view_menu = menuBar->addMenu(tr("&View")); - connect(view_menu, SIGNAL(aboutToShow()), this, SLOT(viewMenu_About_To_Be_Shown())); + view_menu = MenuHelper::create_submenu(menuBar, this, SLOT(viewMenu_About_To_Be_Shown())); - view_menu->addAction(tr("Zoom In"), &olive::FocusFilter, SLOT(zoom_in()), QKeySequence("="))->setProperty("id", "zoomin"); - view_menu->addAction(tr("Zoom Out"), &olive::FocusFilter, SLOT(zoom_out()), QKeySequence("-"))->setProperty("id", "zoomout"); - view_menu->addAction(tr("Increase Track Height"), panel_timeline, SLOT(IncreaseTrackHeight()), QKeySequence("Ctrl+="))->setProperty("id", "vzoomin"); - view_menu->addAction(tr("Decrease Track Height"), panel_timeline, SLOT(DecreaseTrackHeight()), QKeySequence("Ctrl+-"))->setProperty("id", "vzoomout"); + zoom_in_ = MenuHelper::create_menu_action(view_menu, "zoomin", &olive::FocusFilter, SLOT(zoom_in()), QKeySequence("=")); + zoom_out_ = MenuHelper::create_menu_action(view_menu, "zoomout", &olive::FocusFilter, SLOT(zoom_out()), QKeySequence("-")); + increase_track_height_ = MenuHelper::create_menu_action(view_menu, "vzoomin", panel_timeline, SLOT(IncreaseTrackHeight()), QKeySequence("Ctrl+=")); + decrease_track_height_ = MenuHelper::create_menu_action(view_menu, "vzoomout", panel_timeline, SLOT(DecreaseTrackHeight()), QKeySequence("Ctrl+-")); - show_all = view_menu->addAction(tr("Toggle Show All"), panel_timeline, SLOT(toggle_show_all()), QKeySequence("\\")); - show_all->setProperty("id", "showall"); + show_all = MenuHelper::create_menu_action(view_menu, "showall", panel_timeline, SLOT(toggle_show_all()), QKeySequence("\\")); show_all->setCheckable(true); view_menu->addSeparator(); - track_lines = view_menu->addAction(tr("Track Lines"), &olive::MenuHelper, SLOT(toggle_bool_action())); - track_lines->setProperty("id", "tracklines"); + track_lines = MenuHelper::create_menu_action(view_menu, "tracklines", &olive::MenuHelper, SLOT(toggle_bool_action())); track_lines->setCheckable(true); track_lines->setData(reinterpret_cast(&olive::CurrentConfig.show_track_lines)); - rectified_waveforms = view_menu->addAction(tr("Rectified Waveforms"), &olive::MenuHelper, SLOT(toggle_bool_action())); - rectified_waveforms->setProperty("id", "rectifiedwaveforms"); + rectified_waveforms = MenuHelper::create_menu_action(view_menu, "rectifiedwaveforms", &olive::MenuHelper, SLOT(toggle_bool_action())); rectified_waveforms->setCheckable(true); rectified_waveforms->setData(reinterpret_cast(&olive::CurrentConfig.rectified_waveforms)); view_menu->addSeparator(); - frames_action = view_menu->addAction(tr("Frames"), &olive::MenuHelper, SLOT(set_timecode_view())); - frames_action->setProperty("id", "modeframes"); + frames_action = MenuHelper::create_menu_action(view_menu, "modeframes", &olive::MenuHelper, SLOT(set_timecode_view())); frames_action->setData(olive::kTimecodeFrames); frames_action->setCheckable(true); - drop_frame_action = view_menu->addAction(tr("Drop Frame"), &olive::MenuHelper, SLOT(set_timecode_view())); - drop_frame_action->setProperty("id", "modedropframe"); + + drop_frame_action = MenuHelper::create_menu_action(view_menu, "modedropframe", &olive::MenuHelper, SLOT(set_timecode_view())); drop_frame_action->setData(olive::kTimecodeDrop); drop_frame_action->setCheckable(true); - nondrop_frame_action = view_menu->addAction(tr("Non-Drop Frame"), &olive::MenuHelper, SLOT(set_timecode_view())); - nondrop_frame_action->setProperty("id", "modenondropframe"); + + nondrop_frame_action = MenuHelper::create_menu_action(view_menu, "modenondropframe", &olive::MenuHelper, SLOT(set_timecode_view())); nondrop_frame_action->setData(olive::kTimecodeNonDrop); nondrop_frame_action->setCheckable(true); - milliseconds_action = view_menu->addAction(tr("Milliseconds"), &olive::MenuHelper, SLOT(set_timecode_view())); - milliseconds_action->setProperty("id", "milliseconds"); + + milliseconds_action = MenuHelper::create_menu_action(view_menu, "milliseconds", &olive::MenuHelper, SLOT(set_timecode_view())); milliseconds_action->setData(olive::kTimecodeMilliseconds); milliseconds_action->setCheckable(true); view_menu->addSeparator(); - QMenu* title_safe_area_menu = view_menu->addMenu(tr("Title/Action Safe Area")); + title_safe_area_menu = MenuHelper::create_submenu(view_menu); - title_safe_off = title_safe_area_menu->addAction(tr("Off")); - title_safe_off->setProperty("id", "titlesafeoff"); + title_safe_off = MenuHelper::create_menu_action(title_safe_area_menu, "titlesafeoff", &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); title_safe_off->setCheckable(true); title_safe_off->setData(qSNaN()); - connect(title_safe_off, SIGNAL(triggered(bool)), &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); - title_safe_default = title_safe_area_menu->addAction(tr("Default")); - title_safe_default->setProperty("id", "titlesafedefault"); + title_safe_default = MenuHelper::create_menu_action(title_safe_area_menu, "titlesafedefault", &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); title_safe_default->setCheckable(true); title_safe_default->setData(0.0); - connect(title_safe_default, SIGNAL(triggered(bool)), &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); - title_safe_43 = title_safe_area_menu->addAction(tr("4:3")); - title_safe_43->setProperty("id", "titlesafe43"); + title_safe_43 = MenuHelper::create_menu_action(title_safe_area_menu, "titlesafe43", &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); title_safe_43->setCheckable(true); title_safe_43->setData(4.0/3.0); - connect(title_safe_43, SIGNAL(triggered(bool)), &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); - title_safe_169 = title_safe_area_menu->addAction(tr("16:9")); - title_safe_169->setProperty("id", "titlesafe169"); + title_safe_169 = MenuHelper::create_menu_action(title_safe_area_menu, "titlesafe169", &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); title_safe_169->setCheckable(true); title_safe_169->setData(16.0/9.0); - connect(title_safe_169, SIGNAL(triggered(bool)), &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); - title_safe_custom = title_safe_area_menu->addAction(tr("Custom")); - title_safe_custom->setProperty("id", "titlesafecustom"); + title_safe_custom = MenuHelper::create_menu_action(title_safe_area_menu, "titlesafecustom", &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); title_safe_custom->setCheckable(true); title_safe_custom->setData(-1.0); - connect(title_safe_custom, SIGNAL(triggered(bool)), &olive::MenuHelper, SLOT(set_titlesafe_from_menu())); view_menu->addSeparator(); - full_screen = view_menu->addAction(tr("Full Screen"), this, SLOT(toggle_full_screen()), QKeySequence("F11")); - full_screen->setProperty("id", "fullscreen"); + full_screen = MenuHelper::create_menu_action(view_menu, "fullscreen", this, SLOT(toggle_full_screen()), QKeySequence("F11")); full_screen->setCheckable(true); - view_menu->addAction(tr("Full Screen Viewer"), &olive::FocusFilter, SLOT(set_viewer_fullscreen()))->setProperty("id", "fullscreenviewer"); + full_screen_viewer_ = MenuHelper::create_menu_action(view_menu, "fullscreenviewer", &olive::FocusFilter, SLOT(set_viewer_fullscreen())); // INITIALIZE PLAYBACK MENU - QMenu* playback_menu = menuBar->addMenu(tr("&Playback")); - connect(playback_menu, SIGNAL(aboutToShow()), this, SLOT(playbackMenu_About_To_Be_Shown())); + playback_menu = MenuHelper::create_submenu(menuBar, this, SLOT(playbackMenu_About_To_Be_Shown())); + + go_to_start_ = MenuHelper::create_menu_action(playback_menu, "gotostart", &olive::FocusFilter, SLOT(go_to_start()), QKeySequence("Home")); + previous_frame_ = MenuHelper::create_menu_action(playback_menu, "prevframe", &olive::FocusFilter, SLOT(prev_frame()), QKeySequence("Left")); + playpause_ = MenuHelper::create_menu_action(playback_menu, "playpause", &olive::FocusFilter, SLOT(playpause()), QKeySequence("Space")); + play_in_to_out_ = MenuHelper::create_menu_action(playback_menu, "playintoout", &olive::FocusFilter, SLOT(play_in_to_out()), QKeySequence("Shift+Space")); + next_frame_ = MenuHelper::create_menu_action(playback_menu, "nextframe", &olive::FocusFilter, SLOT(next_frame()), QKeySequence("Right")); + go_to_end_ = MenuHelper::create_menu_action(playback_menu, "gotoend", &olive::FocusFilter, SLOT(go_to_end()), QKeySequence("End")); - playback_menu->addAction(tr("Go to Start"), &olive::FocusFilter, SLOT(go_to_start()), QKeySequence("Home"))->setProperty("id", "gotostart"); - playback_menu->addAction(tr("Previous Frame"), &olive::FocusFilter, SLOT(prev_frame()), QKeySequence("Left"))->setProperty("id", "prevframe"); - playback_menu->addAction(tr("Play/Pause"), &olive::FocusFilter, SLOT(playpause()), QKeySequence("Space"))->setProperty("id", "playpause"); - playback_menu->addAction(tr("Play In to Out"), &olive::FocusFilter, SLOT(play_in_to_out()), QKeySequence("Shift+Space"))->setProperty("id", "playintoout"); - playback_menu->addAction(tr("Next Frame"), &olive::FocusFilter, SLOT(next_frame()), QKeySequence("Right"))->setProperty("id", "nextframe"); - playback_menu->addAction(tr("Go to End"), &olive::FocusFilter, SLOT(go_to_end()), QKeySequence("End"))->setProperty("id", "gotoend"); - playback_menu->addSeparator(); - playback_menu->addAction(tr("Go to Previous Cut"), panel_timeline, SLOT(previous_cut()), QKeySequence("Up"))->setProperty("id", "prevcut"); - playback_menu->addAction(tr("Go to Next Cut"), panel_timeline, SLOT(next_cut()), QKeySequence("Down"))->setProperty("id", "nextcut"); - playback_menu->addSeparator(); - playback_menu->addAction(tr("Go to In Point"), &olive::FocusFilter, SLOT(go_to_in()), QKeySequence("Shift+I"))->setProperty("id", "gotoin"); - playback_menu->addAction(tr("Go to Out Point"), &olive::FocusFilter, SLOT(go_to_out()), QKeySequence("Shift+O"))->setProperty("id", "gotoout"); - playback_menu->addSeparator(); - playback_menu->addAction(tr("Shuttle Left"), &olive::FocusFilter, SLOT(decrease_speed()), QKeySequence("J"))->setProperty("id", "decspeed"); - playback_menu->addAction(tr("Shuttle Stop"), &olive::FocusFilter, SLOT(pause()), QKeySequence("K"))->setProperty("id", "pause"); - playback_menu->addAction(tr("Shuttle Right"), &olive::FocusFilter, SLOT(increase_speed()), QKeySequence("L"))->setProperty("id", "incspeed"); playback_menu->addSeparator(); - loop_action = playback_menu->addAction(tr("Loop"), &olive::MenuHelper, SLOT(toggle_bool_action())); - loop_action->setProperty("id", "loop"); - loop_action->setCheckable(true); - loop_action->setData(reinterpret_cast(&olive::CurrentConfig.loop)); + go_to_prev_cut_ = MenuHelper::create_menu_action(playback_menu, "prevcut", panel_timeline, SLOT(previous_cut()), QKeySequence("Up")); + go_to_next_cut_ = MenuHelper::create_menu_action(playback_menu, "nextcut", panel_timeline, SLOT(next_cut()), QKeySequence("Down")); + + playback_menu->addSeparator(); + + go_to_in_point_ = MenuHelper::create_menu_action(playback_menu, "gotoin", &olive::FocusFilter, SLOT(go_to_in()), QKeySequence("Shift+I")); + go_to_out_point_ = MenuHelper::create_menu_action(playback_menu, "gotoout", &olive::FocusFilter, SLOT(go_to_out()), QKeySequence("Shift+O")); + + playback_menu->addSeparator(); + + shuttle_left_ = MenuHelper::create_menu_action(playback_menu, "decspeed", &olive::FocusFilter, SLOT(decrease_speed()), QKeySequence("J")); + shuttle_stop_ = MenuHelper::create_menu_action(playback_menu, "pause", &olive::FocusFilter, SLOT(pause()), QKeySequence("K")); + shuttle_right_ = MenuHelper::create_menu_action(playback_menu, "incspeed", &olive::FocusFilter, SLOT(increase_speed()), QKeySequence("L")); + + playback_menu->addSeparator(); + + loop_action_ = MenuHelper::create_menu_action(playback_menu, "loop", &olive::MenuHelper, SLOT(toggle_bool_action())); + loop_action_->setCheckable(true); + loop_action_->setData(reinterpret_cast(&olive::CurrentConfig.loop)); // INITIALIZE WINDOW MENU - window_menu = menuBar->addMenu(tr("&Window")); - connect(window_menu, SIGNAL(aboutToShow()), this, SLOT(windowMenu_About_To_Be_Shown())); + window_menu = MenuHelper::create_submenu(menuBar, this, SLOT(windowMenu_About_To_Be_Shown())); - QAction* window_project_action = window_menu->addAction(tr("Project"), this, SLOT(toggle_panel_visibility())); - window_project_action->setProperty("id", "panelproject"); + window_project_action = MenuHelper::create_menu_action(window_menu, "panelproject", this, SLOT(toggle_panel_visibility())); window_project_action->setCheckable(true); window_project_action->setData(reinterpret_cast(panel_project)); - QAction* window_effectcontrols_action = window_menu->addAction(tr("Effect Controls"), this, SLOT(toggle_panel_visibility())); - window_effectcontrols_action->setProperty("id", "paneleffectcontrols"); + window_effectcontrols_action = MenuHelper::create_menu_action(window_menu, "paneleffectcontrols", this, SLOT(toggle_panel_visibility())); window_effectcontrols_action->setCheckable(true); window_effectcontrols_action->setData(reinterpret_cast(panel_effect_controls)); - QAction* window_timeline_action = window_menu->addAction(tr("Timeline"), this, SLOT(toggle_panel_visibility())); - window_timeline_action->setProperty("id", "paneltimeline"); + window_timeline_action = MenuHelper::create_menu_action(window_menu, "paneltimeline", this, SLOT(toggle_panel_visibility())); window_timeline_action->setCheckable(true); window_timeline_action->setData(reinterpret_cast(panel_timeline)); - QAction* window_graph_editor_action = window_menu->addAction(tr("Graph Editor"), this, SLOT(toggle_panel_visibility())); - window_graph_editor_action->setProperty("id", "panelgrapheditor"); + window_graph_editor_action = MenuHelper::create_menu_action(window_menu, "panelgrapheditor", this, SLOT(toggle_panel_visibility())); window_graph_editor_action->setCheckable(true); window_graph_editor_action->setData(reinterpret_cast(panel_graph_editor)); - QAction* window_footageviewer_action = window_menu->addAction(tr("Media Viewer"), this, SLOT(toggle_panel_visibility())); - window_footageviewer_action->setProperty("id", "panelfootageviewer"); + window_footageviewer_action = MenuHelper::create_menu_action(window_menu, "panelfootageviewer", this, SLOT(toggle_panel_visibility())); window_footageviewer_action->setCheckable(true); window_footageviewer_action->setData(reinterpret_cast(panel_footage_viewer)); - QAction* window_sequenceviewer_action = window_menu->addAction(tr("Sequence Viewer"), this, SLOT(toggle_panel_visibility())); - window_sequenceviewer_action->setProperty("id", "panelsequenceviewer"); + window_sequenceviewer_action = MenuHelper::create_menu_action(window_menu, "panelsequenceviewer", this, SLOT(toggle_panel_visibility())); window_sequenceviewer_action->setCheckable(true); window_sequenceviewer_action->setData(reinterpret_cast(panel_sequence_viewer)); window_menu->addSeparator(); - window_menu->addAction(tr("Maximize Panel"), this, SLOT(maximize_panel()), QKeySequence("`"))->setProperty("id", "maximizepanel"); + maximize_panel_ = MenuHelper::create_menu_action(window_menu, "maximizepanel", this, SLOT(maximize_panel()), QKeySequence("`")); - QAction* lock_panels = window_menu->addAction(tr("Lock Panels"), this, SLOT(set_panels_locked(bool))); - lock_panels->setCheckable(true); - lock_panels->setProperty("id", "lockpanels"); + lock_panels_ = MenuHelper::create_menu_action(window_menu, "lockpanels", this, SLOT(set_panels_locked(bool))); + lock_panels_->setCheckable(true); window_menu->addSeparator(); - window_menu->addAction(tr("Reset to Default Layout"), this, SLOT(reset_layout()))->setProperty("id", "resetdefaultlayout"); + reset_default_layout_ = MenuHelper::create_menu_action(window_menu, "resetdefaultlayout", this, SLOT(reset_layout())); // INITIALIZE TOOLS MENU - QMenu* tools_menu = menuBar->addMenu(tr("&Tools")); - connect(tools_menu, SIGNAL(aboutToShow()), this, SLOT(toolMenu_About_To_Be_Shown())); + tools_menu = MenuHelper::create_submenu(menuBar, this, SLOT(toolMenu_About_To_Be_Shown())); - pointer_tool_action = tools_menu->addAction(tr("Pointer Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("V")); - pointer_tool_action->setProperty("id", "pointertool"); + pointer_tool_action = MenuHelper::create_menu_action(tools_menu, "pointertool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("V")); pointer_tool_action->setCheckable(true); pointer_tool_action->setData(reinterpret_cast(panel_timeline->toolArrowButton)); - edit_tool_action = tools_menu->addAction(tr("Edit Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("X")); - edit_tool_action->setProperty("id", "edittool"); + edit_tool_action = MenuHelper::create_menu_action(tools_menu, "edittool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("X")); edit_tool_action->setCheckable(true); edit_tool_action->setData(reinterpret_cast(panel_timeline->toolEditButton)); - ripple_tool_action = tools_menu->addAction(tr("Ripple Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("B")); - ripple_tool_action->setProperty("id", "rippletool"); + ripple_tool_action = MenuHelper::create_menu_action(tools_menu, "rippletool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("B")); ripple_tool_action->setCheckable(true); ripple_tool_action->setData(reinterpret_cast(panel_timeline->toolRippleButton)); - razor_tool_action = tools_menu->addAction(tr("Razor Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("C")); - razor_tool_action->setProperty("id", "razortool"); + razor_tool_action = MenuHelper::create_menu_action(tools_menu, "razortool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("C")); razor_tool_action->setCheckable(true); razor_tool_action->setData(reinterpret_cast(panel_timeline->toolRazorButton)); - slip_tool_action = tools_menu->addAction(tr("Slip Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("Y")); - slip_tool_action->setProperty("id", "sliptool"); + slip_tool_action = MenuHelper::create_menu_action(tools_menu, "sliptool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("Y")); slip_tool_action->setCheckable(true); slip_tool_action->setData(reinterpret_cast(panel_timeline->toolSlipButton)); - slide_tool_action = tools_menu->addAction(tr("Slide Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("U")); - slide_tool_action->setProperty("id", "slidetool"); + slide_tool_action = MenuHelper::create_menu_action(tools_menu, "slidetool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("U")); slide_tool_action->setCheckable(true); slide_tool_action->setData(reinterpret_cast(panel_timeline->toolSlideButton)); - hand_tool_action = tools_menu->addAction(tr("Hand Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("H")); - hand_tool_action->setProperty("id", "handtool"); + hand_tool_action = MenuHelper::create_menu_action(tools_menu, "handtool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("H")); hand_tool_action->setCheckable(true); hand_tool_action->setData(reinterpret_cast(panel_timeline->toolHandButton)); - transition_tool_action = tools_menu->addAction(tr("Transition Tool"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("T")); - transition_tool_action->setProperty("id", "transitiontool"); + transition_tool_action = MenuHelper::create_menu_action(tools_menu, "transitiontool", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("T")); transition_tool_action->setCheckable(true); transition_tool_action->setData(reinterpret_cast(panel_timeline->toolTransitionButton)); tools_menu->addSeparator(); - snap_toggle = tools_menu->addAction(tr("Enable Snapping"), &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("S")); - snap_toggle->setProperty("id", "snapping"); + snap_toggle = MenuHelper::create_menu_action(tools_menu, "snapping", &olive::MenuHelper, SLOT(menu_click_button()), QKeySequence("S")); snap_toggle->setCheckable(true); snap_toggle->setData(reinterpret_cast(panel_timeline->snappingButton)); tools_menu->addSeparator(); - selecting_also_seeks = tools_menu->addAction(tr("Selecting Also Seeks"), &olive::MenuHelper, SLOT(toggle_bool_action())); - selecting_also_seeks->setProperty("id", "selectingalsoseeks"); + selecting_also_seeks = MenuHelper::create_menu_action(tools_menu, "selectingalsoseeks", &olive::MenuHelper, SLOT(toggle_bool_action())); selecting_also_seeks->setCheckable(true); selecting_also_seeks->setData(reinterpret_cast(&olive::CurrentConfig.select_also_seeks)); - edit_tool_also_seeks = tools_menu->addAction(tr("Edit Tool Also Seeks"), &olive::MenuHelper, SLOT(toggle_bool_action())); - edit_tool_also_seeks->setProperty("id", "editalsoseeks"); + edit_tool_also_seeks = MenuHelper::create_menu_action(tools_menu, "editalsoseeks", &olive::MenuHelper, SLOT(toggle_bool_action())); edit_tool_also_seeks->setCheckable(true); edit_tool_also_seeks->setData(reinterpret_cast(&olive::CurrentConfig.edit_tool_also_seeks)); - edit_tool_selects_links = tools_menu->addAction(tr("Edit Tool Selects Links"), &olive::MenuHelper, SLOT(toggle_bool_action())); - edit_tool_selects_links->setProperty("id", "editselectslinks"); + edit_tool_selects_links = MenuHelper::create_menu_action(tools_menu, "editselectslinks", &olive::MenuHelper, SLOT(toggle_bool_action())); edit_tool_selects_links->setCheckable(true); edit_tool_selects_links->setData(reinterpret_cast(&olive::CurrentConfig.edit_tool_selects_links)); - seek_also_selects = tools_menu->addAction(tr("Seek Also Selects"), &olive::MenuHelper, SLOT(toggle_bool_action())); - seek_also_selects->setProperty("id", "seekalsoselects"); + seek_also_selects = MenuHelper::create_menu_action(tools_menu, "seekalsoselects", &olive::MenuHelper, SLOT(toggle_bool_action())); seek_also_selects->setCheckable(true); seek_also_selects->setData(reinterpret_cast(&olive::CurrentConfig.seek_also_selects)); - seek_to_end_of_pastes = tools_menu->addAction(tr("Seek to the End of Pastes"), &olive::MenuHelper, SLOT(toggle_bool_action())); - seek_to_end_of_pastes->setProperty("id", "seektoendofpastes"); + seek_to_end_of_pastes = MenuHelper::create_menu_action(tools_menu, "seektoendofpastes", &olive::MenuHelper, SLOT(toggle_bool_action())); seek_to_end_of_pastes->setCheckable(true); seek_to_end_of_pastes->setData(reinterpret_cast(&olive::CurrentConfig.paste_seeks)); - scroll_wheel_zooms = tools_menu->addAction(tr("Scroll Wheel Zooms"), &olive::MenuHelper, SLOT(toggle_bool_action())); - scroll_wheel_zooms->setProperty("id", "scrollwheelzooms"); + scroll_wheel_zooms = MenuHelper::create_menu_action(tools_menu, "scrollwheelzooms", &olive::MenuHelper, SLOT(toggle_bool_action())); scroll_wheel_zooms->setCheckable(true); scroll_wheel_zooms->setData(reinterpret_cast(&olive::CurrentConfig.scroll_zooms)); - enable_drag_files_to_timeline = tools_menu->addAction(tr("Enable Drag Files to Timeline"), &olive::MenuHelper, SLOT(toggle_bool_action())); - enable_drag_files_to_timeline->setProperty("id", "enabledragfilestotimeline"); + enable_drag_files_to_timeline = MenuHelper::create_menu_action(tools_menu, "enabledragfilestotimeline", &olive::MenuHelper, SLOT(toggle_bool_action())); enable_drag_files_to_timeline->setCheckable(true); enable_drag_files_to_timeline->setData(reinterpret_cast(&olive::CurrentConfig.enable_drag_files_to_timeline)); - autoscale_by_default = tools_menu->addAction(tr("Auto-Scale By Default"), &olive::MenuHelper, SLOT(toggle_bool_action())); - autoscale_by_default->setProperty("id", "autoscalebydefault"); + autoscale_by_default = MenuHelper::create_menu_action(tools_menu, "autoscalebydefault", &olive::MenuHelper, SLOT(toggle_bool_action())); autoscale_by_default->setCheckable(true); autoscale_by_default->setData(reinterpret_cast(&olive::CurrentConfig.autoscale_by_default)); - enable_seek_to_import = tools_menu->addAction(tr("Enable Seek to Import"), &olive::MenuHelper, SLOT(toggle_bool_action())); - enable_seek_to_import->setProperty("id", "enableseektoimport"); + enable_seek_to_import = MenuHelper::create_menu_action(tools_menu, "enableseektoimport", &olive::MenuHelper, SLOT(toggle_bool_action())); enable_seek_to_import->setCheckable(true); enable_seek_to_import->setData(reinterpret_cast(&olive::CurrentConfig.enable_seek_to_import)); - enable_audio_scrubbing = tools_menu->addAction(tr("Audio Scrubbing"), &olive::MenuHelper, SLOT(toggle_bool_action())); - enable_audio_scrubbing->setProperty("id", "audioscrubbing"); + enable_audio_scrubbing = MenuHelper::create_menu_action(tools_menu, "audioscrubbing", &olive::MenuHelper, SLOT(toggle_bool_action())); enable_audio_scrubbing->setCheckable(true); enable_audio_scrubbing->setData(reinterpret_cast(&olive::CurrentConfig.enable_audio_scrubbing)); - enable_drop_on_media_to_replace = tools_menu->addAction(tr("Enable Drop on Media to Replace"), &olive::MenuHelper, SLOT(toggle_bool_action())); - enable_drop_on_media_to_replace->setProperty("id", "enabledropmediareplace"); + enable_drop_on_media_to_replace = MenuHelper::create_menu_action(tools_menu, "enabledropmediareplace", &olive::MenuHelper, SLOT(toggle_bool_action())); enable_drop_on_media_to_replace->setCheckable(true); enable_drop_on_media_to_replace->setData(reinterpret_cast(&olive::CurrentConfig.drop_on_media_to_replace)); - enable_hover_focus = tools_menu->addAction(tr("Enable Hover Focus"), &olive::MenuHelper, SLOT(toggle_bool_action())); - enable_hover_focus->setProperty("id", "hoverfocus"); + enable_hover_focus = MenuHelper::create_menu_action(tools_menu, "hoverfocus", &olive::MenuHelper, SLOT(toggle_bool_action())); enable_hover_focus->setCheckable(true); enable_hover_focus->setData(reinterpret_cast(&olive::CurrentConfig.hover_focus)); - set_name_and_marker = tools_menu->addAction(tr("Ask For Name When Setting Marker"), &olive::MenuHelper, SLOT(toggle_bool_action())); - set_name_and_marker->setProperty("id", "asknamemarkerset"); + set_name_and_marker = MenuHelper::create_menu_action(tools_menu, "asknamemarkerset", &olive::MenuHelper, SLOT(toggle_bool_action())); set_name_and_marker->setCheckable(true); set_name_and_marker->setData(reinterpret_cast(&olive::CurrentConfig.set_name_with_marker)); tools_menu->addSeparator(); - no_autoscroll = tools_menu->addAction(tr("No Auto-Scroll"), &olive::MenuHelper, SLOT(set_autoscroll())); - no_autoscroll->setProperty("id", "autoscrollno"); + no_autoscroll = MenuHelper::create_menu_action(tools_menu, "autoscrollno", &olive::MenuHelper, SLOT(set_autoscroll())); no_autoscroll->setData(olive::AUTOSCROLL_NO_SCROLL); no_autoscroll->setCheckable(true); - page_autoscroll = tools_menu->addAction(tr("Page Auto-Scroll"), &olive::MenuHelper, SLOT(set_autoscroll())); - page_autoscroll->setProperty("id", "autoscrollpage"); + page_autoscroll = MenuHelper::create_menu_action(tools_menu, "autoscrollpage", &olive::MenuHelper, SLOT(set_autoscroll())); page_autoscroll->setData(olive::AUTOSCROLL_PAGE_SCROLL); page_autoscroll->setCheckable(true); - smooth_autoscroll = tools_menu->addAction(tr("Smooth Auto-Scroll"), &olive::MenuHelper, SLOT(set_autoscroll())); - smooth_autoscroll->setProperty("id", "autoscrollsmooth"); + smooth_autoscroll = MenuHelper::create_menu_action(tools_menu, "autoscrollsmooth", &olive::MenuHelper, SLOT(set_autoscroll())); smooth_autoscroll->setData(olive::AUTOSCROLL_SMOOTH_SCROLL); smooth_autoscroll->setCheckable(true); tools_menu->addSeparator(); - tools_menu->addAction(tr("Preferences"), olive::Global.get(), SLOT(open_preferences()), QKeySequence("Ctrl+,"))->setProperty("id", "prefs"); + preferences_action_ = MenuHelper::create_menu_action(tools_menu, "prefs", olive::Global.get(), SLOT(open_preferences()), QKeySequence("Ctrl+,")); #ifdef QT_DEBUG - tools_menu->addAction(tr("Clear Undo"), olive::Global.get(), SLOT(clear_undo_stack()))->setProperty("id", "clearundo"); + clear_undo_action_ = MenuHelper::create_menu_action(tools_menu, "clearundo", olive::Global.get(), SLOT(clear_undo_stack())); #endif // INITIALIZE HELP MENU - QMenu* help_menu = menuBar->addMenu(tr("&Help")); + help_menu = MenuHelper::create_submenu(menuBar); - help_menu->addAction(tr("A&ction Search"), olive::Global.get(), SLOT(open_action_search()), QKeySequence("/"))->setProperty("id", "actionsearch"); + action_search_ = MenuHelper::create_menu_action(help_menu, "actionsearch", olive::Global.get(), SLOT(open_action_search()), QKeySequence("/")); help_menu->addSeparator(); - help_menu->addAction(tr("Debug Log"), olive::Global.get(), SLOT(open_debug_log()))->setProperty("id", "debuglog"); + debug_log_ = MenuHelper::create_menu_action(help_menu, "debuglog", olive::Global.get(), SLOT(open_debug_log())); help_menu->addSeparator(); - help_menu->addAction(tr("&About..."), olive::Global.get(), SLOT(open_about_dialog()))->setProperty("id", "about"); + about_action_ = MenuHelper::create_menu_action(help_menu, "about", olive::Global.get(), SLOT(open_about_dialog())); load_shortcuts(get_config_path() + "/shortcuts"); } +void MainWindow::Retranslate() +{ + file_menu->setTitle(tr("&File")); + new_menu->setTitle(tr("&New")); + open_project->setText(tr("&Open Project")); + clear_open_recent_action->setText(tr("Clear Recent List")); + open_recent->setTitle(tr("Open Recent")); + save_project->setText(tr("&Save Project")); + save_project_as->setText(tr("Save Project &As")); + import_action->setText(tr("&Import...")); + export_action->setText(tr("&Export...")); + exit_action->setText(tr("E&xit")); + + edit_menu->setTitle(tr("&Edit")); + undo_action->setText(tr("&Undo")); + redo_action->setText(tr("Redo")); + select_all_action->setText(tr("Select &All")); + deselect_all_action->setText(tr("Deselect All")); + ripple_to_in_point_->setText(tr("Ripple to In Point")); + ripple_to_out_point_->setText(tr("Ripple to Out Point")); + edit_to_in_point_->setText(tr("Edit to In Point")); + edit_to_out_point_->setText(tr("Edit to Out Point")); + delete_inout_point_->setText(tr("Delete In/Out Point")); + ripple_delete_inout_point_->setText(tr("Ripple Delete In/Out Point")); + setedit_marker_->setText(tr("Set/Edit Marker")); + + view_menu->setTitle(tr("&View")); + zoom_in_->setText(tr("Zoom In")); + zoom_out_->setText(tr("Zoom Out")); + increase_track_height_->setText(tr("Increase Track Height")); + decrease_track_height_->setText(tr("Decrease Track Height")); + show_all->setText(tr("Toggle Show All")); + track_lines->setText(tr("Track Lines")); + rectified_waveforms->setText(tr("Rectified Waveforms")); + frames_action->setText(tr("Frames")); + drop_frame_action->setText(tr("Drop Frame")); + nondrop_frame_action->setText(tr("Non-Drop Frame")); + milliseconds_action->setText(tr("Milliseconds")); + + title_safe_area_menu->setTitle(tr("Title/Action Safe Area")); + title_safe_off->setText(tr("Off")); + title_safe_default->setText(tr("Default")); + title_safe_43->setText(tr("4:3")); + title_safe_169->setText(tr("16:9")); + title_safe_custom->setText(tr("Custom")); + + full_screen->setText(tr("Full Screen")); + full_screen_viewer_->setText(tr("Full Screen Viewer")); + + playback_menu->setTitle(tr("&Playback")); + go_to_start_->setText(tr("Go to Start")); + previous_frame_->setText(tr("Previous Frame")); + playpause_->setText(tr("Play/Pause")); + play_in_to_out_->setText(tr("Play In to Out")); + next_frame_->setText(tr("Next Frame")); + go_to_end_->setText(tr("Go to End")); + + go_to_prev_cut_->setText(tr("Go to Previous Cut")); + go_to_next_cut_->setText(tr("Go to Next Cut")); + go_to_in_point_->setText(tr("Go to In Point")); + go_to_out_point_->setText(tr("Go to Out Point")); + + shuttle_left_->setText(tr("Shuttle Left")); + shuttle_stop_->setText(tr("Shuttle Stop")); + shuttle_right_->setText(tr("Shuttle Right")); + + loop_action_->setText(tr("Loop")); + + window_menu->setTitle(tr("&Window")); + + window_project_action->setText(tr("Project")); + window_effectcontrols_action->setText(tr("Effect Controls")); + window_timeline_action->setText(tr("Timeline")); + window_graph_editor_action->setText(tr("Graph Editor")); + window_footageviewer_action->setText(tr("Media Viewer")); + window_sequenceviewer_action->setText(tr("Sequence Viewer")); + + maximize_panel_->setText(tr("Maximize Panel")); + lock_panels_->setText(tr("Lock Panels")); + reset_default_layout_->setText(tr("Reset to Default Layout")); + + tools_menu->setTitle(tr("&Tools")); + + pointer_tool_action->setText(tr("Pointer Tool")); + edit_tool_action->setText(tr("Edit Tool")); + ripple_tool_action->setText(tr("Ripple Tool")); + razor_tool_action->setText(tr("Razor Tool")); + slip_tool_action->setText(tr("Slip Tool")); + slide_tool_action->setText(tr("Slide Tool")); + hand_tool_action->setText(tr("Hand Tool")); + transition_tool_action->setText(tr("Transition Tool")); + snap_toggle->setText(tr("Enable Snapping")); + selecting_also_seeks->setText(tr("Selecting Also Seeks")); + edit_tool_also_seeks->setText(tr("Edit Tool Also Seeks")); + edit_tool_selects_links->setText(tr("Edit Tool Selects Links")); + seek_also_selects->setText(tr("Seek Also Selects")); + seek_to_end_of_pastes->setText(tr("Seek to the End of Pastes")); + scroll_wheel_zooms->setText(tr("Scroll Wheel Zooms")); + enable_drag_files_to_timeline->setText(tr("Enable Drag Files to Timeline")); + autoscale_by_default->setText(tr("Auto-Scale By Default")); + enable_seek_to_import->setText(tr("Enable Seek to Import")); + enable_audio_scrubbing->setText(tr("Audio Scrubbing")); + enable_drop_on_media_to_replace->setText(tr("Enable Drop on Media to Replace")); + enable_hover_focus->setText(tr("Enable Hover Focus")); + set_name_and_marker->setText(tr("Ask For Name When Setting Marker")); + + no_autoscroll->setText(tr("No Auto-Scroll")); + page_autoscroll->setText(tr("Page Auto-Scroll")); + smooth_autoscroll->setText(tr("Smooth Auto-Scroll")); + + preferences_action_->setText(tr("Preferences")); + clear_undo_action_->setText(tr("Clear Undo")); + + help_menu->setTitle(tr("&Help")); + + action_search_->setText(tr("A&ction Search")); + debug_log_->setText(tr("Debug Log")); + about_action_->setText(tr("&About...")); + + panel_sequence_viewer->set_panel_name(QCoreApplication::translate("Viewer", "Sequence Viewer")); + panel_footage_viewer->set_panel_name(QCoreApplication::translate("Viewer", "Media Viewer")); + + // the recommended changeEvent() and event() methods of propagating language change messages provided mixed results + // (i.e. different panels failed to translate in different sessions), so we translate them manually here + for (int i=0;iRetranslate(); + } + olive::MenuHelper.Retranslate(); + + updateTitle(); +} + void MainWindow::updateTitle() { setWindowTitle(QString("%1 - %2[*]").arg(olive::AppName, (olive::ActiveProjectFilename.isEmpty()) ? @@ -807,6 +888,15 @@ void MainWindow::paintEvent(QPaintEvent *event) { } } +bool MainWindow::event(QEvent *e) +{ + if (e->type() == QEvent::LanguageChange) { + Retranslate(); + return true; + } + return QMainWindow::event(e); +} + void MainWindow::reset_layout() { setup_layout(true); } @@ -852,7 +942,7 @@ void MainWindow::windowMenu_About_To_Be_Shown() { } void MainWindow::playbackMenu_About_To_Be_Shown() { - olive::MenuHelper.set_bool_action_checked(loop_action); + olive::MenuHelper.set_bool_action_checked(loop_action_); } void MainWindow::viewMenu_About_To_Be_Shown() { diff --git a/mainwindow.h b/mainwindow.h index 92f88ea51..352d1865f 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -109,6 +109,8 @@ protected: */ virtual void paintEvent(QPaintEvent *) override; + virtual bool event(QEvent* e) override; + private slots: /** * @brief Maximizes the currently hovered panel. @@ -209,14 +211,40 @@ private: void Retranslate(); - // menu bar menus - QMenu* window_menu; - // file menu actions + QMenu* file_menu; + QMenu* new_menu; + QAction* open_project; QMenu* open_recent; + QAction* open_action; QAction* clear_open_recent_action; + QAction* save_project; + QAction* save_project_as; + QAction* import_action; + QAction* export_action; + QAction* exit_action; + + // edit menu actions + QMenu* edit_menu; + QAction* undo_action; + QAction* redo_action; + QAction* select_all_action; + QAction* deselect_all_action; + QAction* ripple_to_in_point_; + QAction* ripple_to_out_point_; + QAction* edit_to_in_point_; + QAction* edit_to_out_point_; + QAction* delete_inout_point_; + QAction* ripple_delete_inout_point_; + QAction* setedit_marker_; + // view menu actions + QMenu* view_menu; + QAction* zoom_in_; + QAction* zoom_out_; + QAction* increase_track_height_; + QAction* decrease_track_height_; QAction* track_lines; QAction* frames_action; QAction* drop_frame_action; @@ -225,15 +253,54 @@ private: QAction* no_autoscroll; QAction* page_autoscroll; QAction* smooth_autoscroll; + + QMenu* title_safe_area_menu; QAction* title_safe_off; QAction* title_safe_default; QAction* title_safe_43; QAction* title_safe_169; QAction* title_safe_custom; + QAction* full_screen; + QAction* full_screen_viewer_; QAction* show_all; - // tool menu actions + // playback menu + QMenu* playback_menu; + + QAction* go_to_start_; + QAction* previous_frame_; + QAction* playpause_; + QAction* play_in_to_out_; + QAction* next_frame_; + QAction* go_to_end_; + QAction* go_to_prev_cut_; + QAction* go_to_next_cut_; + QAction* go_to_in_point_; + QAction* go_to_out_point_; + QAction* shuttle_left_; + QAction* shuttle_stop_; + QAction* shuttle_right_; + QAction* loop_action_; + + // window menu + + QMenu* window_menu; + + QAction* window_project_action; + QAction* window_effectcontrols_action; + QAction* window_timeline_action; + QAction* window_graph_editor_action; + QAction* window_footageviewer_action; + QAction* window_sequenceviewer_action; + + QAction* maximize_panel_; + QAction* lock_panels_; + QAction* reset_default_layout_; + + // tools menu + QMenu* tools_menu; + QAction* pointer_tool_action; QAction* edit_tool_action; QAction* ripple_tool_action; @@ -256,12 +323,15 @@ private: QAction* enable_drop_on_media_to_replace; QAction* enable_hover_focus; QAction* set_name_and_marker; - QAction* loop_action; QAction* seek_also_selects; + QAction* preferences_action_; + QAction* clear_undo_action_; - // edit menu actions - QAction* undo_action; - QAction* redo_action; + // help menu + QMenu* help_menu; + QAction* action_search_; + QAction* debug_log_; + QAction* about_action_; // used to store the panel state when one panel is maximized QByteArray temp_panel_state; diff --git a/panels/effectcontrols.h b/panels/effectcontrols.h index a37ebbf59..fb5c16014 100644 --- a/panels/effectcontrols.h +++ b/panels/effectcontrols.h @@ -76,6 +76,8 @@ public: QMutex effects_loaded; void add_effect_paste_action(QMenu* menu); + + virtual void Retranslate() override; public slots: void cut(); void copy(bool del = false); @@ -96,7 +98,6 @@ private slots: void effects_area_context_menu(); protected: virtual void resizeEvent(QResizeEvent *event) override; - virtual void Retranslate() override; private: void show_effect_menu(int type, int subtype); void load_effects(); diff --git a/panels/grapheditor.h b/panels/grapheditor.h index 5a6eea0a2..826c7bcac 100644 --- a/panels/grapheditor.h +++ b/panels/grapheditor.h @@ -43,8 +43,9 @@ public: bool view_is_under_mouse(); void delete_selected_keys(); void select_all(); -protected: + virtual void Retranslate() override; +protected: private: GraphView* view; TimelineHeader* header; diff --git a/panels/panels.cpp b/panels/panels.cpp index 05e9561e3..08f1c3427 100644 --- a/panels/panels.cpp +++ b/panels/panels.cpp @@ -172,11 +172,9 @@ QDockWidget *get_focused_panel(bool force_hover) { void alloc_panels(QWidget* parent) { // TODO maybe replace these with non-pointers later on? panel_sequence_viewer = new Viewer(parent); - panel_sequence_viewer->setObjectName("seq_viewer"); - panel_sequence_viewer->set_panel_name(QCoreApplication::translate("Viewer", "Sequence Viewer")); + panel_sequence_viewer->setObjectName("seq_viewer"); panel_footage_viewer = new Viewer(parent); panel_footage_viewer->setObjectName("footage_viewer"); - panel_footage_viewer->set_panel_name(QCoreApplication::translate("Viewer", "Media Viewer")); panel_project = new Project(parent); panel_project->setObjectName("proj_root"); panel_effect_controls = new EffectControls(parent); diff --git a/panels/project.h b/panels/project.h index 69fdcee72..db9aeb46b 100644 --- a/panels/project.h +++ b/panels/project.h @@ -90,8 +90,9 @@ public: void get_all_media_from_table(QList &items, QList &list, int type = -1); QWidget* toolbar_widget; -protected: + virtual void Retranslate() override; +protected: public slots: void import_dialog(); void delete_selected_media(); diff --git a/panels/timeline.h b/panels/timeline.h index 141658298..5a8a7a1bb 100644 --- a/panels/timeline.h +++ b/panels/timeline.h @@ -208,9 +208,9 @@ public: bool can_ripple_empty_space(long frame, int track); + virtual void Retranslate() override; protected: virtual void resizeEvent(QResizeEvent *event) override; - virtual void Retranslate() override; public slots: void paste(bool insert = false); void repaint_timeline(); diff --git a/panels/viewer.cpp b/panels/viewer.cpp index a6bd6ecf6..5a5203cb2 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -98,7 +98,8 @@ Viewer::Viewer(QWidget *parent) : Viewer::~Viewer() {} void Viewer::Retranslate() { - update_window_title(); + /// Viewer panels are retranslated through the MainWindow to differentiate Media and Sequence Viewers +// update_window_title(); } bool Viewer::is_focused() { @@ -225,7 +226,7 @@ QString frame_to_timecode(long f, int view, double frame_rate) { int framesPerMinute = (qRound(frame_rate)*60)- dropFrames; //Number of frames per minute is the round of the framerate * 60 minus the number of dropped frames //If framenumber is greater than 24 hrs, next operation will rollover clock - f = f % framesPer24Hours; //% is the modulus operator, which returns a remainder. a % b = the remainder of a/b + f = f % framesPer24Hours; // % is the modulus operator, which returns a remainder. a % b = the remainder of a/b d = f / framesPer10Minutes; // \ means integer division, which is a/b without a remainder. Some languages you could use floor(a/b) m = f % framesPer10Minutes; diff --git a/panels/viewer.h b/panels/viewer.h index 15444377a..870df7f4d 100644 --- a/panels/viewer.h +++ b/panels/viewer.h @@ -98,10 +98,9 @@ public: TimelineHeader* headers; - void resizeEvent(QResizeEvent *event); - -protected: virtual void Retranslate() override; +protected: + virtual void resizeEvent(QResizeEvent *event) override; public slots: void play_wake(); diff --git a/rendering/cacher.cpp.autosave b/rendering/cacher.cpp.autosave deleted file mode 100644 index 09c7c96e1..000000000 --- a/rendering/cacher.cpp.autosave +++ /dev/null @@ -1,1269 +0,0 @@ -/*** - - Olive - Non-Linear Video Editor - Copyright (C) 2019 Olive Team - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -***/ - -#include "cacher.h" - -#include -#include -#include -#include - -#include "project/projectelements.h" -#include "rendering/audio.h" -#include "rendering/renderfunctions.h" -#include "panels/panels.h" -#include "io/config.h" -#include "debug.h" - -// Enable verbose audio messages - good for debugging reversed audio -//#define AUDIOWARNINGS - -const AVPixelFormat kDestPixFmt = AV_PIX_FMT_RGBA; -const AVSampleFormat kDestSampleFmt = AV_SAMPLE_FMT_S16; - -double bytes_to_seconds(int nb_bytes, int nb_channels, int sample_rate) { - return (double(nb_bytes >> 1) / nb_channels / sample_rate); -} - -void apply_audio_effects(ClipPtr clip, double timecode_start, AVFrame* frame, int nb_bytes, QVector nests) { - // perform all audio effects - double timecode_end; - timecode_end = timecode_start + bytes_to_seconds(nb_bytes, frame->channels, frame->sample_rate); - - for (int j=0;jeffects.size();j++) { - EffectPtr e = clip->effects.at(j); - if (e->is_enabled()) e->process_audio(timecode_start, timecode_end, frame->data[0], nb_bytes, 2); - } - if (clip->opening_transition != nullptr) { - if (clip->media() != nullptr && clip->media()->get_type() == MEDIA_TYPE_FOOTAGE) { - double transition_start = (clip->clip_in(true) / clip->sequence->frame_rate); - double transition_end = (clip->clip_in(true) + clip->opening_transition->get_length()) / clip->sequence->frame_rate; - if (timecode_end < transition_end) { - double adjustment = transition_end - transition_start; - double adjusted_range_start = (timecode_start - transition_start) / adjustment; - double adjusted_range_end = (timecode_end - transition_start) / adjustment; - clip->opening_transition->process_audio(adjusted_range_start, adjusted_range_end, frame->data[0], nb_bytes, kTransitionOpening); - } - } - } - if (clip->closing_transition != nullptr) { - if (clip->media() != nullptr && clip->media()->get_type() == MEDIA_TYPE_FOOTAGE) { - long length_with_transitions = clip->timeline_out(true) - clip->timeline_in(true); - double transition_start = (clip->clip_in(true) + length_with_transitions - clip->closing_transition->get_length()) / clip->sequence->frame_rate; - double transition_end = (clip->clip_in(true) + length_with_transitions) / clip->sequence->frame_rate; - if (timecode_start > transition_start) { - double adjustment = transition_end - transition_start; - double adjusted_range_start = (timecode_start - transition_start) / adjustment; - double adjusted_range_end = (timecode_end - transition_start) / adjustment; - clip->closing_transition->process_audio(adjusted_range_start, adjusted_range_end, frame->data[0], nb_bytes, kTransitionClosing); - } - } - } - - if (!nests.isEmpty()) { - ClipPtr next_nest = nests.last(); - nests.removeLast(); - apply_audio_effects(next_nest, - timecode_start + (double(clip->timeline_in(true)-clip->clip_in(true))/clip->sequence->frame_rate), - frame, - nb_bytes, - nests); - } -} - -#define AUDIO_BUFFER_PADDING 2048 -void Cacher::CacheAudioWorker() { - // main thread waits until cacher starts fully, wake it up here - WakeMainThread(); - - bool audio_just_reset = false; - - // for audio clips, something may have triggered an audio reset (common if the user seeked) - if (audio_reset_) { - Reset(); - audio_reset_ = false; - audio_just_reset = true; - } - - long timeline_in = clip->timeline_in(true); - long timeline_out = clip->timeline_out(true); - long target_frame = audio_target_frame; - - bool temp_reverse = (playback_speed_ < 0); - bool reverse_audio = (clip->reversed() != temp_reverse); - - long frame_skip = 0; - double last_fr = clip->sequence->frame_rate; - if (!nests_.isEmpty()) { - for (int i=nests_.size()-1;i>=0;i--) { - timeline_in = rescale_frame_number(timeline_in, last_fr, nests_.at(i)->sequence->frame_rate) + nests_.at(i)->timeline_in(true) - nests_.at(i)->clip_in(true); - timeline_out = rescale_frame_number(timeline_out, last_fr, nests_.at(i)->sequence->frame_rate) + nests_.at(i)->timeline_in(true) - nests_.at(i)->clip_in(true); - target_frame = rescale_frame_number(target_frame, last_fr, nests_.at(i)->sequence->frame_rate) + nests_.at(i)->timeline_in(true) - nests_.at(i)->clip_in(true); - - timeline_out = qMin(timeline_out, nests_.at(i)->timeline_out(true)); - - frame_skip = rescale_frame_number(frame_skip, last_fr, nests_.at(i)->sequence->frame_rate); - - long validator = nests_.at(i)->timeline_in(true) - timeline_in; - if (validator > 0) { - frame_skip += validator; - //timeline_in = nests_.at(i)->timeline_in(true); - } - - last_fr = nests_.at(i)->sequence->frame_rate; - } - } - - if (temp_reverse) { - long seq_end = olive::ActiveSequence->getEndFrame(); - timeline_in = seq_end - timeline_in; - timeline_out = seq_end - timeline_out; - target_frame = seq_end - target_frame; - - long temp = timeline_in; - timeline_in = timeline_out; - timeline_out = temp; - } - - while (true) { - AVFrame* frame; - int nb_bytes = INT_MAX; - - if (clip->media() == nullptr) { - frame = frame_; - nb_bytes = frame->nb_samples * av_get_bytes_per_sample(static_cast(frame->format)) * frame->channels; - while ((frame_sample_index_ == -1 || frame_sample_index_ >= nb_bytes) && nb_bytes > 0) { - // create "new frame" - memset(frame_->data[0], 0, nb_bytes); - apply_audio_effects(clip, bytes_to_seconds(frame->pts, frame->channels, frame->sample_rate), frame, nb_bytes, nests_); - frame_->pts += nb_bytes; - frame_sample_index_ = 0; - if (audio_buffer_write == 0) { - audio_buffer_write = get_buffer_offset_from_frame(last_fr, qMax(timeline_in, target_frame)); - } - int offset = audio_ibuffer_read - audio_buffer_write; - if (offset > 0) { - audio_buffer_write += offset; - frame_sample_index_ += offset; - } - } - } else if (clip->media()->get_type() == MEDIA_TYPE_FOOTAGE) { - double timebase = av_q2d(stream->time_base); - - frame = queue.at(0); - - // retrieve frame - bool new_frame = false; - while ((frame_sample_index_ == -1 || frame_sample_index_ >= nb_bytes) && nb_bytes > 0) { - // no more audio left in frame, get a new one - if (!reached_end) { - int loop = 0; - - if (reverse_audio && !audio_just_reset) { - avcodec_flush_buffers(codecCtx); - reached_end = false; - int64_t backtrack_seek = qMax(reverse_target_ - static_cast(av_q2d(av_inv_q(stream->time_base))), static_cast(0)); - av_seek_frame(formatCtx, stream->index, backtrack_seek, AVSEEK_FLAG_BACKWARD); -#ifdef AUDIOWARNINGS - if (backtrack_seek == 0) { - dout << "backtracked to 0"; - } -#endif - } - - do { - av_frame_unref(frame); - - int ret; - - while ((ret = av_buffersink_get_frame(buffersink_ctx, frame)) == AVERROR(EAGAIN)) { - ret = RetrieveFrameFromDecoder(frame_); - if (ret >= 0) { - if ((ret = av_buffersrc_add_frame_flags(buffersrc_ctx, frame_, AV_BUFFERSRC_FLAG_KEEP_REF)) < 0) { - qCritical() << "Could not feed filtergraph -" << ret; - break; - } - } else { - if (ret == AVERROR_EOF) { -#ifdef AUDIOWARNINGS - dout << "reached EOF while reading"; -#endif - // TODO revise usage of reached_end in audio - if (!reverse_audio) { - reached_end = true; - } else { - } - } else { - qWarning() << "Raw audio frame data could not be retrieved." << ret; - reached_end = true; - } - break; - } - } - - if (ret < 0) { - if (ret != AVERROR_EOF) { - qCritical() << "Could not pull from filtergraph"; - reached_end = true; - break; - } else { -#ifdef AUDIOWARNINGS - dout << "reached EOF while pulling from filtergraph"; -#endif - if (!reverse_audio) break; - } - } - - if (reverse_audio) { - if (loop > 1) { - AVFrame* rev_frame = queue.at(1); - if (ret != AVERROR_EOF) { - if (loop == 2) { -#ifdef AUDIOWARNINGS - dout << "starting rev_frame"; -#endif - rev_frame->nb_samples = 0; - rev_frame->pts = frame_->pkt_pts; - } - int offset = rev_frame->nb_samples * av_get_bytes_per_sample(static_cast(rev_frame->format)) * rev_frame->channels; -#ifdef AUDIOWARNINGS - dout << "offset 1:" << offset; - dout << "retrieved samples:" << frame->nb_samples << "size:" << (frame->nb_samples * av_get_bytes_per_sample(static_cast(frame->format)) * frame->channels); -#endif - memcpy( - rev_frame->data[0]+offset, - frame->data[0], - (frame->nb_samples * av_get_bytes_per_sample(static_cast(frame->format)) * frame->channels) - ); -#ifdef AUDIOWARNINGS - dout << "pts:" << frame_->pts << "dur:" << frame_->pkt_duration << "rev_target:" << reverse_target << "offset:" << offset << "limit:" << rev_frame->linesize[0]; -#endif - } - - rev_frame->nb_samples += frame->nb_samples; - - if ((frame_->pts >= reverse_target_) || (ret == AVERROR_EOF)) { - /* -#ifdef AUDIOWARNINGS - dout << "time for the end of rev cache" << rev_frame->nb_samples << clip->rev_target << frame_->pts << frame_->pkt_duration << frame_->nb_samples; - dout << "diff:" << (frame_->pkt_pts + frame_->pkt_duration) - clip->rev_target; -#endif - int cutoff = qRound64((((frame_->pkt_pts + frame_->pkt_duration) - reverse_target) * timebase) * audio_output->format().sampleRate()); - if (cutoff > 0) { -#ifdef AUDIOWARNINGS - dout << "cut off" << cutoff << "samples (rate:" << audio_output->format().sampleRate() << ")"; -#endif - rev_frame->nb_samples -= cutoff; - } -*/ - -#ifdef AUDIOWARNINGS - dout << "pre cutoff deets::: rev_frame.pts:" << rev_frame->pts << "rev_frame.nb_samples" << rev_frame->nb_samples << "rev_target:" << reverse_target; -#endif - double playback_speed_ = clip->speed().value * clip->media()->to_footage()->speed; - rev_frame->nb_samples = qRound64(double(reverse_target_ - rev_frame->pts) * timebase * (current_audio_freq() / playback_speed_)); -#ifdef AUDIOWARNINGS - dout << "post cutoff deets::" << rev_frame->nb_samples; -#endif - - int frame_size = rev_frame->nb_samples * rev_frame->channels * av_get_bytes_per_sample(static_cast(rev_frame->format)); - int half_frame_size = frame_size >> 1; - - int sample_size = rev_frame->channels*av_get_bytes_per_sample(static_cast(rev_frame->format)); - char* temp_chars = new char[sample_size]; - for (int i=0;idata[0][i], sample_size); - - memcpy(&rev_frame->data[0][i], &rev_frame->data[0][frame_size-i-sample_size], sample_size); - - memcpy(&rev_frame->data[0][frame_size-i-sample_size], temp_chars, sample_size); - } - delete [] temp_chars; - - reverse_target_ = rev_frame->pts; - frame = rev_frame; - break; - } - } - - loop++; - -#ifdef AUDIOWARNINGS - dout << "loop" << loop; -#endif - } else { - frame->pts = frame_->pts; - break; - } - } while (true); - } else { - // if there is no more data in the file, we flush the remainder out of swresample - break; - } - - new_frame = true; - - if (frame_sample_index_ < 0) { - frame_sample_index_ = 0; - } else { - frame_sample_index_ -= nb_bytes; - } - - nb_bytes = frame->nb_samples * av_get_bytes_per_sample(static_cast(frame->format)) * frame->channels; - - if (audio_just_reset) { - // get precise sample offset for the elected clip_in from this audio frame - double target_sts = playhead_to_clip_seconds(clip, audio_target_frame); - double frame_sts = ((frame->pts - stream->start_time) * timebase); - int nb_samples = qRound64((target_sts - frame_sts)*current_audio_freq()); - frame_sample_index_ = nb_samples * 4; -#ifdef AUDIOWARNINGS - dout << "fsts:" << frame_sts << "tsts:" << target_sts << "nbs:" << nb_samples << "nbb:" << nb_bytes << "rev_targetToSec:" << (reverse_target * timebase); - dout << "fsi-calc:" << frame_sample_index; -#endif - if (reverse_audio) frame_sample_index_ = nb_bytes - frame_sample_index_; - audio_just_reset = false; - } - -#ifdef AUDIOWARNINGS - dout << "fsi-post-post:" << frame_sample_index; -#endif - if (audio_buffer_write == 0) { - audio_buffer_write = get_buffer_offset_from_frame(last_fr, qMax(timeline_in, target_frame)); - - if (frame_skip > 0) { - int target = get_buffer_offset_from_frame(last_fr, qMax(timeline_in + frame_skip, target_frame)); - frame_sample_index_ += (target - audio_buffer_write); - audio_buffer_write = target; - } - } - - int offset = audio_ibuffer_read - audio_buffer_write; - if (offset > 0) { - audio_buffer_write += offset; - frame_sample_index_ += offset; - } - - // try to correct negative fsi - if (frame_sample_index_ < 0) { - audio_buffer_write -= frame_sample_index_; - frame_sample_index_ = 0; - } - } - - if (reverse_audio) frame = queue.at(1); - -#ifdef AUDIOWARNINGS - dout << "j" << frame_sample_index << nb_bytes; -#endif - - // apply any audio effects to the data - if (nb_bytes == INT_MAX) nb_bytes = frame->nb_samples * av_get_bytes_per_sample(static_cast(frame->format)) * frame->channels; - if (new_frame) { - apply_audio_effects(clip, bytes_to_seconds(audio_buffer_write, 2, current_audio_freq()) + audio_ibuffer_timecode + ((double)clip->clip_in(true)/clip->sequence->frame_rate) - ((double)timeline_in/last_fr), frame, nb_bytes, nests_); - } - } else { - // shouldn't ever get here - qCritical() << "Tried to cache a non-footage/tone clip"; - return; - } - - // mix audio into internal buffer - if (frame->nb_samples == 0) { - break; - } else { - qint64 buffer_timeline_out = get_buffer_offset_from_frame(clip->sequence->frame_rate, timeline_out); - - audio_write_lock.lock(); - - int sample_skip = 4*qMax(0, qAbs(playback_speed_)-1); - int sample_byte_size = av_get_bytes_per_sample(static_cast(frame->format)); - - while (frame_sample_index_ < nb_bytes - && audio_buffer_write < audio_ibuffer_read+(audio_ibuffer_size>>1) - && audio_buffer_write < buffer_timeline_out) { - for (int i=0;ichannels;i++) { - int upper_byte_index = (audio_buffer_write+1)%audio_ibuffer_size; - int lower_byte_index = (audio_buffer_write)%audio_ibuffer_size; - qint16 old_sample = static_cast((audio_ibuffer[upper_byte_index] & 0xFF) << 8 | (audio_ibuffer[lower_byte_index] & 0xFF)); - qint16 new_sample = static_cast((frame->data[0][frame_sample_index_+1] & 0xFF) << 8 | (frame->data[0][frame_sample_index_] & 0xFF)); - qint16 mixed_sample = mix_audio_sample(old_sample, new_sample); - - audio_ibuffer[upper_byte_index] = quint8((mixed_sample >> 8) & 0xFF); - audio_ibuffer[lower_byte_index] = quint8(mixed_sample & 0xFF); - - audio_buffer_write+=sample_byte_size; - frame_sample_index_+=sample_byte_size; - } - - frame_sample_index_ += sample_skip; - - if (audio_reset_) break; - } - -#ifdef AUDIOWARNINGS - if (audio_buffer_write >= buffer_timeline_out) dout << "timeline out at fsi" << frame_sample_index << "of frame ts" << frame_->pts; -#endif - - audio_write_lock.unlock(); - - if (audio_reset_) return; - - if (scrubbing_) { - if (audio_thread != nullptr) audio_thread->notifyReceiver(); - } - - if (frame_sample_index_ >= nb_bytes) { - frame_sample_index_ = -1; - } else { - // assume we have no more data to send - break; - } - - // dout << "ended" << frame_sample_index << nb_bytes; - } - if (reached_end) { - frame->nb_samples = 0; - } - if (scrubbing_) { - break; - } - } - - QMetaObject::invokeMethod(panel_footage_viewer, "play_wake", Qt::QueuedConnection); - QMetaObject::invokeMethod(panel_sequence_viewer, "play_wake", Qt::QueuedConnection); -} - -void Cacher::CacheVideoWorker() { - - // is this media a still image? - if (clip->media_stream()->infinite_length) { - - // for efficiency, we do slightly different things for a still image - - // if we already queued a frame, we don't actually need to cache anything, so we only retrieve a frame if not - if (queue.size() == 0) { - - // retrieve a single frame - - // main thread waits until cacher starts fully, wake it up here - WakeMainThread(); - - AVFrame* still_image_frame; - - if (RetrieveFrameAndProcess(&still_image_frame) >= 0) { - - queue.lock(); - queue.append(still_image_frame); - queue.unlock(); - - SetRetrievedFrame(still_image_frame); - } - - } - - } else { - // this media is not a still image and will require more complex caching - - // main thread waits until cacher starts fully, wake it up here - WakeMainThread(); - - // get the timestamp we want in terms of the media's timebase - int64_t target_pts = seconds_to_timestamp(clip, playhead_to_clip_seconds(clip, playhead_)); - - // get the value of one second in terms of the media's timebase - int64_t second_pts = seconds_to_timestamp(clip, 1); // FIXME: possibly magic number? - - // check which range of frames we have in the queue - int64_t earliest_pts = INT64_MAX; - int64_t latest_pts = INT64_MIN; - int frames_greater_than_target = 0; - - for (int i=0;ipts); - latest_pts = qMax(latest_pts, queue.at(i)->pts); - - // count upcoming frames - if (queue.at(i)->pts > target_pts) { - frames_greater_than_target++; - } - } - - // check if the frame is within this queue or if we'll have to seek elsewhere to get it - // (we check for one second of time after latest_pts, because if it's within that range it'll likely be faster to - // play up to that frame than seek to it) - if (target_pts < earliest_pts || target_pts > latest_pts + second_pts || queue.size() == 0) { - // we need to seek to retrieve this frame - - avcodec_flush_buffers(codecCtx); - av_seek_frame(formatCtx, clip->media_stream_index(), target_pts, AVSEEK_FLAG_BACKWARD); - - // also we assume none of the frames in the queue are usable - queue.lock(); - queue.clear(); - queue.unlock(); - - // reset upcoming frame count and latest pts for later calculations - frames_greater_than_target = 0; - latest_pts = INT64_MIN; - } - - // get values on old frames to remove from the queue - - // for FRAME_QUEUE_TYPE_SECONDS, this is used to store the maximum timestamp - // for FRAME_QUEUE_TYPE_FRAMES, this is used to store the maximum number of frames that can be added - int64_t minimum_ts; - - if (olive::CurrentConfig.previous_queue_type == olive::FRAME_QUEUE_TYPE_FRAMES) { - // get the maximum number of previous frames that can be in the queue - minimum_ts = qCeil(olive::CurrentConfig.previous_queue_size); - } else { - // get the minimum frame timestamp that can be added to the queue - minimum_ts = target_pts - seconds_to_timestamp(clip, olive::CurrentConfig.previous_queue_size); - } - - // check if we can add more frames to this queue or not - - // for FRAME_QUEUE_TYPE_SECONDS, this is used to store the maximum timestamp - // for FRAME_QUEUE_TYPE_FRAMES, this is used to store the maximum number of frames that can be added - int64_t maximum_ts; - - bool start_loop = true; - - if (olive::CurrentConfig.upcoming_queue_type == olive::FRAME_QUEUE_TYPE_FRAMES) { - maximum_ts = qCeil(olive::CurrentConfig.upcoming_queue_size); - - // if we already have the maximum number of upcoming frames, don't bother running the below loop at all - if (frames_greater_than_target >= maximum_ts) { - start_loop = false; - } - } else { - // get the maximum frame timestamp that can be added to the queue - maximum_ts = target_pts + seconds_to_timestamp(clip, olive::CurrentConfig.upcoming_queue_size); - - // if the latest frame is already past the maximum queue seconds - if (latest_pts > maximum_ts) { - start_loop = false; - } - } - - if (start_loop) { - - interrupt_ = false; - do { - AVFrame* decoded_frame; - -// qint64 time = QDateTime::currentMSecsSinceEpoch(); - int retrieve_code = RetrieveFrameAndProcess(&decoded_frame); - //qDebug() << "decode took:" << (QDateTime::currentMSecsSinceEpoch() - time); - - // for some reason we were unable to retrieve a frame, likely a decoder error so we report it - // again an EOF, is not really an "error", and we can continue execution if we encounter it - if (retrieve_code < 0 && retrieve_code != AVERROR_EOF) { - - qCritical() << "Failed to retrieve frame from buffersink." << retrieve_code; - - } else if (decoded_frame->pts != AV_NOPTS_VALUE) { - - // check if this frame exceeds the minimum timestamp - if (olive::CurrentConfig.previous_queue_type == olive::FRAME_QUEUE_TYPE_SECONDS - && decoded_frame->pts < minimum_ts) { - - // if so, we don't need it - av_frame_free(&decoded_frame); - - } else { - - if (retrieved_frame == nullptr) { - if (decoded_frame->pts == target_pts) { - SetRetrievedFrame(decoded_frame); - } else if (decoded_frame->pts > target_pts - && queue.size() > 0) { - SetRetrievedFrame(queue.last()); - } - } - - // add the frame to the queue - queue.lock(); - queue.append(decoded_frame); - queue.unlock(); - - // check the amount of previous frames in the queue by using the current queue size for if we need to - // remove any old entries (assumes the queue is chronological) - if (olive::CurrentConfig.previous_queue_type == olive::FRAME_QUEUE_TYPE_FRAMES) { - - int previous_frame_count = 0; - - if (decoded_frame->pts < target_pts) { - // if this frame is before the target frame, make sure we don't add too many of them - previous_frame_count = queue.size(); - } else { - // if this frame is after the target frame, clean up any previous frames before it - // TODO is there a faster way to do this? - - for (int i=0;ipts > target_pts) { - break; - } else { - previous_frame_count++; - } - } - - } - - // remove frames while the amount of previous frames exceeds the maximum - while (previous_frame_count > minimum_ts) { - queue.lock(); - queue.removeFirst(); - queue.unlock(); - previous_frame_count--; - } - - } - - // check if the queue is full according to olive::CurrentConfig - if (olive::CurrentConfig.upcoming_queue_type == olive::FRAME_QUEUE_TYPE_FRAMES) { - - // if this frame is later than the target, it's an "upcoming" frame - if (decoded_frame->pts > target_pts) { - - // we started a count of upcoming frames above, we can continue it here - frames_greater_than_target++; - - // compare upcoming frame count with maximum upcoming frames (maximum_ts) - if (frames_greater_than_target >= maximum_ts) { - break; - } - } - - } else if (decoded_frame->pts > maximum_ts) { // for `upcoming_queue_type == olive::FRAME_QUEUE_TYPE_SECONDS` - break; - } - - } - - - - } else { - - // if a frame has no timestamp (pts == AV_NOPTS_VALUE), we assume it's an invalid frame and don't use it - - qWarning() << clip->name() << "frame had no PTS value"; - av_frame_free(&decoded_frame); - SetRetrievedFrame(nullptr); - break; - - } - } while (!interrupt_); - - } - - } -} - -void Cacher::Reset() { - // if we seek to a whole other place in the timeline, we'll need to reset the cache with new values - if (clip->media() == nullptr) { - if (clip->track() >= 0) { - // a null-media audio clip is usually an auto-generated sound clip such as Tone or Noise - reached_end = false; - audio_target_frame = playhead_; - frame_sample_index_ = -1; - frame_->pts = 0; - } - } else { - - const FootageStream* ms = clip->media_stream(); - if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { - // flush ffmpeg codecs - avcodec_flush_buffers(codecCtx); - reached_end = false; - - // seek (target_frame represents timeline timecode in frames, not clip timecode) - - int64_t timestamp = qRound64(playhead_to_clip_seconds(clip, playhead_) / av_q2d(stream->time_base)); - - bool temp_reverse = (playback_speed_ < 0); - if (clip->reversed() != temp_reverse) { - reverse_target_ = timestamp; - timestamp -= av_q2d(av_inv_q(stream->time_base)); -#ifdef AUDIOWARNINGS - dout << "seeking to" << timestamp << "(originally" << reverse_target << ")"; - } else { - dout << "reset called; seeking to" << timestamp; -#endif - } - av_seek_frame(formatCtx, ms->file_index, timestamp, AVSEEK_FLAG_BACKWARD); - audio_target_frame = playhead_; - frame_sample_index_ = -1; - } - } -} - -void Cacher::SetRetrievedFrame(AVFrame *f) -{ - if (retrieved_frame == nullptr) { - retrieve_lock_.lock(); - retrieved_frame = f; - retrieve_wait_.wakeAll(); - retrieve_lock_.unlock(); - } -} - -void Cacher::WakeMainThread() -{ - main_thread_lock_.lock(); - main_thread_wait_.wakeAll(); - main_thread_lock_.unlock(); -} - -Cacher::Cacher(ClipPtr c) : clip(c) {} - -void Cacher::OpenWorker() { - qint64 time_start = QDateTime::currentMSecsSinceEpoch(); - - // set some defaults for the audio cacher - if (clip->track() >= 0) { - audio_reset_ = false; - frame_sample_index_ = -1; - audio_buffer_write = 0; - } - reached_end = false; - - if (clip->media() == nullptr) { - if (clip->track() >= 0) { - frame_ = av_frame_alloc(); - frame_->format = kDestSampleFmt; - frame_->channel_layout = clip->sequence->audio_layout; - frame_->channels = av_get_channel_layout_nb_channels(frame_->channel_layout); - frame_->sample_rate = current_audio_freq(); - frame_->nb_samples = 2048; - av_frame_make_writable(frame_); - if (av_frame_get_buffer(frame_, 0)) { - qCritical() << "Could not allocate buffer for tone clip"; - } - audio_reset_ = true; - } - } else if (clip->media()->get_type() == MEDIA_TYPE_FOOTAGE) { - // opens file resource for FFmpeg and prepares Clip struct for playback - FootagePtr m = clip->media()->to_footage(); - - // byte array for retriving raw bytes from QString URL - QByteArray ba; - - // do we have a proxy? - if (m->proxy - && !m->proxy_path.isEmpty() - && QFileInfo::exists(m->proxy_path)) { - ba = m->proxy_path.toUtf8(); - } else { - ba = m->url.toUtf8(); - } - - const char* filename = ba.constData(); - const FootageStream* ms = clip->media_stream(); - - formatCtx = nullptr; - int errCode = avformat_open_input( - &formatCtx, - filename, - nullptr, - nullptr - ); - if (errCode != 0) { - char err[1024]; - av_strerror(errCode, err, 1024); - qCritical() << "Could not open" << filename << "-" << err; - return; - } - - errCode = avformat_find_stream_info(formatCtx, nullptr); - if (errCode < 0) { - char err[1024]; - av_strerror(errCode, err, 1024); - qCritical() << "Could not open" << filename << "-" << err; - return; - } - - av_dump_format(formatCtx, 0, filename, 0); - - stream = formatCtx->streams[ms->file_index]; - codec = avcodec_find_decoder(stream->codecpar->codec_id); - codecCtx = avcodec_alloc_context3(codec); - avcodec_parameters_to_context(codecCtx, stream->codecpar); - - opts = nullptr; - - // enable multithreading on decoding - av_dict_set(&opts, "threads", "auto", 0); - - // enable extra optimization code on h264 (not even sure if they help) - if (stream->codecpar->codec_id == AV_CODEC_ID_H264) { - av_dict_set(&opts, "tune", "fastdecode", 0); - av_dict_set(&opts, "tune", "zerolatency", 0); - } - - // Open codec - if (avcodec_open2(codecCtx, codec, &opts) < 0) { - qCritical() << "Could not open codec"; - } - - // allocate filtergraph - filter_graph = avfilter_graph_alloc(); - if (filter_graph == nullptr) { - qCritical() << "Could not create filtergraph"; - } - char filter_args[512]; - - if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { - snprintf(filter_args, sizeof(filter_args), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", - stream->codecpar->width, - stream->codecpar->height, - stream->codecpar->format, - stream->time_base.num, - stream->time_base.den, - stream->codecpar->sample_aspect_ratio.num, - stream->codecpar->sample_aspect_ratio.den - ); - - avfilter_graph_create_filter(&buffersrc_ctx, avfilter_get_by_name("buffer"), "in", filter_args, nullptr, filter_graph); - avfilter_graph_create_filter(&buffersink_ctx, avfilter_get_by_name("buffersink"), "out", nullptr, nullptr, filter_graph); - - AVFilterContext* last_filter = buffersrc_ctx; - - char filter_args[100]; - - if (ms->video_interlacing != VIDEO_PROGRESSIVE) { - AVFilterContext* yadif_filter; - snprintf(filter_args, sizeof(filter_args), "mode=3:parity=%d", ((ms->video_interlacing == VIDEO_TOP_FIELD_FIRST) ? 0 : 1)); // there's a CUDA version if we start using nvdec/nvenc - avfilter_graph_create_filter(&yadif_filter, avfilter_get_by_name("yadif"), "yadif", filter_args, nullptr, filter_graph); - - avfilter_link(last_filter, 0, yadif_filter, 0); - last_filter = yadif_filter; - } - - const char* chosen_format = av_get_pix_fmt_name(kDestPixFmt); - snprintf(filter_args, sizeof(filter_args), "pix_fmts=%s", chosen_format); - - AVFilterContext* format_conv; - avfilter_graph_create_filter(&format_conv, avfilter_get_by_name("format"), "fmt", filter_args, nullptr, filter_graph); - avfilter_link(last_filter, 0, format_conv, 0); - - avfilter_link(format_conv, 0, buffersink_ctx, 0); - - avfilter_graph_config(filter_graph, nullptr); - - } else if (stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) { - if (codecCtx->channel_layout == 0) codecCtx->channel_layout = av_get_default_channel_layout(stream->codecpar->channels); - - // set up cache - queue.append(av_frame_alloc()); - // if (clip->reverse) { - if (true) { - AVFrame* reverse_frame = av_frame_alloc(); - - reverse_frame->format = kDestSampleFmt; - reverse_frame->nb_samples = current_audio_freq()*10; - reverse_frame->channel_layout = clip->sequence->audio_layout; - reverse_frame->channels = av_get_channel_layout_nb_channels(clip->sequence->audio_layout); - av_frame_get_buffer(reverse_frame, 0); - - queue.append(reverse_frame); - } - - snprintf(filter_args, sizeof(filter_args), "time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=0x%" PRIx64, - stream->time_base.num, - stream->time_base.den, - stream->codecpar->sample_rate, - av_get_sample_fmt_name(codecCtx->sample_fmt), - codecCtx->channel_layout - ); - - avfilter_graph_create_filter(&buffersrc_ctx, avfilter_get_by_name("abuffer"), "in", filter_args, nullptr, filter_graph); - avfilter_graph_create_filter(&buffersink_ctx, avfilter_get_by_name("abuffersink"), "out", nullptr, nullptr, filter_graph); - - enum AVSampleFormat sample_fmts[] = { kDestSampleFmt, static_cast(-1) }; - if (av_opt_set_int_list(buffersink_ctx, "sample_fmts", sample_fmts, -1, AV_OPT_SEARCH_CHILDREN) < 0) { - qCritical() << "Could not set output sample format"; - } - - int64_t channel_layouts[] = { AV_CH_LAYOUT_STEREO, static_cast(-1) }; - if (av_opt_set_int_list(buffersink_ctx, "channel_layouts", channel_layouts, -1, AV_OPT_SEARCH_CHILDREN) < 0) { - qCritical() << "Could not set output sample format"; - } - - int target_sample_rate = current_audio_freq(); - - double playback_speed_ = clip->speed().value * m->speed; - - if (qFuzzyCompare(playback_speed_, 1.0)) { - avfilter_link(buffersrc_ctx, 0, buffersink_ctx, 0); - } else if (clip->speed().maintain_audio_pitch) { - AVFilterContext* previous_filter = buffersrc_ctx; - AVFilterContext* last_filter = buffersrc_ctx; - - char speed_param[10]; - - double base = (playback_speed_ > 1.0) ? 2.0 : 0.5; - - double speedlog = log(playback_speed_) / log(base); - int whole2 = qFloor(speedlog); - speedlog -= whole2; - - if (whole2 > 0) { - snprintf(speed_param, sizeof(speed_param), "%f", base); - for (int i=0;itrack() << "(took" << (QDateTime::currentMSecsSinceEpoch() - time_start) << "ms)"; -} - -void Cacher::CacheWorker() { - if (clip->track() < 0) { - // clip is a video track, start caching video - CacheVideoWorker(); - } else { - // clip is audio - CacheAudioWorker(); - } -} - -void Cacher::CloseWorker() { - retrieved_frame = nullptr; - queue.lock(); - queue.clear(); - queue.unlock(); - - av_frame_free(&frame_); - - av_packet_free(&pkt); - - if (clip->media() != nullptr && clip->media()->get_type() == MEDIA_TYPE_FOOTAGE) { - avfilter_graph_free(&filter_graph); - - avcodec_close(codecCtx); - avcodec_free_context(&codecCtx); - - av_dict_free(&opts); - - // protection for get_timebase() - stream = nullptr; - - avformat_close_input(&formatCtx); - } - - clip->reset(); - - qInfo() << "Clip closed on track" << clip->track(); -} - -void Cacher::run() { - clip->cache_lock.lock(); - - OpenWorker(); - - clip->state_change_lock.unlock(); - - while (caching_) { - if (!queued_) { - wait_cond_.wait(&clip->cache_lock); - } - queued_ = false; - if (!caching_) { - break; - } else { - CacheWorker(); - } - } - - CloseWorker(); - - clip->state_change_lock.unlock(); - - clip->cache_lock.unlock(); -} - -void Cacher::Open() -{ - wait(); - - // set variable defaults for caching - caching_ = true; - queued_ = false; - - start((clip->track() < 0) ? QThread::HighPriority : QThread::TimeCriticalPriority); -} - -void Cacher::Cache(long playhead, bool scrubbing, QVector& nests, int playback_speed) -{ - if (clip->media_stream()->infinite_length && queue.size() > 0) { - retrieved_frame = queue.at(0); - return; - } - - playhead_ = playhead; - nests_ = nests; - scrubbing_ = scrubbing; - playback_speed_ = playback_speed; - queued_ = true; - - bool wait_for_cacher_to_respond = true; - - // see if we already have this frame - retrieve_lock_.lock(); - queue.lock(); - retrieved_frame = nullptr; - int64_t target_pts = seconds_to_timestamp(clip, playhead_to_clip_seconds(clip, playhead_)); - for (int i=0;ipts == target_pts) { - retrieved_frame = queue.at(i); -// qDebug() << "================> found frame at" << i; - wait_for_cacher_to_respond = false; - break; - } else if (i > 0 && queue.at(i-1)->pts < target_pts && queue.at(i)->pts > target_pts) { - retrieved_frame = queue.at(i-1); -// qDebug() << "================> found frame at" << i-1; - wait_for_cacher_to_respond = false; - break; - } - } - queue.unlock(); - retrieve_lock_.unlock(); - - if (wait_for_cacher_to_respond) { - main_thread_lock_.lock(); - } - - // wake up cacher - wait_cond_.wakeAll(); - - // if not, wait for cacher to respond - if (wait_for_cacher_to_respond) { -// qDebug() << "================> didn't find frame - waiting for cacher to respond..." << clip->name(); - interrupt_ = true; - main_thread_wait_.wait(&main_thread_lock_, 2000); - } - - if (wait_for_cacher_to_respond) { - main_thread_lock_.unlock(); - } - -// qDebug() << "Cacher::Cache took" << (QDateTime::currentMSecsSinceEpoch() - time) << "and retrieved" << retrieved_frame; -} - -AVFrame *Cacher::Retrieve() -{ -// qint64 time = QDateTime::currentMSecsSinceEpoch(); - - if (!caching_) { - return nullptr; - } - - // check if there's a frame ready to be shown by the cacher - - if (retrieved_frame == nullptr) { - // wait for cacher to finish caching - - if (clip->cache_lock.tryLock()) { - - // If the queue could lock, the cacher isn't running which means no frame is coming. This is an error. - qCritical() << "Cacher frame was null while the cacher wasn't running on clip" << clip->name(); - clip->cache_lock.unlock(); - - } else { - - // cacher is running, wait for it to give a frame -// qDebug() << "====> retrieve lock waiting"; - retrieve_lock_.lock(); - retrieve_wait_.wait(&retrieve_lock_); - retrieve_lock_.unlock(); - - } - - } - -// qDebug() << "Cacher::Retrieve took" << (QDateTime::currentMSecsSinceEpoch() - time) << "and retrieved" << retrieved_frame; - - return retrieved_frame; -} - -void Cacher::Close(bool wait_for_finish) -{ - caching_ = false; - wait_cond_.wakeAll(); - - if (wait_for_finish) { - wait(); - } -} - -void Cacher::ResetAudio() -{ - // using audio_write_lock seems like a good idea, but hasn't been tested yet. If there are audio issues when seeking, - // try uncommenting them - -// audio_write_lock.lock(); - audio_reset_ = true; - frame_sample_index_ = -1; - audio_buffer_write = 0; -// audio_write_lock.unlock(); -} - -int Cacher::media_width() -{ - return stream->codecpar->width; -} - -int Cacher::media_height() -{ - return stream->codecpar->height; -} - -AVRational Cacher::media_time_base() -{ - return stream->time_base; -} - -void Cacher::QueueLock() -{ - queue.lock(); -} - -void Cacher::QueueUnlock() -{ - queue.unlock(); -} - -int Cacher::RetrieveFrameFromDecoder(AVFrame* f) { - int result = 0; - int receive_ret; - - // do we need to retrieve a new packet for a new frame? - av_frame_unref(f); - while ((receive_ret = avcodec_receive_frame(codecCtx, f)) == AVERROR(EAGAIN)) { - int read_ret = 0; - do { - if (pkt->buf != nullptr) { - av_packet_unref(pkt); - } - read_ret = av_read_frame(formatCtx, pkt); - } while (read_ret >= 0 && pkt->stream_index != clip->media_stream_index()); - - if (read_ret >= 0) { - int send_ret = avcodec_send_packet(codecCtx, pkt); - if (send_ret < 0) { - qCritical() << "Failed to send packet to decoder." << send_ret; - return send_ret; - } - } else { - if (read_ret == AVERROR_EOF) { - int send_ret = avcodec_send_packet(codecCtx, nullptr); - if (send_ret < 0) { - qCritical() << "Failed to send packet to decoder." << send_ret; - return send_ret; - } - } else { - qCritical() << "Could not read frame." << read_ret; - return read_ret; // skips trying to find a frame at all - } - } - } - if (receive_ret < 0) { - if (receive_ret != AVERROR_EOF) qCritical() << "Failed to receive packet from decoder." << receive_ret; - result = receive_ret; - } - - return result; -} - -int Cacher::RetrieveFrameAndProcess(AVFrame *f) -{ - // error codes from FFmpeg - int retrieve_code, read_code, send_code; - - // frame for FFmpeg to decode into - f = av_frame_alloc(); - - // loop to pull frames from the AVFilter stack - while ((retrieve_code = av_buffersink_get_frame(buffersink_ctx, f)) == AVERROR(EAGAIN)) { - - // retrieve frame from decoder - read_code = RetrieveFrameFromDecoder(frame_); - - if (read_code >= 0) { - - // we retrieved a decoded video frame, which we will send to the AVFilter stack to convert to RGBA (with other - // adjustments if necessary) - - if ((send_code = av_buffersrc_add_frame_flags(buffersrc_ctx, frame_, AV_BUFFERSRC_FLAG_KEEP_REF)) < 0) { - qCritical() << "Failed to add frame to buffer source." << send_code; - break; - } - - // we don't need the original frame to we free it here - av_frame_unref(frame_); - - } else { - - // AVERROR_EOF means we've reached the end of the file, not technically an error, but it's useful to know that - // there are no more frames in this file - if (read_code != AVERROR_EOF) { - qCritical() << "Failed to read frame." << read_code; - } - break; - } - } - - if (read_code == AVERROR_EOF) { - return AVERROR_EOF; - } - return retrieve_code; -} diff --git a/rendering/cacher.h b/rendering/cacher.h index 1df910650..4b9848335 100644 --- a/rendering/cacher.h +++ b/rendering/cacher.h @@ -544,14 +544,15 @@ private: * * @param f * - * The AVFrame to retrieve. This function allocates an AVFrame so you shouldn't do so beforehand. You'll also need to - * free it later with av_frame_free() (though ClipQueue will do this automatically if the frame is added to it). + * A pointer to an AVFrame object. It does not need to be allocated, as this function allocates an AVFrame itself. + * You'll also need to free it later with av_frame_free() (though ClipQueue will do this automatically if the frame is + * added to it). * * @return * * FFmpeg error code (>= 0 on success, a negative error code on failure) */ - int RetrieveFrameAndProcess(AVFrame *f); + int RetrieveFrameAndProcess(AVFrame **f); /** * @brief Internal video caching function diff --git a/rendering/renderfunctions.cpp b/rendering/renderfunctions.cpp index 4cbda8e3d..d963ca962 100644 --- a/rendering/renderfunctions.cpp +++ b/rendering/renderfunctions.cpp @@ -313,7 +313,7 @@ GLuint compose_sequence(ComposeSequenceParams ¶ms) { if (c->media() != nullptr && c->media()->get_type() == MEDIA_TYPE_FOOTAGE) { // retrieve video frame from cache and store it in c->texture - c->Cache(qMax(playhead, c->timeline_in()), false, false, params.nests, params.playback_speed); + c->Cache(qMax(playhead, c->timeline_in()), false, params.nests, params.playback_speed); if (!c->Retrieve()) { params.texture_failed = true; } else { @@ -626,7 +626,6 @@ GLuint compose_sequence(ComposeSequenceParams ¶ms) { c->cache_lock.unlock(); c->Cache(playhead, - false, (params.viewer != nullptr && !params.viewer->playing), params.nests, params.playback_speed); diff --git a/ts/olive_ar.ts b/ts/olive_ar.ts index 2ed4ac778..f5292f56d 100644 --- a/ts/olive_ar.ts +++ b/ts/olive_ar.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. زيتون هو محرر فيديو غير خطي. هذا البرنامج حر ومحمي بموجب رخصة جنو العمومية. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. فريق زيتون ملزم بإخبار مستخدميه بأن الشفرة المصدرية لزيتون متوفرة للتنزيل عبر موقعه الإلكتروني. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... ابحث عن إجراء... @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings - + Pixel Format: @@ -38,25 +38,33 @@ Audio - Audio - الصوت + الصوت - Recording - تسجيل + تسجيل + + + + %1 Audio + + + + + Recording %1 + AudioNoiseEffect - + Amount المقدار - + Mix دمج @@ -64,17 +72,17 @@ ChannelLayoutName - + Invalid معطوب - + Mono اُحادي - + Stereo مُجسم @@ -82,7 +90,7 @@ CollapsibleWidget - + <untitled> <غير معنون> @@ -90,7 +98,7 @@ ColorButton - + Set Color حدد اللون @@ -98,27 +106,27 @@ CornerPinEffect - + Top Left اعلى اليسار - + Top Right اعلى اليمين - + Bottom Left ادنى اليسار - + Bottom Right ادنى اليمين - + Perspective منظور @@ -126,7 +134,7 @@ DebugDialog - + Debug Log سجل التنقيح @@ -134,23 +142,23 @@ DemoNotice - - + + Welcome to Olive! مرحباً في زيتون! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. زيتون هو محرر فيديو حر ومفتوح المصدر تحت مظلة رخصة رخصة جنو العمومية. أن دفعت ﻷجل الحصول على هذا البرنامج فقد غُششت. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 هذا البرنامج في مرحلة ألفا حالياً حيث تعني أنه غير مستقر وفي اﻷعم اﻷغلب عرضة للتحطم, به علل, ويفتقر لبعض المميزات. نحن لا نوفر ضمانة لذا أستخدمهُ على مسؤوليتك. رجاءً بلغ أي علل أو طلب مميزات على %1 - + Thank you for trying Olive and we hope you enjoy it! شكراً لتجربتك زيتون ونحن نأمل أن تستمتع به! @@ -158,89 +166,89 @@ Effect - + Invalid effect تأثير غير صالح - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. لا وجود للتأثير '%1'. هذا التأثير قد يكون فاسد حاول إعادة تثبيته مجدداً أو زيتون. - + Cu&t قط&ع - + &Copy &نسخ - + Move &Up حرك &للاعلى - + Move &Down حرك &لﻷسفل - + D&elete ح&ذف - + Load Settings From File حمل اﻹعدادات من ملف - + Save Settings to File أحفظ اﻷعدادات في ملف - + Save Effect Settings أحفظ أعدادات المؤثر - - + + Effect XML Settings %1 غير إعدادات XML %1 - + Save Settings Failed حفظ اﻷعدادات فشل - + Failed to open "%1" for writing. فشل فتح "%1" للكتابة. - + Load Effect Settings تحميل أعدادات المؤثر - - + + Load Settings Failed تحميل اﻹعدادات فشل - + Failed to open "%1" for reading. فشل في فتح "%1" للقراءة. - + This settings file doesn't match this effect. ملف اﻷعدادات هذا لا يطابق هذا المؤثر. @@ -248,47 +256,52 @@ EffectControls - + Effects: المؤثرات: - + &Paste &لصق - + + (none) + (لا شيء) + + + Add Video Effect أضف موثر فيديو - + VIDEO EFFECTS موثرات الفيديو - + Add Video Transition أضف أنتقالة فيديو - + Add Audio Effect أضف موثر صوت - + AUDIO EFFECTS موثرات الصوت - + Add Audio Transition أضف أنتقالة صوت - + (Multiple clips selected) (مقاطع عديدة محددة) @@ -296,12 +309,12 @@ EffectRow - + Disable Keyframes عطّل اﻹطارت المفتاحية - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? تعطيل اﻹطارات المفتاحية سوف يحذف جميع اﻹطارات المفتاحية الحالية هل أنت متأكد من ما ستقدم عليه؟ @@ -309,7 +322,7 @@ EmbeddedFileChooser - + File: ملف: @@ -317,98 +330,98 @@ ExportDialog - + Export "%1" صدّر "%1" - + Unknown codec name %1 - + Export Failed فشل التصدير - + Export failed - %1 فشل تصدير - %1 - + Invalid dimensions أبعاد خاطئة - + Export width and height must both be even numbers/divisible by 2. تصدير العرض والطول يجب أن يكون عدد زوجي/قابل للقسمة ب 2. - + Invalid codec مرماز غير صالح - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. لم يتم التعرف على خيارات الإخراج للمرماز المحدد. هذه علة, رجاءً تواصل مع المطورين. - + Invalid format صيغة غير صالحة - + Couldn't determine output format. This is a bug, please contact the developers. لم يتم التعرف على صيغة اﻹخراج. هذه علة, رجاءً تواصل مع المطورين. - + Export Media صدّر الوسائط - + Quality-based (Constant Rate Factor) (عامل النسبة الثابت) أعتماداً-بالجودة - + Constant Bitrate نسبة بت ثابتة - - + + Invalid Codec - + Failed to find a suitable encoder for this codec. Export will likely fail. - + Failed to find pixel format for this encoder. Export will likely fail. - + Bitrate (Mbps): نسبة البت (مب/ث): - + Quality (CRF): الجودة (CRF): - + Quality Factor: 0 = lossless @@ -423,73 +436,78 @@ 51 = أقل جودة ممكنة - + Target File Size (MB): حجم الملف الهدف (مب): - + Format: صيغة: - + Range: المدى: - + Entire Sequence كل المقطع - + In to Out الدخل إلى الخرج - + Video فيديو - - + + Codec: مرماز: - + Width: العرض: - + Height: الطول: - + Frame Rate: نسبة الإطارات: - + Compression Type: نوع الضغط: - + Advanced - + + Audio + الصوت + + + Sampling Rate: معدل الإعتيان: - + Bitrate (Kbps/CBR): نسبة البت (Kbps/CBR): @@ -497,88 +515,88 @@ ExportThread - + failed to send frame to encoder (%1) فشل إرسال اﻹطار للمُرمز.(%1) - + failed to receive packet from encoder (%1) فشل إستلام الرزمة من المُرمز (%1) - + could not video encoder for %1 لم يجد مُرمز فيديو ل %1 - + could not allocate video stream لم يستطع تخصيص بث فيديو - + could not allocate video encoding context للمراجعة لم يستطع تخصيص سياق ترميز فيديو - + could not open output video encoder (%1) لم يتم فتح مرمّز مخرجات فيديو (%1) - + could not copy video encoder parameters to output stream (%1) لم يتم نسخ عوامل مرمّز الفيديو لبث المخرجات (%1) - + could not audio encoder for %1 لم يستطع ترميز فيديو ل %1 - + could not allocate audio stream لم يستطع تخصيص بث صوت - + could not allocate audio encoding context لم يستطع تخصيص سياق ترميز صوت - + could not open output audio encoder (%1) لم يتم فتح مرمّز مخرجات صوت (%1) - + could not copy audio encoder parameters to output stream (%1) لم يتم نسخ عوامل مرمّز الصوت لبث المخرجات (%1) - + could not allocate audio buffer (%1) لم يستطع تخصيص حافظة صوت (%1) - + could not create output format context لم يستطع إنشاء سياق صيغة الصوت - + could not open output file (%1) لم يستطع فتح ملف اﻹخراج (%1) - + could not write output file header (%1) لم يستطع كتابة مخرجات ترويسة الملف (%1) - + could not write output file trailer (%1) لم يستطع كتابة مخرجات ملحقة الملف (%1) @@ -586,17 +604,17 @@ FillLeftRightEffect - + Type النوع - + Fill Left with Right املأ اليسار مع اليمين - + Fill Right with Left املأ اليمين مع اليسار @@ -604,22 +622,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 فشل في تحميل إضافة Frei0r "%1": %2 - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. ملحوظة: لا يمكنك تحميل إضافة Frei0r 32-بت لنسخة زيتون مبنية ل64-بت. رجاءً جد نسخة 64-بت من هذه الإضافة أو أنتقل لنسخة زيتون مبنية على 32-بت. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. ملحوظة: لا يمكنك تحميل إضافة Frei0r 64-بت لنسخة زيتون مبنية ل32-بت. رجاءً جد نسخة 32-بت من هذه الإضافة أو أنتقل لنسخة زيتون مبنية على 64-بت. - + Error loading Frei0r plugin خطأ تحميل إضافة Frei0r @@ -627,22 +645,22 @@ GraphEditor - + Graph Editor محرر المخطط - + Linear خطي - + Bezier بيزير - + Hold أمسك @@ -650,17 +668,17 @@ GraphView - + Zoom to Selection قرّب للمُحدد - + Zoom to Show All تقريب لرؤية الكل - + Reset View صفّر الرؤية @@ -668,22 +686,22 @@ InterlacingName - + None (Progressive) لا شيء (متفاقم) - + Top Field First الحقل العلوي أولاً - + Bottom Field First الحقل السفلي أولاً - + Invalid غير صالح @@ -691,7 +709,7 @@ KeyframeNavigator - + Enable Keyframes فعّل اﻹطارات المفتاحية @@ -699,17 +717,17 @@ KeyframeView - + Linear خطي - + Bezier بيزير - + Hold أمسك @@ -717,14 +735,14 @@ LabelSlider - - + + Set Value حدد القيمة - - + + New value: قيمة جديدة: @@ -732,17 +750,17 @@ LoadDialog - + Loading... تحميل... - + Loading '%1'... تحميل '%1'... - + Cancel إلغاء @@ -750,52 +768,52 @@ LoadThread - + Version Mismatch عدم تطابق النسخة - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? هذا المشروع كان محفوظاً بنسخة مختلفة من زيتون وقد لا تكون متوافقة بشكل كامل مع هذه النسخة. هل تريد محاولة تحميله على إي حال؟ - + Invalid Clip Link رابط مقطع غير صالح - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? هذا المشروع يحوي رابط مقطع غير صالح. قد يكون معطوباً. هل تريد اﻷستمرار بتحميله؟ - + %1 - Line: %2 Col: %3 %1 - سطر: %2 عمود: %3 - + User aborted loading المسخدم أجهض التحميل - + XML Parsing Error خطأ تحليل XML - + Couldn't load '%1'. %2 تعثر تحميل '%1'. %2 - + Project Load Error خطأ تحميل المشروع - + Error loading project: %1 خطأ تحميل المشروع: %1 @@ -803,699 +821,669 @@ MainWindow - + Welcome to %1 مرحباً في %1 - Auto-recovery - اﻷستعادة التلقائية + اﻷستعادة التلقائية - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - زيتون لم يغلق بشكل سليم وتم التعرف على ملف اﻷستعادة التلقائة. هل تريد فتحه؟ + زيتون لم يغلق بشكل سليم وتم التعرف على ملف اﻷستعادة التلقائة. هل تريد فتحه؟ - &Project - &المشروع + &المشروع - &Sequence - &مقطع + &مقطع - &Folder - &مجلد + &مجلد - Set In Point - ضع في نقطة + ضع في نقطة - Set Out Point - ضع خارج نقطة + ضع خارج نقطة - Reset In Point - صفر في النقطة + صفر في النقطة - Reset Out Point - صفّر النقطة + صفّر النقطة - Clear In/Out Point - محو نقطة الدخل/الخرج + محو نقطة الدخل/الخرج - No active sequence - لا مقاطع نشطة + لا مقاطع نشطة - Please open the sequence you wish to export. - رجاءً أفتح المقطع المراد تصديره. + رجاءً أفتح المقطع المراد تصديره. - Save Project As... - أحفظ المشروع ك... + أحفظ المشروع ك... - Unsaved Project - مشروع غير محفوظ + مشروع غير محفوظ - This project has changed since it was last saved. Would you like to save it before closing? - هذا المشروع غُيِرَ منذ أخر مرة. أتريد حفظه قبل اﻹغلاق؟ + هذا المشروع غُيِرَ منذ أخر مرة. أتريد حفظه قبل اﻹغلاق؟ - + &File &ملف - + &New &جديد - + &Open Project &أفتح مشروع - + Clear Recent List أفرغ قائمة مؤخراً - + Open Recent أفتح مؤخراً - + &Save Project &أحفظ المشروع - + Save Project &As أحفظ المشروع &ك - + &Import... &أستيراد - + &Export... &تصدير - + E&xit خ&روج - + &Edit &تعديل - + &Undo &تراجع - + Redo أعد - Cu&t - قط&ع + قط&ع - Cop&y - &نسخ + &نسخ - &Paste - &لصق + &لصق - Paste Insert - ألصق أدرج + ألصق أدرج - Duplicate - أستنساخ + أستنساخ - Delete - حذف + حذف - Ripple Delete - حذف موجة + حذف موجة - Split - أنقسام + أنقسام - + Select &All تحديد &الكل - + Deselect All إلغاء تحديد الكل - Add Default Transition - أضف اﻷنتقال الأفتراضي + أضف اﻷنتقال الأفتراضي - Link/Unlink - ربط/فصل + ربط/فصل - Enable/Disable - تفعيل/تعطيل + تفعيل/تعطيل - Nest للمراجعة - تداخل + تداخل - + Ripple to In Point موجة لنقطة إدخال - + Ripple to Out Point موجة لنقطة إخراج - + Edit to In Point عدّل لنقطة إدخال - + Edit to Out Point عدّل لنقطة إخراج - + Delete In/Out Point محو نقطة الدخل/الخرج - + Ripple Delete In/Out Point موجة حذف نقطة الإدخال/الإخراج - + Set/Edit Marker حدد/عدّل اﻹشارات - + &View &أظهر - + Zoom In تقريب - + Zoom Out أبتعاد - + Increase Track Height زدّ طول المسار - + Decrease Track Height قلل طول المسار - + Toggle Show All فعل إظهار الكل - + Track Lines تعقب السطور - + Rectified Waveforms أشكال موجية متناوبة - + Frames اﻹطارات - + Drop Frame أفلت إطار - + Non-Drop Frame إطار غير مُفلت - + Milliseconds جزء من الثانية - + Title/Action Safe Area عنوان/إجراء المنطقة الآمنة - + Off مطفئ - + Default إفتراضي - + 4:3 4:3 - + 16:9 16:9 - + Custom مخصوص - + Full Screen ملء الشاشة - + Full Screen Viewer عارض ملء الشاشة - + &Playback &الترديد - + Go to Start أذهب للبداية - + Previous Frame الإطار السابق - + Play/Pause تشغيل/أستئناف - + Play In to Out شغل من الإدخال إلى الإخراج - + Next Frame اﻹطار التالي - + Go to End أذهب للنهاية - + Go to Previous Cut أذهب للقطعة السابقة - + Go to Next Cut أذهب للقطعة التالية - + Go to In Point أذهب لنقطة إدخال - + Go to Out Point أذهب لنقطة إخراج - + Shuttle Left توشع اليسار - + Shuttle Stop إيقاف التوشع - + Shuttle Right توشع اليمين - + Loop حلقة - + &Window &نافذة - + Project المشروع - + Effect Controls تحكمات المؤثر - + Timeline الخط الزمني - + Graph Editor محرر المخطط - + Media Viewer عارض الوسائط - + Sequence Viewer عارض المقطع - + Maximize Panel ضخّم اللائحة - + + Lock Panels + + + + Reset to Default Layout صفّر للتخطيط المبدئي - + &Tools &اﻷدوات - + Pointer Tool أداة المؤشر - + Edit Tool أداة التحرير - + Ripple Tool أداة الموجة - + Razor Tool أداة القطع - + Slip Tool أداة المنزلقة - + Slide Tool أداة الشريحة - + Hand Tool أداة اليد - + Transition Tool أداة اﻷنتقال - + Enable Snapping فعّل السحب - + Selecting Also Seeks للمراجعة تحديد العروضات إيضاً - + Edit Tool Also Seeks أداة التحرير تعرض إيضاً - + Edit Tool Selects Links أداة التحرير تحدد الروابط - + Seek Also Selects للمراجعة العرض يحدد إيضاً - + Seek to the End of Pastes أعرض لنهاية الملصوقات - + Scroll Wheel Zooms العجلة الدوراة تُقرّب - + Enable Drag Files to Timeline أسمح بسحب الملفات للخط الزمني - + Auto-Scale By Default التحجيم-التلقائي إفتراضياً - + Enable Seek to Import للمراجعة أسمح للعرض بالإستيراد - + Audio Scrubbing حكّ شريط الصوت - + Enable Drop on Media to Replace أسمح برمي الوسائط للأستبدال - + Enable Hover Focus فعّل التركيز الحائم - + Ask For Name When Setting Marker أسال عن اﻷسم حين وضع المؤشر - + No Auto-Scroll لا أنزلاق التلقائي - + Page Auto-Scroll أنزلاق الصفحة التلقائي - + Smooth Auto-Scroll الأنزلاق التلقائي الناعم - + Preferences التفضيلات - + Clear Undo أمسح التراجُعات - + &Help &مساعدة - + A&ction Search ب&حث إجراء - + Debug Log سجل التنقيح - + &About... &حول... - + <untitled> <غير معنون> - Open Project... - أفتح مشروع... + أفتح مشروع... - Missing recent project - مشروع ماضي ضائع + مشروع ماضي ضائع - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - المشروع '%1' غير بعد اﻷن. هل ترغب بحذفه من من قائمة مشاريع مؤخراً؟ + المشروع '%1' غير بعد اﻷن. هل ترغب بحذفه من من قائمة مشاريع مؤخراً؟ - Invalid aspect ratio - معدل نسبة غير صالح + معدل نسبة غير صالح - The aspect ratio '%1' is invalid. Please try again. - معدل النسبة '%1' غير صالح. حاول مجدداً. + معدل النسبة '%1' غير صالح. حاول مجدداً. - Enter custom aspect ratio - أدخل نسبة معدل مخصصة + أدخل نسبة معدل مخصصة - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - أدخل معدل النسبة لأستعماله في العنوان/الإجراء المنطقة الآمنة (كــ. 16:9): + أدخل معدل النسبة لأستعماله في العنوان/الإجراء المنطقة الآمنة (كــ. 16:9): - Nested Sequence - مقطع متشعب + مقطع متشعب Marker - + Set Marker ضع وسم - + Set clip marker name: ضع أسم وسم المقطوعة: - + Set sequence marker name: ضع أسم وسم المقطع: @@ -1503,27 +1491,27 @@ Media - + New Folder مجلد جديد - + Name: اﻷسم: - + Filename: أسم الملف: - + Video Dimensions: أبعاد الفيديو: - + Frame Rate: معدل اﻹطارات: @@ -1532,27 +1520,27 @@ %1 الحقل (%2 إطارات) - + %1 field(s) (%2 frame(s)) - + Interlacing: المشابكة: - + Audio Frequency: تردد الصوت: - + Audio Channels: قنوات الصوت: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1565,17 +1553,17 @@ Audio Layout: %6 تخطيط الصوت: %6 - + Name اﻷسم - + Duration المدة - + Rate النسبة @@ -1583,17 +1571,17 @@ Audio Layout: %6 MediaPropertiesDialog - + "%1" Properties "%1" الخصائص - + Tracks: المقطوعات: - + Video %1: %2x%3 %4FPS فيديو %1: %2x%3 %4إطار/ث @@ -1602,12 +1590,12 @@ Audio Layout: %6 الصوت %1: %2هرتز %3 قنوات - + Audio %1: %2Hz %3 - + %n channel(s) @@ -1619,164 +1607,355 @@ Audio Layout: %6 - + Conform to Frame Rate: المصادقة لمستوى اﻹطارات: - + Alpha is Premultiplied ألفا مضاعفة مسبقاً - + Auto (%1) تلقائي (%1) - + Interlacing: المشابكة: - + Name: اﻷسم: + + MenuHelper + + + &Project + &المشروع + + + + &Sequence + &مقطع + + + + &Folder + &مجلد + + + + Set In Point + ضع في نقطة + + + + Set Out Point + ضع خارج نقطة + + + + Reset In Point + صفر في النقطة + + + + Reset Out Point + صفّر النقطة + + + + Clear In/Out Point + محو نقطة الدخل/الخرج + + + + Add Default Transition + أضف اﻷنتقال الأفتراضي + + + + Link/Unlink + ربط/فصل + + + + Enable/Disable + تفعيل/تعطيل + + + + Nest + تداخل + + + + Cu&t + قط&ع + + + + Cop&y + &نسخ + + + + &Paste + &لصق + + + + Paste Insert + ألصق أدرج + + + + Duplicate + أستنساخ + + + + Delete + حذف + + + + Ripple Delete + حذف موجة + + + + Split + أنقسام + + + + Invalid aspect ratio + معدل نسبة غير صالح + + + + The aspect ratio '%1' is invalid. Please try again. + معدل النسبة '%1' غير صالح. حاول مجدداً. + + + + Enter custom aspect ratio + أدخل نسبة معدل مخصصة + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + أدخل معدل النسبة لأستعماله في العنوان/الإجراء المنطقة الآمنة (كــ. 16:9): + + NewSequenceDialog - + Editing "%1" تعديل "%1" - + New Sequence مقطع جديد - + Preset: قالب: - + Film 4K فلم 4K - + TV 4K (Ultra HD/2160p) 4K تلفاز (أقصى-عالي الدقة/2160p) - + 1080p - + 720p - + 480p - + 360p - + 240p - + 144p - + NTSC (480i) - + PAL (576i) - + Custom مخصوص - + Video فيديو - + Width: العرض: - + Height: الطول: - + Frame Rate: معدل اﻹطارات: - + Pixel Aspect Ratio: للمراجعة معدل نسبة البيكسل: - + Square Pixels (1.0) بكسيل مربع (1.0) - + Interlacing: المشابكة: - + None (Progressive) لا شيء (متفاقم) - + Audio الصوت - + Sample Rate: معدل الإعتيان: - + Name: اﻷسم: + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + اﻷستعادة التلقائية + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + زيتون لم يغلق بشكل سليم وتم التعرف على ملف اﻷستعادة التلقائة. هل تريد فتحه؟ + + + + Open Project... + أفتح مشروع... + + + + Missing recent project + مشروع ماضي ضائع + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + المشروع '%1' غير بعد اﻷن. هل ترغب بحذفه من من قائمة مشاريع مؤخراً؟ + + + + Save Project As... + أحفظ المشروع ك... + + + + Unsaved Project + مشروع غير محفوظ + + + + This project has changed since it was last saved. Would you like to save it before closing? + هذا المشروع غُيِرَ منذ أخر مرة. أتريد حفظه قبل اﻹغلاق؟ + + + + No active sequence + لا مقاطع نشطة + + + + Please open the sequence you wish to export. + رجاءً أفتح المقطع المراد تصديره. + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan بحاجة لمتابعة تسطّح @@ -1785,177 +1964,174 @@ Audio Layout: %6 Playback - Generating Proxy: %1% - توليد وسيط: %1% + توليد وسيط: %1% PreferencesDialog - + Preferences التفضيلات - + Invalid CSS File ملف CSS غير صالح - + CSS file '%1' does not exist. ملف CSS '%1' غير موجود. - Warning - تحذير + تحذير - Some changed settings will require restarting Olive to take effect - بعض اﻹعدادات المعدلة تتطلب من زيتون إعادة التشغيل لتأخذ تأثيرها + بعض اﻹعدادات المعدلة تتطلب من زيتون إعادة التشغيل لتأخذ تأثيرها - + Confirm Reset All Shortcuts أكّد تصفير كل اﻹختصارات - + Are you sure you wish to reset all keyboard shortcuts to their defaults? هل أنت متأكد أنك ترغب بتصفير جميع أختصارات لوحة المفاتيح لقيمهم اﻹفتراضية؟ - + Import Keyboard Shortcuts أستيراد أخصارات لوحة المفاتيح - - + + Error saving shortcuts خطأ حفظ اﻹختصارات - + Failed to open file for reading فشل في فتح الملف للقراءة - + Export Keyboard Shortcuts تصدير أختصارات لوحة المفاتيح - + Export Shortcuts تصدير اﻹختصارات - + Shortcuts exported successfully صُدرت اﻷختصارات بنجاح - + Failed to open file for writing فشل في فتح الملف للكتابة - + Browse for CSS file أبحث عن ملف CSS - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: اللغة: - + Custom CSS: CSS مخصوص: - + Browse تصفّح - + Image sequence formats: صيغ صور المقاطع: - + Audio Recording: تسجيل الصوت: - + Mono اُحادي - + Stereo مُجسم - + Effect Textbox Lines: للمراجعة أثر بسطور صندوق النص: - + Thumbnail Resolution: دقّة الصورة المصغرة: - + Waveform Resolution: دقّة الشكل الموجي: - + Delete Previews - + Use Software Fallbacks When Possible أستعمل معالجة البرمجيات حين اﻹمكان - + General عام - + Behavior السلوك @@ -1964,13 +2140,13 @@ Audio Layout: %6 عطل تعدد المعالجات بالصور - + Seeking للمراجعة التنزيل - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) للمراجعة @@ -1978,7 +2154,7 @@ Always show the correct frame (visual may pause briefly as correct frame is retr دوماً أظهر اﻹطار الصحيح (البصريات قد تتوقف بإيجاز كلما تستجلب اﻹطارات بدقة) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) للمراجعة الشديدة @@ -1986,101 +2162,101 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff أنقل بسرعة (قد يعمق روئية اﻹطارات غير الصحيحة - لا يؤثر الترديد/تصدير) - + Memory Usage أستعمال الذاكرة - + Upcoming Frame Queue: إطار الصف القادم: - - + + frames اﻹطارات - - + + seconds الثوان - + Previous Frame Queue: إطار الصف السابق: - + Playback للمراجعة الترديد - + Output Device: جهاز اﻹخراج: - - + + Default إفتراضي - + Input Device: جهاز اﻹدخال: - + Sample Rate: معدل الإعتيان: - + Audio الصوت - + Search for action or shortcut ابحث عن إجراء أو أختصار - + Action إجراء - + Shortcut أختصار - + Import أستيراد - + Export تصدير - + Reset Selected صفّر المحدد - + Reset All صفّر الجميع - + Keyboard لوحة المفاتيح @@ -2088,12 +2264,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 لا يمكن فتح الملف - %1 - + Could not find stream information - %1 لم يتم العثور على ملومات التدفق - %1 @@ -2101,94 +2277,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. بحث وسائط, علامات, إلخ. - + Project المشروع - + Sequence مقطع - + Replace '%1' أستبدل '%1' - - + + All Files كل الملفات - - + + No active sequence لا مقاطع نشطة - + No sequence is active, please open the sequence you want to replace clips from. لا مقطع نشط, رجاءً أفتح المقطع التي تريد أستبدال الجزء منه. - + Active sequence selected مقطع نشط محدد - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. لا يمكنك إدراج المقطع بنفسه, لذا لا جزئيات من هذه الوسائط ستكون بهذا المقطع. - + Rename '%1' أعد تسمية '%1' - + Enter new name: أدخل اﻷسم الجديد: - + Delete media in use? أحذف الوسائط المستعملة؟ - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? الوسائط '%1' حالياً مستعملة ب '%2'. حذفه سوف يحذف جميع حالات المقطع. هل أنت متأكد أنك تريد فعل هذا؟ - + Skip تخطى - + Image sequence detected تم التعرف على مقاطع صور - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? الملف '%1' يبدو كأنه جزء من سلسلة صور. هل تريد أستيراده هكذا؟ - + Import media... أستيراد وسائط... - + No sequence is active, please open the sequence you want to delete clips from. لا مقطع نشط, رجاءً أفتح المقطع المراد حذف جزء منه. @@ -2196,77 +2372,77 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyDialog - + Create Proxy أنشئ وسيط - + Proxy وسيط - + Dimensions: اﻷبعاد: - + Same Size as Source نفس حجم المصدر - + Half Resolution (1/2) نصف الدقّة (1/2) - + Quarter Resolution (1/4) ربع الدقّة (1/4) - + Eighth Resolution (1/8) ثُمن الدقة (1/8) - + Sixteenth Resolution (1/16) ستة أعشار الدقّة (1/16) - + Format: صيغة: - + ProRes HQ جودة عالية أحترافية (ProRes HQ) - + Location: الموقع: - + Same as Source (in "%1" folder) مثل المصدر (في مجلد "%1") - + Proxy file exists ملف الوسيط موجود - + The file "%1" already exists. Do you wish to replace it? الملف "%1" موجود مسبقاً. هل ترغب بأستبداله؟ - + Custom Location موقع مخصوص @@ -2274,7 +2450,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" أنتهى توليد وسيط إلى "%1" @@ -2282,67 +2458,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" أستبدل المقاطع بأستعمال "%1" - + Select which media you want to replace this media's clips with: أختار إي الوسائط تريد أستبدالها لمقاطع الوسائط هذخ مع: - + Keep the same media in-points ضع ذات الوسائط في نقاط - + Replace أستبدل - + Cancel إلغاء - + No media selected لا وسائط محددة - + Please select a media to replace with or click 'Cancel'. رجاءً أختر الوسائط للأستبدال مع أو أنقر 'إلغاء'. - + Same media selected ذات الوسائط مختارة - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. أخترت ذات الوسائط المراد أستبدالها. رجاءً أختر غيرها أو أنقر 'إلغاء'. - + Folder selected مجلد محدد - + You cannot replace footage with a folder. لا يمكنك أستبدال اللقطات مع مجلد. - + Active sequence selected مقاطع نشطة محددة - + You cannot insert a sequence into itself. لا يسعك إدراج مقطع في نفسه. @@ -2350,7 +2526,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) %1 (نسخ) @@ -2358,18 +2534,18 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ShakeEffect - + Intensity للمراجعة(كثافة أم شدة) الكثافة - + Rotation الدوران - + Frequency التردد @@ -2377,37 +2553,37 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SolidEffect - + Type النوع - + Solid Color لون صلب - + SMPTE Bars ألواح SMPTE - + Checkerboard لوح التدقيق - + Opacity العتمة - + Color اللون - + Checkerboard Size حجم لوح التدقيق @@ -2415,137 +2591,142 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SourcesCommon - + Import... أستيراد... - + New جديد - + View أظهر - + Tree View مظهر الشجرة - + Icon View مظهر الإيقونات - + Show Toolbar أظهر لوح اﻷدوات - + Show Sequences أظهر المقاطع - + Replace/Relink Media أستبدل/أعد ربط الوسائط - + Reveal in Explorer أظهر في الكاشف - + Reveal in Finder أظهر في البحث - + Reveal in File Manager أظهر بمتصفح الملفات - + Replace Clips Using This Media أستبدل المقاطع مستعملاً هذه الوسائط - + Create Sequence With This Media أنشئ مقطع مع هذه الوسائط - + Duplicate أستنساخ - + Delete All Clips Using This Media أحذف جميع هذه المقاطع المستعملة هذه الوسائط - + Proxy وسيط - + Generating proxy: %1% complete توليد الوسيط: %1% أكتمل - + Create/Modify Proxy أنشئ/غيّر وسيط - + Create Proxy أنشئ وسيط - + Modify Proxy غيّر الوسيط - + Restore Original أستعد اﻷصل - + Delete حذف - + + Preview in Media Viewer + + + + Properties... الخصائص... - + Replace Media أستبدل الوسائط - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? أنت أوقعت ملفً على '%1' هل تريد أستبداله مع الملف المرمي؟ - + Delete proxy حذف وسيط - + Would you like to delete the proxy file "%1" as well? هل تريد حذف ملف الوسيط "%1" إيضاً؟ @@ -2557,38 +2738,38 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff الحوار - + Speed: السرعة: - + Frame Rate: معدل اﻹطارات: - + Duration: المدة: - + Speed/Duration السرعة/المدّة - + Reverse معكوس - + Maintain Audio Pitch للمراجعة حافظ على حدة الصوت - + Ripple Changes تغيرات الموجة @@ -2596,7 +2777,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEditDialog - + Edit Text عدّل النص @@ -2604,113 +2785,118 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEffect - + Text النص - + Font الخط - + Size الحجم - + Color اللون - + Alignment محاذاة - + Left يسار - - + + Center المركز - + Right يمين - + Justify تسوية - + Top أعلى - + Bottom القاع - + Word Wrap لُف الكلمة - + Outline الخلاصة - + Outline Color لون الخلاصة - + Outline Width عرض الخلاصة - + Shadow الظل - + Shadow Color لون الظل - + + Shadow Angle + + + + Shadow Distance مسافة الظل - + Shadow Softness نعومة الظل - + Shadow Opacity عتمة الظل - + Sample Text عينة نص - + &Edit Text &عدل النص @@ -2718,47 +2904,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode شفرة الوقت - + Sequence مقطع - + Media الوسائط - + Scale المقياس - + Color اللون - + Background Color لون الخلفية - + Background Opacity عتمة الخلفية - + Offset اﻷزاحة - + Prepend باحجة للمراجعة البادئة @@ -2767,150 +2953,159 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Timeline: الخط الزمني: - <none> - <لا شيء> + <لا شيء> - + + Nested Sequence + مقطع متشعب + + + Effect already exists المؤثر موجود مسبقاً - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? المقطع '%1' يحتوي على المؤثر '%2'. هل تفضل أستبداله مع الملصوق أو إضافته كمؤثر منفصل؟ - + Add أضف - + Replace أستبدل - + Skip تخطى - + Do this for all conflicts found أفعل هذا مع كل التعارضات الموجودة - + Title... العنوان... - + Solid Color... بحاجة لمتابعة لون صلب... - + Bars... ألواح... - + Tone... نغّم... - + Noise... ضجيج... - + Unsaved Project مشروع غير محفوظ - + You must save this project before you can record audio in it. يجب عليك حفظ المشروع قبل تسجيل الصوت فيه. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) أنقر على الخط الزمني حيث تريد بدء التسجيل (أسحب لوضع حد للتسجيل في إطار وقت معين) - + + (none) + (لا شيء) + + + Pointer Tool أداة المؤشر - + Edit Tool أداة التحرير - + Ripple Tool أداة الموجة - + Razor Tool أداة القطع - + Slip Tool بحاجة لمتابعة أداة المنزلقة - + Slide Tool أداة الشريحة - + Hand Tool أداة اليد - + Transition Tool أداة اﻷنتقال - + Snapping بحاجة لمتابعة الساحبة - + Zoom In تقريب - + Zoom Out أبتعاد - + Record audio سجّل الصوت - + Add title, solid, bars, etc. أضف عنوان, صلب, ألواح, إلخ. @@ -2918,7 +3113,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineHeader - + Center Timecodes وسّط رمز الوقت @@ -2926,77 +3121,74 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineWidget - + &Undo &تراجع - + &Redo &أعد - + C&ut قط&ع - + Cop&y &نسخ - + &Paste &لصق - + R&ipple Delete حذف مو&جة - + Sequence Settings اﻷعدادات المقطع - + &Speed/Duration &السرعة/المدّة - + Auto-s&cale التحجيم-التلقا&ئي - Enable/Disable - تفعيل/تعطيل + تفعيل/تعطيل - Link/Unlink - ربط/فصل + ربط/فصل - &Nest - &تداخل + &تداخل - + &Reveal in Project &أبرّز في المشروع - + R&ename أ&عد تسمية - + %1 Start: %2 End: %3 @@ -3007,57 +3199,57 @@ Duration: %4 المدة: %4 - + Rename '%1' أعد تسمية '%1' - + Rename multiple clips أعد تسمية عدة مقاطع - + Enter a new name for this clip: أدخل أسم جديد لهذا المقطع: - + Error خطأ - + Couldn't locate media wrapper for sequence. لم يتم رصد موقع غلاف الوسائط للمقطع. - + Title عنوان - + Solid Color لون صلب - + Bars ألواح - + Tone نغّم - + Noise ضجيج - + Duration: المدة: @@ -3065,22 +3257,22 @@ Duration: %4 ToneEffect - + Type نوع - + Frequency التردد - + Amount مقدار - + Mix دمج @@ -3088,161 +3280,161 @@ Duration: %4 TransformEffect - + Position الموضع - + Scale المقياس - + Uniform Scale المقياس الموحد - + Rotation الدوران - + Anchor Point نقطة المرساة - + Opacity العتمة - + Blend Mode طور المزج - + Normal عادي - + Darken ظلّم - + Multiply ضاعف - + Color Burn حرق اللون - + Linear Burn حرق خطي - + Lighten خفّف - + Screen شاشة - + Color Dodge بحاجة لمتابعة تلفيق اللون - + Linear Dodge (Add) تلفيق خطي (أضف) - + Overlay غطاء - + Soft Light ضوء ناعم - + Hard Light ضوء خشن - + Vivid Light بحاجة لمتابعة ضوء حيوي - + Linear Light ضوء خطي - + Pin Light بحاجة لمتابعة ضوء الدبوس - + Hard Mix بحاجة لمتابعة دمج صلب - + Difference فرق - + Exclusion حصر - + Reflect أنعكاس - + Substract طرح - + Average متوسط - + Glow توهج - + Negation نفي - + Phoenix فينيكس @@ -3254,7 +3446,7 @@ Duration: %4 الطول: - + Length @@ -3262,64 +3454,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin خطأ تحميل إضافة VST - + Failed to create VST reference فشل إنشاء مرجع VST - + Failed to load VST plugin "%1": %2 فشب تحميل إضافة VST "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. ملحوظة: لا يمكنك تحميل إضافة VST 32-بت لنسخة زيتون مبنية ل64-بت. رجاءً جد نسخة 64-بت من هذه الإضافة أو أنتقل لنسخة زيتون مبنية على 32-بت. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. ملحوظة: لا يمكنك تحميل إضافة VST 64-بت لنسخة زيتون مبنية ل32-بت. رجاءً جد نسخة 32-بت من هذه الإضافة أو أنتقل لنسخة زيتون مبنية على 64-بت. - + Failed to locate entry point for dynamic library. - + VST Error خطأ VST - + Plugin's magic number is invalid رقم اﻹضافة السحري غير صالح - + Plugin إضافة - + Interface واجهة - + Show أظهر - + VST Plugin إضافة VST @@ -3327,17 +3519,17 @@ Duration: %4 Viewer - + Sequence Viewer عارض المقطع - + Media Viewer عارض الوسائط - + (none) (لا شيء) @@ -3345,57 +3537,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... احفظ اﻹطار كصورة... - + Show Fullscreen أظهر ملء الشاشة - + Disable تعطيل - + Screen %1: %2x%3 الشاشة %1: %2x%3 - + Zoom قرّب - + Fit وائم - + Custom مخصوص - + Close Media أغلق الوسائط - + Save Frame أحفظ اﻹطار - + Viewer Zoom تقريب الرؤية - + Set Custom Zoom Value: حدد قيمة تقريب مخصصة: @@ -3403,7 +3595,7 @@ Duration: %4 ViewerWindow - + Exit Fullscreen الخروج من ملء الشاشة @@ -3411,12 +3603,12 @@ Duration: %4 VoidEffect - + (unknown) (غير معلوم) - + Missing Effect تأثير مفقود @@ -3424,7 +3616,7 @@ Duration: %4 VolumeEffect - + Volume درجة الصوت @@ -3432,12 +3624,12 @@ Duration: %4 transition - + Invalid transition أنتقال غير صالح - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. لا مرشح للأنتقال '%1'. هذه اﻷنتقالة قد تكون فاسدة. جرب إعادة تثبيتها أو زيتون. diff --git a/ts/olive_bs.ts b/ts/olive_bs.ts index 9c5ebe12c..026db9758 100644 --- a/ts/olive_bs.ts +++ b/ts/olive_bs.ts @@ -47,12 +47,12 @@ Snimanje - + %1 Audio %1 Audio - + Recording %1 Snimanje %1 @@ -135,7 +135,7 @@ DebugDialog - + Debug Log Zapis za debugiranje @@ -258,47 +258,52 @@ EffectControls - + Effects: Efekti: - + &Paste &Zalijepi - + + (none) + + + + Add Video Effect Dodaj video efekat - + VIDEO EFFECTS VIDEO EFEKTI - + Add Video Transition Dodaj video prelaz - + Add Audio Effect Dodaj audio efekat - + AUDIO EFFECTS AUDIO EFEKTI - + Add Audio Transition Dodaj audio prelaz - + (Multiple clips selected) (Vše snimki je odabrano) @@ -494,6 +499,11 @@ Advanced Napredno + + + Audio + Audio + Sampling Rate: @@ -508,88 +518,88 @@ ExportThread - + failed to send frame to encoder (%1) Slanje okvira koderu nije uspjelo (%1) - + failed to receive packet from encoder (%1) Primanje paketa od kodera nije uspjelo (%1) - + could not video encoder for %1 Nije mogao video koder za %1 - + could not allocate video stream Video tok se nije mogao zauzeti - + could not allocate video encoding context Kontekst video kodiranja se nije moago zauzeti - + could not open output video encoder (%1) Izlazni video koder se nije moago otvoriti (%1) - + could not copy video encoder parameters to output stream (%1) Parametri video kodera se nisu mogli kopirati u izlazni tok (%1) - + could not audio encoder for %1 Not sure if there should be anything in between "not" and "audio" Nije mogao audio koder za %1 - + could not allocate audio stream Audio tok se nije mogao zauzeti - + could not allocate audio encoding context Kontekst audio kodiranja se nije mogao zauzeti - + could not open output audio encoder (%1) Izlaz audio kodera se nije mogao otvoriti (%1) - + could not copy audio encoder parameters to output stream (%1) Parametri audio kodera se nisu mogli kopirati u izlazni tok (%1) - + could not allocate audio buffer (%1) Audio međuspremnik se nije mogao zauzeti (%1) - + could not create output format context Kontekst izlaznog formata se nije mogao stvoriti - + could not open output file (%1) Izlazna datoteka se nije mogla otvoriti (%1) - + could not write output file header (%1) Zaglavlje izlazne datoteke se nije moglo ispisati (%1) - + could not write output file trailer (%1) Zaglavlje izlazne datoteke se nije moglo ispisati (%1) @@ -639,22 +649,22 @@ GraphEditor - + Graph Editor Uređivač grafikona - + Linear Linearno - + Bezier Bezier - + Hold Drži @@ -662,17 +672,17 @@ GraphView - + Zoom to Selection Povećaj ka odabiru - + Zoom to Show All Povećaj ka svemu - + Reset View Vrati prvobitni prikaz @@ -744,17 +754,17 @@ LoadDialog - + Loading... Učitavanje... - + Loading '%1'... Učitavanje "%1"... - + Cancel Prekini @@ -762,52 +772,52 @@ LoadThread - + Version Mismatch Verzije se ne poklapaju - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Ovaj projekat je bio spašen u drugačijoj verziji Olive-a i moguće je da nije u potpunosti kompatibilan sa ovom verzijom. Da li još uvijek želite probati učitati projekat? - + Invalid Clip Link Nevažeća veza snimke - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? Ovaj projekat sadrži nevažeću vezu snimke. Moguće je da je koruptiran. Da li biste htjeli da ga nastavite učitavati? - + %1 - Line: %2 Col: %3 %1 - Red: %2 Kolona: %3 - + User aborted loading Korisnik je prekinuo učitavanje - + XML Parsing Error Greška u parsiranju XML-a - + Couldn't load '%1'. %2 "%1": %2 se nije moglo učitati - + Project Load Error Greška pri učitavanju projekta - + Error loading project: %1 Greška pri učitavanju projekta: %1 @@ -815,7 +825,7 @@ MainWindow - + Welcome to %1 Dobrodišli u %1 @@ -828,67 +838,67 @@ Olive se nije pravilno zatvorio i datoteka za automatsko obnavljanje je primjećena. Da li želite da ju otvorite? - + &File - + &New - + &Open Project - + Clear Recent List - + Open Recent - + &Save Project - + Save Project &As - + &Import... - + &Export... - + E&xit - + &Edit - + &Undo - + Redo @@ -901,432 +911,437 @@ &Zalijepi - + Select &All - + Deselect All - + Ripple to In Point - + Ripple to Out Point - + Edit to In Point - + Edit to Out Point - + Delete In/Out Point - + Ripple Delete In/Out Point - + Set/Edit Marker - + &View - + Zoom In - + Zoom Out - + Increase Track Height - + Decrease Track Height - + Toggle Show All - + Track Lines - + Rectified Waveforms - + Frames - + Drop Frame - + Non-Drop Frame - + Milliseconds - + Title/Action Safe Area - + Off - + Default - + 4:3 - + 16:9 - + Custom - + Full Screen - + Full Screen Viewer - + &Playback - + Go to Start - + Previous Frame - + Play/Pause - + Play In to Out - + Next Frame - + Go to End - + Go to Previous Cut - + Go to Next Cut - + Go to In Point - + Go to Out Point - + Shuttle Left - + Shuttle Stop - + Shuttle Right - + Loop - + &Window - + Project - + Effect Controls - + Timeline - + Graph Editor Uređivač grafikona - + Media Viewer - + Sequence Viewer - + Maximize Panel - + + Lock Panels + + + + Reset to Default Layout - + &Tools - + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Enable Snapping - + Selecting Also Seeks - + Edit Tool Also Seeks - + Edit Tool Selects Links - + Seek Also Selects - + Seek to the End of Pastes - + Scroll Wheel Zooms - + Enable Drag Files to Timeline - + Auto-Scale By Default - + Enable Seek to Import - + Audio Scrubbing - + Enable Drop on Media to Replace - + Enable Hover Focus - + Ask For Name When Setting Marker - + No Auto-Scroll - + Page Auto-Scroll - + Smooth Auto-Scroll - + Preferences - + Clear Undo - + &Help - + A&ction Search - + Debug Log Zapis za debugiranje - + &About... - + <untitled> <neimenovano> @@ -1352,52 +1367,52 @@ Media - + New Folder - + Name: - + Filename: - + Video Dimensions: - + Frame Rate: Okvirna stopa: - + %1 field(s) (%2 frame(s)) - + Interlacing: - + Audio Frequency: - + Audio Channels: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1406,17 +1421,17 @@ Audio Layout: %6 - + Name - + Duration - + Rate @@ -1481,122 +1496,122 @@ Audio Layout: %6 MenuHelper - + &Project - + &Sequence - + &Folder - + Set In Point - + Set Out Point - + Reset In Point - + Reset Out Point - + Clear In/Out Point - + Add Default Transition - + Link/Unlink - + Enable/Disable - + Nest - + Cu&t &Reži - + Cop&y - + &Paste &Zalijepi - + Paste Insert - + Duplicate - + Delete - + Ripple Delete - + Split - + Invalid aspect ratio - + The aspect ratio '%1' is invalid. Please try again. - + Enter custom aspect ratio - + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): @@ -1604,127 +1619,127 @@ Audio Layout: %6 NewSequenceDialog - + Editing "%1" - + New Sequence - + Preset: - + Film 4K - + TV 4K (Ultra HD/2160p) - + 1080p - + 720p - + 480p - + 360p - + 240p - + 144p - + NTSC (480i) - + PAL (576i) - + Custom - + Video Video - + Width: Širina: - + Height: Visina: - + Frame Rate: Okvirna stopa: - + Pixel Aspect Ratio: - + Square Pixels (1.0) - + Interlacing: - + None (Progressive) Nema (progresivno) - + Audio Audio - + Sample Rate: - + Name: @@ -1732,67 +1747,67 @@ Audio Layout: %6 OliveGlobal - + Olive Project %1 - + Auto-recovery Automatski oporavak - + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? Olive se nije pravilno zatvorio i datoteka za automatsko obnavljanje je primjećena. Da li želite da ju otvorite? - + Open Project... - + Missing recent project - + The project '%1' no longer exists. Would you like to remove it from the recent projects list? - + Save Project As... - + Unsaved Project - + This project has changed since it was last saved. Would you like to save it before closing? - + No active sequence - + Please open the sequence you wish to export. - + Missing Project File - + Specified project '%1' does not exist. @@ -1805,14 +1820,6 @@ Audio Layout: %6 - - Playback - - - Generating Proxy: %1% - - - PreferencesDialog @@ -1821,268 +1828,268 @@ Audio Layout: %6 - + Invalid CSS File - + CSS file '%1' does not exist. - + Confirm Reset All Shortcuts - + Are you sure you wish to reset all keyboard shortcuts to their defaults? - + Import Keyboard Shortcuts - - + + Error saving shortcuts - + Failed to open file for reading - + Export Keyboard Shortcuts - + Export Shortcuts - + Shortcuts exported successfully - + Failed to open file for writing - + Browse for CSS file - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: - + Custom CSS: - + Browse - + Image sequence formats: - + Audio Recording: - + Mono Mono - + Stereo Stereo - + Effect Textbox Lines: - + Thumbnail Resolution: - + Waveform Resolution: - + Delete Previews - + Use Software Fallbacks When Possible - + General - + Behavior - + Seeking - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) - + Memory Usage - + Upcoming Frame Queue: - - + + frames - - + + seconds - + Previous Frame Queue: - + Playback - + Output Device: - - + + Default - + Input Device: - + Sample Rate: - + Audio Audio - + Search for action or shortcut - + Action - + Shortcut - + Import - + Export - + Reset Selected - + Reset All - + Keyboard @@ -2090,12 +2097,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 - + Could not find stream information - %1 @@ -2103,94 +2110,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. - + Project - + Sequence - + Replace '%1' - - + + All Files - - + + No active sequence - + No sequence is active, please open the sequence you want to replace clips from. - + Active sequence selected - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. - + Rename '%1' - + Enter new name: - + Delete media in use? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? - + Skip - + Image sequence detected - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? - + Import media... - + No sequence is active, please open the sequence you want to delete clips from. @@ -2258,17 +2265,17 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + Proxy file exists - + The file "%1" already exists. Do you wish to replace it? - + Custom Location @@ -2276,7 +2283,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" @@ -2284,67 +2291,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" - + Select which media you want to replace this media's clips with: - + Keep the same media in-points - + Replace - + Cancel Prekini - + No media selected - + Please select a media to replace with or click 'Cancel'. - + Same media selected - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. - + Folder selected - + You cannot replace footage with a folder. - + Active sequence selected - + You cannot insert a sequence into itself. @@ -2352,7 +2359,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) @@ -2501,52 +2508,57 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + Create/Modify Proxy - + Create Proxy - + Modify Proxy - + Restore Original - + Delete - + + Preview in Media Viewer + + + + Properties... - + Replace Media - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? - + Delete proxy - + Would you like to delete the proxy file "%1" as well? @@ -2687,26 +2699,31 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff + Shadow Angle + + + + Shadow Distance - + Shadow Softness - + Shadow Opacity - + Sample Text - + &Edit Text @@ -2714,47 +2731,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode - + Sequence - + Media - + Scale - + Color - + Background Color - + Background Opacity - + Offset - + Prepend @@ -2762,152 +2779,152 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Nested Sequence - + Timeline: - - <none> - - - - + Effect already exists - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? - + Add - + Replace - + Skip - + Do this for all conflicts found - + Title... - + Solid Color... - + Bars... - + Tone... - + Noise... - + Unsaved Project - + You must save this project before you can record audio in it. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) - + + (none) + + + + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Snapping - + Zoom In - + Zoom Out - + Record audio - + Add title, solid, bars, etc. @@ -2978,7 +2995,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + %1 Start: %2 End: %3 @@ -2986,57 +3003,57 @@ Duration: %4 - + Rename '%1' - + Rename multiple clips - + Enter a new name for this clip: - + Error - + Couldn't locate media wrapper for sequence. - + Title - + Solid Color - + Bars - + Tone - + Noise - + Duration: @@ -3233,64 +3250,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin - + Failed to create VST reference - + Failed to load VST plugin "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Failed to locate entry point for dynamic library. - + VST Error - + Plugin's magic number is invalid - + Plugin - + Interface - + Show - + VST Plugin @@ -3298,17 +3315,17 @@ Duration: %4 Viewer - + Sequence Viewer - + Media Viewer - + (none) @@ -3316,57 +3333,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... - + Show Fullscreen - + Disable - + Screen %1: %2x%3 - + Zoom - + Fit - + Custom - + Close Media - + Save Frame - + Viewer Zoom - + Set Custom Zoom Value: @@ -3403,12 +3420,12 @@ Duration: %4 transition - + Invalid transition - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. diff --git a/ts/olive_cs.ts b/ts/olive_cs.ts index d9e8bcf2f..2e03ff4b5 100644 --- a/ts/olive_cs.ts +++ b/ts/olive_cs.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. Olive je nelineární editor obrazového záznamu. Tento program je zdarma a chráněn GNU GPL. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. Družstvo Olive se dává na vědomí, že zdrojové kódy Olive jsou dostupné pro stažení na internetové stránce projektu. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... Hledat činnost... @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings Pokročilá nastavení obrazu - + Pixel Format: Formát pixelu: @@ -38,25 +38,33 @@ Audio - Audio - Zvuk + Zvuk - Recording - Nahrávání + Nahrávání + + + + %1 Audio + + + + + Recording %1 + AudioNoiseEffect - + Amount Množství - + Mix Smíchat @@ -64,17 +72,17 @@ ChannelLayoutName - + Invalid Neplatný - + Mono Mono - + Stereo Stereo @@ -82,7 +90,7 @@ CollapsibleWidget - + <untitled> <bez názvu> @@ -91,7 +99,7 @@ ColorButton - + Set Color Nastavit barvu @@ -99,27 +107,27 @@ CornerPinEffect - + Top Left Nahoře vlevo - + Top Right Nahoře vpravo - + Bottom Left Dole vlevo - + Bottom Right Dole vpravo - + Perspective Perspektiva @@ -127,7 +135,7 @@ DebugDialog - + Debug Log Zápis ladění @@ -135,23 +143,23 @@ DemoNotice - - + + Welcome to Olive! Vítejte v Olive! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. Olive je editor obrazového záznamu s otevřeným zdrojovým kódem vydaný pod GNU GPL. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 Tento program je v současnosti v Alfa verzi, což znamená, že je nestálý a velice pravděpodobně náchylný k pádům, má chyby a chybí mu funkce. Není poskytována žádná záruka, takže jej používejte na vlastní nebezpečí. Hlašte, prosím, jakékoli chyby nebo žádosti o funkce na %1 - + Thank you for trying Olive and we hope you enjoy it! Děkujeme vám za zkoušení Olive. Přejeme si, aby vám dělal radost! @@ -159,89 +167,89 @@ Effect - + Invalid effect Neplatný efekt - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. Žádný uchazeč pro efekt '%1'. Tento přechod může být poškozen. Pokuste se jej nebo Olive znovu nainstalovat. - + Cu&t Vyjmou&t - + &Copy &Kopírovat - + Move &Up Posunout &nahoru - + Move &Down Posunout &dolů - + D&elete S&mazat - + Load Settings From File Nahrát nastavení ze souboru - + Save Settings to File Uložit nastavení do souboru - + Save Effect Settings Uložit nastavení efektu - - + + Effect XML Settings %1 Nastavení XML efektu %1 - + Save Settings Failed Nastavení se nepodařilo uložit - + Failed to open "%1" for writing. Nepodařilo se otevřít "%1" pro zápis. - + Load Effect Settings Nahrát nastavení efektu - - + + Load Settings Failed Nastavení se nepodařilo nahrát - + Failed to open "%1" for reading. Nepodařilo se otevřít "%1" pro čtení. - + This settings file doesn't match this effect. Tento soubor s nastavením neodpovídá tomuto efektu. @@ -249,47 +257,52 @@ EffectControls - + Effects: Efekty: - + &Paste &Vložit - + + (none) + (žádný) + + + Add Video Effect Přidat obrazový efekt - + VIDEO EFFECTS OBRAZOVÉ EFEKTY - + Add Video Transition Přidat obrazový přechod - + Add Audio Effect Přidat zvukový efekt - + AUDIO EFFECTS ZVUKOVÉ EFEKTY - + Add Audio Transition Přidat zvukový přechod - + (Multiple clips selected) (vybráno více záběrů) @@ -297,12 +310,12 @@ EffectRow - + Disable Keyframes Zakázat klíčové snímky - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? Zákázání klíčových snímků smaže všechny nynější klíčové snímky. Opravdu to chcete udělat? @@ -310,7 +323,7 @@ EmbeddedFileChooser - + File: Soubor: @@ -318,98 +331,98 @@ ExportDialog - + Export "%1" Vyvést "%1" - + Unknown codec name %1 Neznámý název kodeku %1 - + Export Failed Nepodařilo se vyvést - + Export failed - %1 Nepodařilo se vyvést - %1 - + Invalid dimensions Neplatné rozměry - + Export width and height must both be even numbers/divisible by 2. Šířka a výška pro vyvedení musí být sudá čísla dělitelná 2. - + Invalid codec Neplatný kodek - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. Nepodařilo se určit výstupní parametry pro vybraný kodek. Toto je chyba. Spojte se, prosím, s vývojáři. - + Invalid format Neplatný formát - + Couldn't determine output format. This is a bug, please contact the developers. Nepodařilo se určit výstupní formát. Toto je chyba. Spojte se, prosím, s vývojáři. - + Export Media Vyvést záznam - + Quality-based (Constant Rate Factor) Kvalita (Constant Rate Factor) - + Constant Bitrate Stálý datový tok - - + + Invalid Codec Neplatný kodek - + Failed to find a suitable encoder for this codec. Export will likely fail. Nepodařilo se najít vhodný kodér pro tento kodek. Vyvedení pravděpodobně selže. - + Failed to find pixel format for this encoder. Export will likely fail. Nepodařilo se najít formát pixelu pro tento kodér. Vyvedení pravděpodobně selže. - + Bitrate (Mbps): Datový tok (MB/s): - + Quality (CRF): Kvalita (CRF): - + Quality Factor: 0 = lossless @@ -424,73 +437,78 @@ 51 = nejnižší možná jakost - + Target File Size (MB): Velikost cílového souboru (MB): - + Format: Formát: - + Range: Rozsah: - + Entire Sequence Celá sekvence - + In to Out Vstup do výstupu - + Video Obraz - - + + Codec: Kodek: - + Width: Šířka: - + Height: Výška: - + Frame Rate: Snímkování: - + Compression Type: Typ komprese: - + Advanced Pokročilé - + + Audio + Zvuk + + + Sampling Rate: Rychlost vzorkování: - + Bitrate (Kbps/CBR): Datový tok (KB/s/stálý datový tok): @@ -498,87 +516,87 @@ ExportThread - + failed to send frame to encoder (%1) Chyba při poslání snímku kodéru (%1) - + failed to receive packet from encoder (%1) Chyba při přijetí paketu od kodéru (%1) - + could not video encoder for %1 Nepodařilo se najít kodér obrazu pro %1 - + could not allocate video stream Nepodařilo se přiřadit datový proud obrazu - + could not allocate video encoding context Nepodařilo se přiřadit kontext kódování obrazu - + could not open output video encoder (%1) Nepodařilo se otevřít kodér obrazu (%1) - + could not copy video encoder parameters to output stream (%1) Nepodařilo se kopírovat parametry kodéru obrazu do výstupního proudu (%1) - + could not audio encoder for %1 Nepodařilo se najít kodér zvuku pro %1 - + could not allocate audio stream Nepodařilo se přiřadit datový proud zvuku - + could not allocate audio encoding context Nepodařilo se přiřadit kontext kódování zvuku - + could not open output audio encoder (%1) Nepodařilo se otevřít kodér zvuku (%1) - + could not copy audio encoder parameters to output stream (%1) Nepodařilo se kopírovat parametry kodéru zvuku do výstupního proudu (%1) - + could not allocate audio buffer (%1) Nepodařilo se přiřadit vyrovnávací paměť zvuku (%1) - + could not create output format context Nepodařilo se vytvořit kontext výstupního formátu - + could not open output file (%1) Nepodařilo se otevřít výstupní soubor (%1) - + could not write output file header (%1) Nepodařilo se zapsat hlavičku výstupního souboru (%1) - + could not write output file trailer (%1) Nepodařilo se zapsat ukázku výstupního souboru (%1) @@ -586,17 +604,17 @@ FillLeftRightEffect - + Type Typ - + Fill Left with Right Vyplnit levý pravým - + Fill Right with Left Vyplnit pravý levým @@ -604,22 +622,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 Nepodařilo se nahrát přídavný modul Frei0r "%1": %2 - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. Poznámka: Nemůžete nahrát 32 bitové přídavné moduly Frei0r do 64 bitového sestavení Olive. Najděte, prosím, 64 bitovou verzi tohoto přídavného modulu nebo přepněte na 32 bitové sestavení Olive. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. Poznámka: Nemůžete nahrát 64 bitové přídavné moduly Frei0r do 32 bitového sestavení Olive. Najděte, prosím, 32 bitovou verzi tohoto přídavného modulu nebo přepněte na 64 bitové sestavení Olive. - + Error loading Frei0r plugin Chyba při nahrávání přídavného modulu Frei0r @@ -627,22 +645,22 @@ GraphEditor - + Graph Editor Editor grafu - + Linear Lineární - + Bezier Bézier - + Hold Držet @@ -650,17 +668,17 @@ GraphView - + Zoom to Selection Přiblížit na výběr - + Zoom to Show All Přiblížit pro ukázání všeho - + Reset View Obnovit výchozí zvětšení @@ -668,22 +686,22 @@ InterlacingName - + None (Progressive) Žádný (progresivní) - + Top Field First Nejprve horní pole - + Bottom Field First Nejprve dolní pole - + Invalid Neplatný @@ -691,7 +709,7 @@ KeyframeNavigator - + Enable Keyframes Povolit klíčové snímky @@ -699,17 +717,17 @@ KeyframeView - + Linear Lineární - + Bezier Bézier - + Hold Držet @@ -717,14 +735,14 @@ LabelSlider - - + + Set Value Nastavit hodnotu - - + + New value: Nová hodnota: @@ -732,17 +750,17 @@ LoadDialog - + Loading... Nahrává se... - + Loading '%1'... Nahrává se '%1'... - + Cancel Zrušit @@ -750,52 +768,52 @@ LoadThread - + Version Mismatch Rozdílná verze - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Tento projekt byl uložen v jiné verzi Olive a nemusí být plně slučitelný s touto verzí. Přesto se jej chcete pokusit nahrát? - + Invalid Clip Link Neplatný odkaz na záběr - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? Tento projekt obsahuje neplatný odkaz na záběr. Tento může být poškozen. Chcete pokračovat v jeho nahrávání? - + %1 - Line: %2 Col: %3 %1 - Řádek: %2 Sloupec: %3 - + User aborted loading Uživatelem přerušené nahrávání - + XML Parsing Error Chyba při zpracování XML - + Couldn't load '%1'. %2 Nepodařilo se nahrát '%1'. %2 - + Project Load Error Chyba při nahrávání projektu - + Error loading project: %1 Chyba při nahrávání projektu: %1 @@ -803,426 +821,399 @@ MainWindow - + Welcome to %1 Vítejte v %1 - Auto-recovery - Automatické obnovení + Automatické obnovení - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - Olive nebyl zavřen řádně a byl zjištěn soubor pro automatické obnovení. Chcete jej otevřít? + Olive nebyl zavřen řádně a byl zjištěn soubor pro automatické obnovení. Chcete jej otevřít? - &Project - &Projekt + &Projekt - &Sequence - &Sekvence + &Sekvence - &Folder - &Složka + &Složka - Set In Point - Nastavit bod začátku + Nastavit bod začátku - Set Out Point - Nastavit bod konce + Nastavit bod konce Enable/Disable In/Out Point Povolit/Zakázat bod začátku/konce - Reset In Point - Obnovit výchozí bod začátku + Obnovit výchozí bod začátku - Reset Out Point - Obnovit výchozí bod konce + Obnovit výchozí bod konce - Clear In/Out Point - Vymazat bod začátku/konce + Vymazat bod začátku/konce - No active sequence - Žádná činná sekvence + Žádná činná sekvence - Please open the sequence you wish to export. - Otevřete, prosím, sekvenci, již chcete vyvést. + Otevřete, prosím, sekvenci, již chcete vyvést. - Save Project As... - Uložit projekt jako... + Uložit projekt jako... - Unsaved Project - Neuložený projekt + Neuložený projekt - This project has changed since it was last saved. Would you like to save it before closing? - Tento projekt se od doby, kdy byl naposledy uložen, změnil. Chcete jej před zavřením uložit? + Tento projekt se od doby, kdy byl naposledy uložen, změnil. Chcete jej před zavřením uložit? - + &File &Soubor - + &New &Nový - + &Open Project &Otevřít projekt - + Clear Recent List Vyprázdnit seznam naposledy otevřených souborů - + Open Recent Otevřít nedávné - + &Save Project &Uložit projekt - + Save Project &As Uložit projekt j&ako - + &Import... &Zavést... - + &Export... &Vyvést... - + E&xit &Ukončit - + &Edit Úp&ravy - + &Undo &Zpět - + Redo Znovu - Cu&t - Vyjmou&t + Vyjmou&t - Cop&y - &Kopírovat + &Kopírovat - &Paste - &Vložit + &Vložit - Paste Insert - Vložit vložku + Vložit vložku - Duplicate - Zdvojit + Zdvojit - Delete - Smazat + Smazat - Ripple Delete - Vytáhnout + Vytáhnout - Split - Rozdělit + Rozdělit - + Select &All Vybrat &vše - + Deselect All Zrušit výběr všeho - Add Default Transition - Přidat výchozí přechod + Přidat výchozí přechod - Link/Unlink - Spojit/Oddělit + Spojit/Oddělit - Enable/Disable - Povolit/Zakázat + Povolit/Zakázat - Nest - Vnořovat + Vnořovat - + Ripple to In Point Vložit a posunout k bodu začátku - + Ripple to Out Point Vložit a posunout k bodu konce - + Edit to In Point Upravit po bod začátku - + Edit to Out Point Upravit po bod konce - + Delete In/Out Point Smazat bod začátku/konce - + Ripple Delete In/Out Point Vytáhnout bod začátku/konce - + Set/Edit Marker Nastavit/Upravit značku - + &View &Pohled - + Zoom In Přiblížit - + Zoom Out Oddálit - + Increase Track Height Zvětšit výšku stopy - + Decrease Track Height Zmenšit výšku stopy - + Toggle Show All Přepnout ukázání všeho - + Track Lines Řádky stop - + Rectified Waveforms Vlnový tvar odspodu - + Frames Snímky - + Drop Frame Zahodit snímek - + Non-Drop Frame Nezahodit snímek - + Milliseconds Milisekundy - + Title/Action Safe Area Bezpečná oblast - + Off Vypnuto - + Default Výchozí - + 4:3 4:3 - + 16:9 16:9 - + Custom Vlastní - + Full Screen Celá obrazovka - + Full Screen Viewer Prohlížeč na celou obrazovku - + &Playback &Přehrávání - + Go to Start Jít na začátek - + Previous Frame Předchozí snímek - + Play/Pause Přehrát/Pozastavit - + Play In to Out Přehrát od začátku po konec - + Next Frame Další snímek - + Go to End Jít na konec - + Go to Previous Cut Jít na předchozí záběr - + Go to Next Cut Jít na další záběr - + Go to In Point Jít na bod začátku - + Go to Out Point Jít na bod konce - + Shuttle Left Jezdit tam a zpět vlevo - + Shuttle Stop Zastavit pendlování - + Shuttle Right Jezdit tam a zpět vpravo @@ -1239,275 +1230,272 @@ Zvýšit rychlost - + Loop Smyčka - + &Window &Okno - + Project Projekt - + Effect Controls Ovládání efektů - + Timeline Časová osa - + Graph Editor Editor grafu - + Media Viewer Prohlížeč záznamu - + Sequence Viewer Prohlížeč řady - + Maximize Panel Zvětšit panel - + + Lock Panels + + + + Reset to Default Layout Obnovit výchozí rozvržení - + &Tools &Nástroje - + Pointer Tool Ukazovátko - + Edit Tool Nástroj pro úpravy - + Ripple Tool Vložení a posunutí - + Razor Tool Nástroj břitvy - + Slip Tool Roztočení se ztotožněním - + Slide Tool Roztočení - + Hand Tool Ručička - + Transition Tool Přechod - + Enable Snapping Povolit přichytávání - + Selecting Also Seeks Výběr také vyhledává - + Edit Tool Also Seeks Nástroj pro úpravy také vyhledává - + Edit Tool Selects Links Nástroj pro úpravy vybírá odkazy - + Seek Also Selects Vyhledávání také vybírá - + Seek to the End of Pastes Vyhledávat po konec vložení - + Scroll Wheel Zooms Kolečko myši přibližuje - + Enable Drag Files to Timeline Povolit tažení souborů na časovou osu - + Auto-Scale By Default Automaticky měnit velikost - + Enable Seek to Import Povolit vyhledávání k zavedení - + Audio Scrubbing Přehrávání zvuku při tažení ukazatele - + Enable Drop on Media to Replace Povolit upuštění na záznam pro nahrazení - + Enable Hover Focus Povolit zaměření při přejetí - + Ask For Name When Setting Marker Požádat o název při nastavení značky - + No Auto-Scroll Žádné automatické projíždění - + Page Auto-Scroll Stránkové automatické projíždění - + Smooth Auto-Scroll Jemné automatické projíždění - + Preferences Nastavení - + Clear Undo Vyprázdnit minulost kroků zpět - + &Help Nápo&věda - + A&ction Search Hledání č&inností - + Debug Log Zápis ladění - + &About... &O programu... - + <untitled> <bez názvu> - Open Project... - Otevřít projekt... + Otevřít projekt... - Missing recent project - Chybí nedávný projekt + Chybí nedávný projekt - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - Projekt '%1' už neexistuje. Chcete jej odstranit ze seznamu nedávných projektů? + Projekt '%1' už neexistuje. Chcete jej odstranit ze seznamu nedávných projektů? - Invalid aspect ratio - Neplatný poměr stran + Neplatný poměr stran - The aspect ratio '%1' is invalid. Please try again. - Poměr stran '%1' je neplatný. Zkuste to, prosím, znovu. + Poměr stran '%1' je neplatný. Zkuste to, prosím, znovu. - Enter custom aspect ratio - Zadat vlastní poměr stran + Zadat vlastní poměr stran - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - Zadejte poměr stran k použití pro bezpečnou oblast (např. 16:9): + Zadejte poměr stran k použití pro bezpečnou oblast (např. 16:9): - Nested Sequence - Vnořená řada + Vnořená řada Marker - + Set Marker Nastavit značku - + Set clip marker name: Nastavit název značky záběru: - + Set sequence marker name: Nastavit název značky sekvence: @@ -1515,27 +1503,27 @@ Media - + New Folder Nová složka - + Name: Název: - + Filename: Název souboru: - + Video Dimensions: Rozměry obrazu: - + Frame Rate: Snímkování: @@ -1544,27 +1532,27 @@ %1 polí (%2 snímků) - + %1 field(s) (%2 frame(s)) %1 pole(í) (%2 snímek(y)) - + Interlacing: Prokládání: - + Audio Frequency: Kmitočet zvuku: - + Audio Channels: Zvukové kanály: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1577,17 +1565,17 @@ Kmitočet zvuku: %5 Rozložení zvuku: %6 - + Name Název - + Duration Doba trvání - + Rate Rychlost @@ -1595,17 +1583,17 @@ Rozložení zvuku: %6 MediaPropertiesDialog - + "%1" Properties "%1" Vlastnosti - + Tracks: Stopy: - + Video %1: %2x%3 %4FPS Obraz %1: %2x%3 %4 FPS @@ -1614,12 +1602,12 @@ Rozložení zvuku: %6 Zvuk %1: %2Hz %3 kanálů - + Audio %1: %2Hz %3 Zvuk %1: %2Hz %3 - + %n channel(s) %n kanál @@ -1628,163 +1616,354 @@ Rozložení zvuku: %6 - + Conform to Frame Rate: Odpovídá snímkování: - + Alpha is Premultiplied Alfa je předznásobena - + Auto (%1) Auto (%1) - + Interlacing: Prokládání: - + Name: Název: + + MenuHelper + + + &Project + &Projekt + + + + &Sequence + &Sekvence + + + + &Folder + &Složka + + + + Set In Point + Nastavit bod začátku + + + + Set Out Point + Nastavit bod konce + + + + Reset In Point + Obnovit výchozí bod začátku + + + + Reset Out Point + Obnovit výchozí bod konce + + + + Clear In/Out Point + Vymazat bod začátku/konce + + + + Add Default Transition + Přidat výchozí přechod + + + + Link/Unlink + Spojit/Oddělit + + + + Enable/Disable + Povolit/Zakázat + + + + Nest + Vnořovat + + + + Cu&t + Vyjmou&t + + + + Cop&y + &Kopírovat + + + + &Paste + &Vložit + + + + Paste Insert + Vložit vložku + + + + Duplicate + Zdvojit + + + + Delete + Smazat + + + + Ripple Delete + Vytáhnout + + + + Split + Rozdělit + + + + Invalid aspect ratio + Neplatný poměr stran + + + + The aspect ratio '%1' is invalid. Please try again. + Poměr stran '%1' je neplatný. Zkuste to, prosím, znovu. + + + + Enter custom aspect ratio + Zadat vlastní poměr stran + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + Zadejte poměr stran k použití pro bezpečnou oblast (např. 16:9): + + NewSequenceDialog - + Editing "%1" Upravení "%1" - + New Sequence Nová řada - + Preset: Přednastavení: - + Film 4K Film 4K - + TV 4K (Ultra HD/2160p) TV 4K (Ultra HD/2160p) - + 1080p 1080p - + 720p 720p - + 480p 480p - + 360p 360p - + 240p 240p - + 144p 144p - + NTSC (480i) NTSC (480i) - + PAL (576i) PAL (576i) - + Custom Vlastní - + Video Obraz - + Width: Šířka: - + Height: Výška: - + Frame Rate: Snímkování: - + Pixel Aspect Ratio: Poměr stran pixelu: - + Square Pixels (1.0) Čtvercové pixely (1.0) - + Interlacing: Prokládání: - + None (Progressive) Žádné (progresivní) - + Audio Zvuk - + Sample Rate: Vzorkovací kmitočet: - + Name: Název: + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + Automatické obnovení + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + Olive nebyl zavřen řádně a byl zjištěn soubor pro automatické obnovení. Chcete jej otevřít? + + + + Open Project... + Otevřít projekt... + + + + Missing recent project + Chybí nedávný projekt + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + Projekt '%1' už neexistuje. Chcete jej odstranit ze seznamu nedávných projektů? + + + + Save Project As... + Uložit projekt jako... + + + + Unsaved Project + Neuložený projekt + + + + This project has changed since it was last saved. Would you like to save it before closing? + Tento projekt se od doby, kdy byl naposledy uložen, změnil. Chcete jej před zavřením uložit? + + + + No active sequence + + + + + Please open the sequence you wish to export. + Otevřete, prosím, sekvenci, již chcete vyvést. + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan Vyvážení @@ -1792,176 +1971,173 @@ Rozložení zvuku: %6 Playback - Generating Proxy: %1% - Vytvoření proxy: %1% + Vytvoření proxy: %1% PreferencesDialog - + Preferences Nastavení - + Invalid CSS File Neplatný soubor CSS - + CSS file '%1' does not exist. Soubor CSS '%1' neexistuje. - Warning - Varování + Varování - Some changed settings will require restarting Olive to take effect - Některá změněná nastavení budou, aby se projevila, vyžadovat opětovné spuštění Olive + Některá změněná nastavení budou, aby se projevila, vyžadovat opětovné spuštění Olive - + Confirm Reset All Shortcuts Potvrdit obnovení výchozího nastavení všech klávesových zkratek - + Are you sure you wish to reset all keyboard shortcuts to their defaults? Jste si jistý, že chcete vrátit nastavení všech klávesových zkratek do jejich výchozího stavu? - + Import Keyboard Shortcuts Zavést klávesové zkratky - - + + Error saving shortcuts Chyba při ukládání klávesových zkratek - + Failed to open file for reading Soubor se nepodařilo otevřít pro čtení - + Export Keyboard Shortcuts Vyvést klávesové zkratky - + Export Shortcuts Vyvést zkratky - + Shortcuts exported successfully Zkratky úspěšně vyvedeny - + Failed to open file for writing Soubor se nepodařilo otevřít pro zápis - + Browse for CSS file Hledat soubor CSS - + Delete All Previews Smazat všechny náhledy - + Are you sure you want to delete all previews? Opravdu chcete smazat všechny náhledy? - + Previews Deleted Náhledy smazány - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. Všechny náhledy byly úspěšně smazány. Možná budete muset nynější projekt otevřít znovu, aby se změny projevily. - + Language: Jazyk: - + Custom CSS: Vlastní CSS: - + Browse Procházet - + Image sequence formats: Formáty obrázkové řady: - + Audio Recording: Nahrávání zvuku: - + Mono Mono - + Stereo Stereo - + Effect Textbox Lines: Řádky textového pole efektu: - + Thumbnail Resolution: Rozlišení náhledu: - + Waveform Resolution: Rozlišení tvaru vlny: - + Delete Previews Smazat náhledy - + Use Software Fallbacks When Possible Zajištění skrze softwarovou zálohu - + General Obecné - + Behavior Chování @@ -1970,119 +2146,119 @@ Rozložení zvuku: %6 Zakázat vytvoření více vláken v jednom procesu na obrázky - + Seeking Vyhledávání - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) Přesné vyhledávání Vždy ukazovat správný snímek (obraz se při získávání správného snímku může na krátkou dobu pozastavit) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) Rychlé vyhledávání Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - neovlivňuje přehrávání/vyvádění) - + Memory Usage Využití paměti - + Upcoming Frame Queue: Nadcházející řada snímků: - - + + frames snímků - - + + seconds sekund - + Previous Frame Queue: Předchozí řada snímků: - + Playback Přehrávání - + Output Device: Výstupní zařízení: - - + + Default Výchozí - + Input Device: Vstupní zařízení: - + Sample Rate: Vzorkovací kmitočet: - + Audio Zvuk - + Search for action or shortcut Hledat činnosti nebo klávesové zkratky - + Action Činnost - + Shortcut Zkratka - + Import Zavést - + Export Vyvést - + Reset Selected Obnovit výchozí hodnotu u vybraného - + Reset All Obnovit výchozí hodnotu u všeho - + Keyboard Klávesnice @@ -2090,12 +2266,12 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - PreviewGenerator - + Could not open file - %1 Nepodařilo se otevřít soubor - %1 - + Could not find stream information - %1 Nepodařilo se najít údaje o proudu - %1 @@ -2103,94 +2279,94 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - Project - + Search media, markers, etc. Hledat záznam, značky atd. - + Project Projekt - + Sequence Řada - + Replace '%1' Nahradit '%1' - - + + All Files Všechny soubory - - + + No active sequence Žádná činná řada - + No sequence is active, please open the sequence you want to replace clips from. Žádná řada není činná. Otevřete, prosím, řadu, ve které chcete nahradit záběry. - + Active sequence selected Vybrána činná řada - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. Sekvenci nemůžete vložit do ní samé, aby žádné záběry z tohoto záznamu nebyly v této sekvenci. - + Rename '%1' Přejmenovat '%1' - + Enter new name: Zadat nový název: - + Delete media in use? Smazat používaný záznam? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? Záznam '%1' se nyní používá v '%2'. Jeho smazání odstraní všechny instance v řadě. Opravdu to chcete udělat? - + Skip Přeskočit - + Image sequence detected Zjištěna obrázková řada - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? Soubor '%1' se zdá být součástí obrázkové řady. Chcete ji zavést jako takovou? - + Import media... Zavést záznam... - + No sequence is active, please open the sequence you want to delete clips from. Žádná řada není činná. Otevřete, prosím, řadu, ve které chcete smazat záběry. @@ -2198,52 +2374,52 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - ProxyDialog - + Create Proxy Vytvořit proxy - + Proxy Proxy - + Dimensions: Rozměry: - + Same Size as Source Stejná velikost jako zdroj - + Half Resolution (1/2) Poloviční rozlišení (1/2) - + Quarter Resolution (1/4) Čtvrtinové rozlišení (1/4) - + Eighth Resolution (1/8) Osminové rozlišení (1/8) - + Sixteenth Resolution (1/16) Šestnáctinové rozlišení (1/16) - + Format: Formát: - + ProRes HQ ProRes HQ @@ -2264,27 +2440,27 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - H.264 - + Location: Umístění: - + Same as Source (in "%1" folder) Stejné jako zdroj (ve složce "%1") - + Proxy file exists Soubor proxy existuje - + The file "%1" already exists. Do you wish to replace it? Soubor "%1" již existuje. Chcete jej nahradit? - + Custom Location Vlastní umístění @@ -2292,7 +2468,7 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - ProxyGenerator - + Finished generating proxy for "%1" Dokončeno vytvoření proxy pro "%1" @@ -2300,67 +2476,67 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - ReplaceClipMediaDialog - + Replace clips using "%1" Nahradit záběry pomocí "%1" - + Select which media you want to replace this media's clips with: Vyberte, kterým záznamem chcete nahradit záběry tohoto záznamu: - + Keep the same media in-points Zachovat stejné začáteční body záznamu - + Replace Nahradit - + Cancel Zrušit - + No media selected Nevybrán žádný záznam - + Please select a media to replace with or click 'Cancel'. Vyberte, prosím, záznam k nahrazení nebo klepněte na Zrušit. - + Same media selected Vybrán stejný záznam - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. Vybral jste stejný záznam, jejž chcete nahradit. Vyberte, prosím, jiný nebo klepněte na Zrušit. - + Folder selected Složka vybrána - + You cannot replace footage with a folder. Záběry nemůžete nahradit složkou. - + Active sequence selected Vybrána činná řada - + You cannot insert a sequence into itself. Nemůžete vložit řadu do ní samé. @@ -2368,7 +2544,7 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - Sequence - + %1 (copy) %1 (kopírovat) @@ -2376,17 +2552,17 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - ShakeEffect - + Intensity Síla - + Rotation Otočení - + Frequency Kmitočet @@ -2394,37 +2570,37 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - SolidEffect - + Type Typ - + Solid Color Plná barva - + SMPTE Bars Pruhy SMPTE - + Checkerboard Šachovnice - + Opacity Neprůhlednost - + Color Barva - + Checkerboard Size Velikost šachovnice @@ -2432,137 +2608,142 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - SourcesCommon - + Import... Zavést... - + New Nový - + View Pohled - + Tree View Stromový pohled - + Icon View Pohled s ikonami - + Show Toolbar Ukázat nástrojový pruh - + Show Sequences Ukázat řady - + Replace/Relink Media Nahradit/Znovuspojit záznamy - + Reveal in Explorer Ukázat v průzkumníku - + Reveal in Finder Ukázat v hledači - + Reveal in File Manager Ukázat ve správci souborů - + Replace Clips Using This Media Nahradit záběry pomocí tohoto záznamu - + Create Sequence With This Media Vytvořit řadu pomocí tohoto záznamu - + Duplicate Zdvojit - + Delete All Clips Using This Media Smazat všechny záběry pomocí tohoto záznamu - + Proxy Proxy - + Generating proxy: %1% complete Vytvoření proxy: %1% hotovo - + Create/Modify Proxy Vytvořit/Změnit proxy - + Create Proxy Vytvořit proxy - + Modify Proxy Změnit proxy - + Restore Original Obnovit původní - + Delete Smazat - + + Preview in Media Viewer + + + + Properties... Vlastnosti... - + Replace Media Nahradit záznam - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? Upustil jste soubor na '%1'. Chcete jej nahradit upuštěným souborem? - + Delete proxy Smazat proxy - + Would you like to delete the proxy file "%1" as well? Chcete smazat i soubor proxy "%1"? @@ -2570,37 +2751,37 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - SpeedDialog - + Speed/Duration Rychlost/Doba trvání - + Speed: Rychlost: - + Frame Rate: Snímkování: - + Duration: Doba trvání: - + Reverse Obrátit - + Maintain Audio Pitch Udržovat výšku tónu zvuku - + Ripple Changes Změny vytažení @@ -2608,7 +2789,7 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - TextEditDialog - + Edit Text Upravit text @@ -2616,113 +2797,118 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - TextEffect - + Text Text - + Font Písmo - + Size Velikost - + Color Barva - + Alignment Zarovnání - + Left Vlevo - - + + Center Na střed - + Right Vpravo - + Justify Do bloku - + Top Nahoře - + Bottom Dole - + Word Wrap Zalamování slov - + Outline Obrys - + Outline Color Barva obrysu - + Outline Width Šířka obrysu - + Shadow Stín - + Shadow Color Barva stínu - + + Shadow Angle + + + + Shadow Distance Vzdálenost stínu - + Shadow Softness Měkkost stínu - + Shadow Opacity Neprůhlednost stínu - + Sample Text Text příkladu - + &Edit Text &Upravit text @@ -2730,47 +2916,47 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - TimecodeEffect - + Timecode Časový kód - + Sequence Řada - + Media Záznamy - + Scale Měřítko - + Color Barva - + Background Color Barva pozadí - + Background Opacity Neprůhlednost pozadí - + Offset Posun - + Prepend Uvést na začátku @@ -2778,42 +2964,41 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - Timeline - + Timeline: Časová osa: - <none> - <žádná> + <žádná> - + Effect already exists Efekt již existuje - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? Záběr '%1' již obsahuje '%2' efekt. Chcete jej nahradit vloženým nebo jej přidat jako samostatný efekt? - + Add Přidat - + Replace Nahradit - + Skip Přeskočit - + Do this for all conflicts found Použít na všechny nalezené střety @@ -2826,115 +3011,125 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - Nastavit název značky: - + Title... Název... - + Solid Color... Plná barva... - + Bars... Zkušební tabulka... - + Tone... Tón... - + Noise... Šum... - + Unsaved Project Neuložený projekt - + You must save this project before you can record audio in it. Musíte tento projekt uložit, předtím než do něj můžete nahrát zvuk. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) Klepněte na časovou osu, kde chcete začít s nahráváním (táhněte pro omezení nahrávky na určitý časový snímek) - + Pointer Tool Nástroj ukazovátka - + Edit Tool Nástroj pro úpravy - + Ripple Tool Nástroj pro vložení a posunutí - + Razor Tool Nástroj břitvy - + Slip Tool Roztočení se ztotožněním - + Slide Tool Roztočení - + Hand Tool Nástroj ručičky - + Transition Tool Nástroj pro přechod - + Snapping Přichytávání - + Zoom In Přiblížit - + Zoom Out Oddálit - + Record audio Nahrát zvuk - + Add title, solid, bars, etc. Přidat název, plný, zkušební tabulky atd. + + + Nested Sequence + Vnořená řada + + + + (none) + (žádný) + TimelineHeader - + Center Timecodes Vystředit časové kódy @@ -2942,77 +3137,74 @@ Vyhledávat rychle (při hledání se mohou krátce ukázat nepřesné snímky - TimelineWidget - + &Undo &Zpět - + &Redo &Znovu - + C&ut Vyj&mout - + Cop&y &Kopírovat - + &Paste &Vložit - + R&ipple Delete &Vytáhnout (smazat a posunout) - + Sequence Settings Nastavení sekvence - + &Speed/Duration &Rychlost/Doba trvání - + Auto-s&cale Automatická &změna velikosti - Enable/Disable - Povolit/Zakázat + Povolit/Zakázat - Link/Unlink - Spojit/Oddělit + Spojit/Oddělit - &Nest - &Vnořovat + &Vnořovat - + &Reveal in Project &Odkrýt v projektu - + R&ename &Přejmenovat - + %1 Start: %2 End: %3 @@ -3023,57 +3215,57 @@ Konec: %3 Doba trvání: %4 - + Rename '%1' Přejmenovat '%1' - + Rename multiple clips Přejmenovat více záběrů - + Enter a new name for this clip: zadejte nový název pro tento záběr: - + Error Chyba - + Couldn't locate media wrapper for sequence. Nepodařilo se najít obal záznamu pro tuto řadu. - + Title Název - + Solid Color Plná barva - + Bars Zkušební tabulka - + Tone Tón - + Noise Šum - + Duration: Doba trvání: @@ -3081,22 +3273,22 @@ Doba trvání: %4 ToneEffect - + Type Typ - + Frequency Kmitočet - + Amount Množství - + Mix Směs @@ -3104,157 +3296,157 @@ Doba trvání: %4 TransformEffect - + Position Poloha - + Scale Měřítko - + Uniform Scale Jednotné měřítko - + Rotation Otočení - + Anchor Point Bod ukotvení - + Opacity Neprůhlednost - + Blend Mode Režim mísení - + Normal Normální - + Darken Ztmavit - + Multiply Znásobit - + Color Burn Vypálení barvy - + Linear Burn Přímé vypálení - + Lighten Vypálit - + Screen Obrazovka - + Color Dodge Uskočení barvy - + Linear Dodge (Add) Lineární uskočení (Přidat) - + Overlay Překrytí - + Soft Light Tlumené světlo - + Hard Light Ostré světlo - + Vivid Light Jasné světlo - + Linear Light Přímé světlo - + Pin Light Připíchnout světlo - + Hard Mix Tvrdá směs - + Difference Rozdíl - + Exclusion Ohraničení - + Reflect Zrcadlit - + Substract Odečíst - + Average Průměr - + Glow Záře - + Negation Odmítnutí - + Phoenix Fénix @@ -3266,7 +3458,7 @@ Doba trvání: %4 Délka: - + Length Délka @@ -3274,64 +3466,64 @@ Doba trvání: %4 VSTHost - - - + + + Error loading VST plugin Chyba při nahrávání přídavného modulu VST - + Failed to create VST reference Nepodařilo se vytvořit odkaz na VST - + Failed to load VST plugin "%1": %2 Nepodařilo se nahrát přídavný modul "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. Poznámka: Nemůžete nahrát 32 bitové přídavné moduly VST do 64 bitového sestavení Olive. Najděte, prosím, 64 bitovou verzi tohoto přídavného modulu nebo přepněte na 32 bitové sestavení Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. Poznámka: Nemůžete nahrát 64 bitové přídavné moduly VST do 32 bitového sestavení Olive. Najděte, prosím, 32 bitovou verzi tohoto přídavného modulu nebo přepněte na 64 bitové sestavení Olive. - + Failed to locate entry point for dynamic library. Nepodařilo se najít vstupní bod pro dynamickou knihovnu. - + VST Error Chyba VST - + Plugin's magic number is invalid Kouzelné číslo přídavného modulu je neplatné - + Plugin Přídavný modul - + Interface Rozhraní - + Show Ukázat - + VST Plugin Přídavný modul VST @@ -3339,17 +3531,17 @@ Doba trvání: %4 Viewer - + Sequence Viewer Prohlížeč řady - + Media Viewer Prohlížeč záznamu - + (none) (žádný) @@ -3357,57 +3549,57 @@ Doba trvání: %4 ViewerWidget - + Save Frame as Image... Uložit snímek jako obrázek... - + Show Fullscreen Ukázat na celou obrazovku - + Disable Zakázat - + Screen %1: %2x%3 Obrazovka %1: %2x%3 - + Zoom Zvětšení - + Fit Vejít se - + Custom Vlastní - + Close Media Zavřít záznam - + Save Frame Uložit snímek - + Viewer Zoom Zvětšení prohlížeče - + Set Custom Zoom Value: Nastavit vlastní hodnotu zvětšení: @@ -3415,7 +3607,7 @@ Doba trvání: %4 ViewerWindow - + Exit Fullscreen Opustit celou obrazovku @@ -3423,12 +3615,12 @@ Doba trvání: %4 VoidEffect - + (unknown) (neznámý) - + Missing Effect Chybí efekt @@ -3436,7 +3628,7 @@ Doba trvání: %4 VolumeEffect - + Volume Hlasitost @@ -3444,12 +3636,12 @@ Doba trvání: %4 transition - + Invalid transition Neplatný přechod - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. Žádný uchazeč o přechod '%1'. Tento přechod může být poškozen. Pokuste se jej nebo Olive znovu nainstalovat. diff --git a/ts/olive_de.ts b/ts/olive_de.ts index 59fc7c3ac..61a131951 100644 --- a/ts/olive_de.ts +++ b/ts/olive_de.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. Olive ist ein nicht-lineares Videoschnittprogramm. Diese Software ist frei und durch die GNU GPL geschützt. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. Das Olive Team ist dazu verpflichtet, die Nutzer darüber zu informieren, dass der Quellcode von der Webseite heruntergeladen werden kann. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... Nach Aktion suchen... @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings Erweiterte Video-Einstellungen - + Pixel Format: @@ -38,27 +38,35 @@ Audio - Audio Same as in english - Audio + Audio - Recording - Aufnahme + Aufnahme + + + + %1 Audio + + + + + Recording %1 + AudioNoiseEffect - + Amount In this case the intensity is meant Stärke - + Mix Same as in english? Mix @@ -67,18 +75,18 @@ ChannelLayoutName - + Invalid ungültig - + Mono Same as in english Mono - + Stereo Same as in english Stereo @@ -87,7 +95,7 @@ CollapsibleWidget - + <untitled> <unbenannt> @@ -95,7 +103,7 @@ ColorButton - + Set Color Farbe übernehmen @@ -103,27 +111,27 @@ CornerPinEffect - + Top Left Oben Links - + Top Right Oben Rechts - + Bottom Left Unten Links - + Bottom Right Unten Rechts - + Perspective Perspektive @@ -131,7 +139,7 @@ DebugDialog - + Debug Log Could be also different but is understandable in german Debug-Log @@ -140,23 +148,23 @@ DemoNotice - - + + Welcome to Olive! Willkommen in Olive! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. Olive ist ein freies, offenes Videoschnittprogramm welches unter der GNU GPL lizensiert ist. Sofern Sie für diese Software bezahlt haben, wurden Sie betrogen. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 Diese Software ist aktuell in einem ALPHA-Stadium, was bedeutet, dass die Software instabil ist, abstürzen könnte, Fehler enthält und einige Funktionen fehlen. Wir leisten keine Garantie, die Benutzung der Software erfolgt auf eigenes Risiko. Bitte melden Sie Fehler oder Funktionswünsche auf %1 - + Thank you for trying Olive and we hope you enjoy it! Danke das Sie Olive ausprobieren, wir hoffen es gefällt Ihnen! @@ -164,90 +172,90 @@ Effect - + Invalid effect Ungültiger Effekt - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. The last sentence does not make real sense in german. I changed it to "a reinstallation is recommended" Kein Kandidat für Effekt '%1'. Dieser Effekt ist möglicherweise beschädigt. Eine Neuinstallation wird empfohlen. - + Cu&t &Ausschneiden - + &Copy &Kopieren - + Move &Up Nach &oben - + Move &Down Nach &unten - + D&elete L&öschen - + Load Settings From File Einstellungen aus Datei laden - + Save Settings to File Einstellungen in Datei speichern - + Save Effect Settings Effekt-Einstellungen speichern - - + + Effect XML Settings %1 XML Effekt-Einstellungen %1 - + Save Settings Failed Speichern der Einstellungen fehlgeschlagen - + Failed to open "%1" for writing. Fehler beim Öffnen von "%1" - + Load Effect Settings Effekt-Einstellungen laden - - + + Load Settings Failed Laden von Einstellungen fehlgeschlagen - + Failed to open "%1" for reading. Fehler beim Öffnen von "%1" - + This settings file doesn't match this effect. Die Einstellungsdatei stimmt nicht mit diesem Effekt überein. @@ -255,47 +263,52 @@ EffectControls - + Effects: Effekte: - + &Paste &Einfügen - + + (none) + (keine) + + + Add Video Effect Video-Effekt hinzufügen - + VIDEO EFFECTS VIDEO-EFFEKTE - + Add Video Transition Video-Übergang hinzufügen - + Add Audio Effect Audio-Effekt hinzufügen - + AUDIO EFFECTS AUDIO-EFFEKTE - + Add Audio Transition Audio-Übergang hinzufügen - + (Multiple clips selected) (mehrere Clips ausgewählt) @@ -303,12 +316,12 @@ EffectRow - + Disable Keyframes Keyframes deaktivieren - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? Ein Deaktivieren von Keyframes löscht alle aktuellen Keyframes. Sind Sie sicher? @@ -316,7 +329,7 @@ EmbeddedFileChooser - + File: Datei: @@ -324,99 +337,99 @@ ExportDialog - + Export "%1" Exportieren von "%1" - + Unknown codec name %1 Unbekannter Codec-Name %1 - + Export Failed Exportieren fehlgeschlagen - + Export failed - %1 Exportieren fehlgeschlagen - %1 - + Invalid dimensions Ungültige Dimensionen - + Export width and height must both be even numbers/divisible by 2. Breite und Höhe müssen Zahlen sein, die durch 2 teilbar sind. - + Invalid codec Ungültiger Codec - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. Ausgabe-Parameter für den ausgewählten Codec konnte nicht erkannt werden. Dies ist ein Fehler, bitte kontaktieren Sie den Entwickler. - + Invalid format Ungültiges Format - + Couldn't determine output format. This is a bug, please contact the developers. Ausgabe-Format konnte nicht erkannt werden. Dies ist ein Fehler, bitte kontaktieren Sie den Entwickler. - + Export Media In german it would be not good to add media to the title Exportieren - + Quality-based (Constant Rate Factor) Qualität (Constant Rate Factor) - + Constant Bitrate Konstante Bitrate - - + + Invalid Codec Ungültiger Codec - + Failed to find a suitable encoder for this codec. Export will likely fail. - + Failed to find pixel format for this encoder. Export will likely fail. - + Bitrate (Mbps): Bitrate (Mbps): - + Quality (CRF): Qualität (CRF): - + Quality Factor: 0 = lossless @@ -431,76 +444,81 @@ 51 = kleinstmögliche Qualität - + Target File Size (MB): Ziel-Dateigröße (MB): - + Format: Same as in english Format: - + Range: Bereich: - + Entire Sequence Komplette Sequenz - + In to Out In to Out - + Video Same as in english Video - - + + Codec: Same as in english Codec: - + Width: Breite: - + Height: Höhe: - + Frame Rate: Bildfrequenz: - + Compression Type: Komprimierungsverfahren: - + Advanced Erweitert - + + Audio + Audio + + + Sampling Rate: Abtastrate: - + Bitrate (Kbps/CBR): Same as in english Bitrate (Kbps/CBR): @@ -509,87 +527,87 @@ ExportThread - + failed to send frame to encoder (%1) Fehler beim Senden des Frames zum Encoder (%1) - + failed to receive packet from encoder (%1) Fehler beim Empfangen des Pakets vom Encoder (%1) - + could not video encoder for %1 Video-Encoder für %1 konnte nicht gefunden werden - + could not allocate video stream Videostream konnte nicht zugewiesen werden - + could not allocate video encoding context - + could not open output video encoder (%1) Video-Encoder konnte nicht geöffnet werden (%1) - + could not copy video encoder parameters to output stream (%1) Video-Encoder-Parameter konnten nicht in den Ausgabe-Stream kopiert werden (%1) - + could not audio encoder for %1 Audio-Encoder für %1 konnte nicht gefunden werden - + could not allocate audio stream Audiostream konnte nicht zugewiesen werden - + could not allocate audio encoding context Audio-Encoding-Kontext konnte nicht zugewiesen werden - + could not open output audio encoder (%1) Audio-Encoder konnte nicht geöffnet werden (%1) - + could not copy audio encoder parameters to output stream (%1) Audio-Encoder-Parameter konnten nicht in den Ausgabe-Stream kopiert werden (%1) - + could not allocate audio buffer (%1) Audio-Buffer konnte nicht zugewiesen werden (%1) - + could not create output format context Ausgabe-Format-Kontext konnte nicht erstellt werden - + could not open output file (%1) Ausgabe konnte nicht geöffnet werden (%1) - + could not write output file header (%1) Ausgabe-Datei-Header konnte nicht geschrieben werden (%1) - + could not write output file trailer (%1) Ausgabe-Datei-Trailer konnte nicht geschrieben werden (%1) @@ -597,17 +615,17 @@ FillLeftRightEffect - + Type Typ - + Fill Left with Right Linke Seite mit Rechter füllen - + Fill Right with Left Rechte Seite mit Linker füllen @@ -615,22 +633,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 Frei0r plugin konnte nicht geladen werden (%1:%2) - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. HINWEIS: Sie können keine 32-bit Frei0r Plugins in einer 64-bit Version von Olive laden. Sie benötigen entweder eine 64-bit Version des Plugins oder eine 32-bit Version von Olive. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. HINWEIS: Sie können keine 64-bit Frei0r Plugins in einer 32-bit Version von Olive laden. Sie benötigen entweder eine 32-bit Version des Plugins oder eine 64-bit Version von Olive. - + Error loading Frei0r plugin Fehler beim Laden des Frei0r Plugins @@ -638,24 +656,24 @@ GraphEditor - + Graph Editor Grafischer Editor - + Linear Same as in english Linear - + Bezier Same as in english Bezier - + Hold Does this make sense? (is a handle button meant?) Halten @@ -664,17 +682,17 @@ GraphView - + Zoom to Selection In die Auswahl zoomen - + Zoom to Show All Zommen, um alles anzuzeigen - + Reset View Ansicht zurücksetzen @@ -682,22 +700,22 @@ InterlacingName - + None (Progressive) Keine (Progressive) - + Top Field First Oberes Feld zuerst - + Bottom Field First Unteres Feld zuerst - + Invalid Ungültig @@ -705,7 +723,7 @@ KeyframeNavigator - + Enable Keyframes Keyframes aktivieren @@ -713,19 +731,19 @@ KeyframeView - + Linear Same as in english Linear - + Bezier Same as in english Bezier - + Hold Does this make sense? Halten @@ -734,14 +752,14 @@ LabelSlider - - + + Set Value Wert ändern - - + + New value: Neuer Wert: @@ -749,17 +767,17 @@ LoadDialog - + Loading... Lädt... - + Loading '%1'... Lädt '%1'... - + Cancel Abbrechen @@ -767,54 +785,54 @@ LoadThread - + Version Mismatch Unterschiedliche Versionen - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Dieses Projekt wurde mit einer anderen Version von Olive gespeichert und ist möglicherweise nicht vollständig kompatibel. Wollen Sie trotzdem versuchen, es zu laden? - + Invalid Clip Link Ungültiger Clip Link - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? Sounds better in German but has same sense Dieses Projekt enthält eine ungültige Verlinkung zu einem Clip. Das Projekt ist möglicherweise beschädigt. Wollen Sie es dennoch versuchen? - + %1 - Line: %2 Col: %3 %1 - Zeile: %2 Spalte: %3 - + User aborted loading Ladevorgang durch Nutzer abgebrochen - + XML Parsing Error Does not make sense to translate this XML Parsing Error - + Couldn't load '%1'. %2 '%1' konnte nicht geladen werden. (%2) - + Project Load Error Projektladefehler - + Error loading project: %1 Fehler beim Laden des Projektes: %1 @@ -822,433 +840,402 @@ MainWindow - Auto-recovery - Auto-Wiederherstellung + Auto-Wiederherstellung - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - Olive wurde nicht richtig beendet und eine Wiederherstellungsdatei wurde gefunden. Möchten Sie diese öffnen? + Olive wurde nicht richtig beendet und eine Wiederherstellungsdatei wurde gefunden. Möchten Sie diese öffnen? - &Project - &Projekt + &Projekt - &Sequence - &Sequenz + &Sequenz - &Folder - &Ordner + &Ordner - Set In Point Also for following translations: Not sure if sense is matched - Anfangspunkt festlegen + Anfangspunkt festlegen - Set Out Point - Endpunkt festlegen + Endpunkt festlegen Enable/Disable In/Out Point Anfangs-/Endpunkt aktivieren/deaktiviern - + Welcome to %1 Willkommen in %1 - Reset In Point - Anfangspunkt zurücksetzen + Anfangspunkt zurücksetzen - Reset Out Point - Endpunkt zurücksetzen + Endpunkt zurücksetzen - Clear In/Out Point - Anfangs-/Endpunkt löschen + Anfangs-/Endpunkt löschen - No active sequence - Keine aktive Sequenz + Keine aktive Sequenz - Please open the sequence you wish to export. - Bitte öffnen Sie die Sequenz, die Sie exportieren möchten. + Bitte öffnen Sie die Sequenz, die Sie exportieren möchten. - Save Project As... - Projekt speichern als... + Projekt speichern als... - Unsaved Project - Ungespeichertes Projekt + Ungespeichertes Projekt - This project has changed since it was last saved. Would you like to save it before closing? - Das Projekt enthält ungespeicherte Änderungen. Wollen Sie diese jetzt speichern? + Das Projekt enthält ungespeicherte Änderungen. Wollen Sie diese jetzt speichern? - + &File &Datei - + &New &Neu - + &Open Project Projekt &öffnen - + Clear Recent List 'Zuletzt geöffnet' leeren - + Open Recent Zuletzt Verwendete öffnen - + &Save Project &Projekt speichern - + Save Project &As Projekt speichern &als... - + &Import... &Importieren... - + &Export... &Exportieren - + E&xit B&eenden - + &Edit &Bearbeiten - + &Undo &Rückgängig - + Redo Wiederholen - Cu&t - &Ausschneiden + &Ausschneiden - Cop&y - &Kopieren + &Kopieren - &Paste - &Einfügen + &Einfügen - - Paste Insert - - - - Duplicate - Duplizieren + Duplizieren - Delete - Löschen + Löschen - Ripple Delete In Premiere's translations its also called "Ripple Delete" - Ripple Delete + Ripple Delete - Split - Teilen + Teilen - + Select &All Alles &auswählen - + Deselect All Auswahl aufheben - Add Default Transition - Standardübergang einfügen + Standardübergang einfügen - Link/Unlink - Verbinden/Trennen + Verbinden/Trennen - Enable/Disable - Einblenden/Ausblenden + Einblenden/Ausblenden - Nest - Schachteln + Schachteln - + Ripple to In Point - + Ripple to Out Point - + Edit to In Point - + Edit to Out Point - + Delete In/Out Point - + Ripple Delete In/Out Point - + Set/Edit Marker Marker setzen/bearbeiten - + &View &Ansicht - + Zoom In Hereinzoomen - + Zoom Out Herauszoomen - + Increase Track Height Spurhöhe erhöhen - + Decrease Track Height Spurhöhe verringern - + Toggle Show All - + Track Lines Spurlinien - + Rectified Waveforms Nachgebesserte Waveforms - + Frames Bilder/Frames - + Drop Frame Same word used in German Drop Frame - + Non-Drop Frame Same word used in German Non-Drop Frame - + Milliseconds Millisekunden - + Title/Action Safe Area Sicherer Titelbereich - + Off Aus - + Default Standard - + 4:3 4:3 - + 16:9 16:9 - + Custom Benutzerdefiniert - + Full Screen Vollbild - + Full Screen Viewer Does this make sense? Vollbild-Viewer - + &Playback Should we translate this? Playback is also known &Wiedergabe - + Go to Start Zum Start gehen - + Previous Frame Vorheriger Frame - + Play/Pause Does not make sense to translate Play/Pause - + Play In to Out Von Anfang bis Ende wiedergeben - + Next Frame Nächster Frame - + Go to End Zum Ende springen - + Go to Previous Cut Zum vorherigen Schnitt springen - + Go to Next Cut Zum nächsten Schnitt springen - + Go to In Point Zum Anfangspunkt springen - + Go to Out Point Zum Endpunkt springen - + Shuttle Left - + Shuttle Stop - + Shuttle Right @@ -1266,283 +1253,280 @@ Geschwindigkeit erhöhen - + Loop Schleife - + &Window &Fenster - + Project Projekt - + Effect Controls Effektsteuerung - + Timeline Same as in english Timeline - + Graph Editor Grafischer Editor - + Media Viewer Does this make sense to translate? Media Viewer - + Sequence Viewer Does this make sense to translate? Sequence Viewer - + Maximize Panel Panel maximieren - + + Lock Panels + + + + Reset to Default Layout Zum Standard-Layout zurücksetzen - + &Tools &Werkzeuge - + Pointer Tool Does this make sense? Zeiger - + Edit Tool Bearbeitungs-Werkzeug - + Ripple Tool Same as 'Ripple Delete' Ripple-Werkzeug - + Razor Tool Schneide-Werkzeug - + Slip Tool - + Slide Tool - + Hand Tool Hand-Werkzeug - + Transition Tool Übergangs-Werkzeug - + Enable Snapping Snapping aktivieren - + Selecting Also Seeks - + Edit Tool Also Seeks - + Edit Tool Selects Links - + Seek Also Selects - + Seek to the End of Pastes - + Scroll Wheel Zooms Could be better Scrollrad zoomt - + Enable Drag Files to Timeline Dateien auf Timeline ziehen aktivieren - + Auto-Scale By Default Skaliere automatisch - + Enable Seek to Import - + Audio Scrubbing Same as in english Audio Scrubbing - + Enable Drop on Media to Replace Auf Medien zum Ersetzen ziehen aktivieren - + Enable Hover Focus - + Ask For Name When Setting Marker Nach Namen fragen, wenn Marker gesetzt wird - + No Auto-Scroll Kein Auto-Scroll - + Page Auto-Scroll Seiten Auto-Scroll - + Smooth Auto-Scroll Weiches Auto-Scroll - + Preferences Einstellungen - + Clear Undo Rückgängig-Historie leeren - + &Help &Hilfe - + A&ction Search &Aktionensuche - + Debug Log Same as in english Debug-Log - + &About... &Über... - + <untitled> <unbenannt> - Open Project... - Projekt öffnen... + Projekt öffnen... - Missing recent project - Zuletzt geöffnetes Projekt existiert nicht + Zuletzt geöffnetes Projekt existiert nicht - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - Das Projekt '%1' existiert nicht mehr oder wurde verschoben. Möchten Sie es aus der Liste entfernen? + Das Projekt '%1' existiert nicht mehr oder wurde verschoben. Möchten Sie es aus der Liste entfernen? - Invalid aspect ratio - Ungültiges Seitenverhältnis + Ungültiges Seitenverhältnis - The aspect ratio '%1' is invalid. Please try again. - Das Seitenverhältnis '%1' ist ungültig. Bitte versuchen Sie es erneut. + Das Seitenverhältnis '%1' ist ungültig. Bitte versuchen Sie es erneut. - Enter custom aspect ratio - Benutzerdefiniertes Seitenverhältnis eingeben + Benutzerdefiniertes Seitenverhältnis eingeben - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - Geben Sie das Seitenverhältnis für den sicheren Bereich ein (z.B. 16:9): + Geben Sie das Seitenverhältnis für den sicheren Bereich ein (z.B. 16:9): - Nested Sequence - Geschachtelte Sequenz + Geschachtelte Sequenz Marker - + Set Marker Marker setzen - + Set clip marker name: - + Set sequence marker name: @@ -1550,27 +1534,27 @@ Media - + New Folder Neuer Ordner: - + Name: Name: - + Filename: Dateiname: - + Video Dimensions: Video-Dimensionen: - + Frame Rate: Bildrate: @@ -1579,28 +1563,28 @@ %1 Felder (%2 frames) - + %1 field(s) (%2 frame(s)) - + Interlacing: Same as in english Interlacing: - + Audio Frequency: Audiofrequenz: - + Audio Channels: Audiokanäle: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1613,17 +1597,17 @@ Audiofrequenz: %5 Audio Layout: %6 - + Name Name - + Duration Dauer - + Rate Same as in english, differently spoken, but same meaning Rate @@ -1632,17 +1616,17 @@ Audio Layout: %6 MediaPropertiesDialog - + "%1" Properties "%1" Eigenschaften - + Tracks: Spuren: - + Video %1: %2x%3 %4FPS Same as in english Video %1: %2x%3 %4FPS @@ -1652,12 +1636,12 @@ Audio Layout: %6 Audio %1: %2Hz %3 Kanäle - + Audio %1: %2Hz %3 - + %n channel(s) @@ -1665,170 +1649,361 @@ Audio Layout: %6 - + Conform to Frame Rate: Entspricht Bildrate: - + Alpha is Premultiplied Alpha ist vormultipliziert - + Auto (%1) Same? Auto (%1) - + Interlacing: Same as in english Interlacing: - + Name: Same as in english Name: + + MenuHelper + + + &Project + &Projekt + + + + &Sequence + &Sequenz + + + + &Folder + &Ordner + + + + Set In Point + Anfangspunkt festlegen + + + + Set Out Point + Endpunkt festlegen + + + + Reset In Point + Anfangspunkt zurücksetzen + + + + Reset Out Point + Endpunkt zurücksetzen + + + + Clear In/Out Point + Anfangs-/Endpunkt löschen + + + + Add Default Transition + Standardübergang einfügen + + + + Link/Unlink + Verbinden/Trennen + + + + Enable/Disable + Einblenden/Ausblenden + + + + Nest + Schachteln + + + + Cu&t + &Ausschneiden + + + + Cop&y + &Kopieren + + + + &Paste + &Einfügen + + + + Paste Insert + + + + + Duplicate + Duplizieren + + + + Delete + Löschen + + + + Ripple Delete + Ripple Delete + + + + Split + Teilen + + + + Invalid aspect ratio + Ungültiges Seitenverhältnis + + + + The aspect ratio '%1' is invalid. Please try again. + Das Seitenverhältnis '%1' ist ungültig. Bitte versuchen Sie es erneut. + + + + Enter custom aspect ratio + Benutzerdefiniertes Seitenverhältnis eingeben + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + Geben Sie das Seitenverhältnis für den sicheren Bereich ein (z.B. 16:9): + + NewSequenceDialog - + Editing "%1" Bearbeitung von "%1" - + New Sequence Neue Sequenz - + Preset: Could be also preset Vorgabe: - + Film 4K Film 4K - + TV 4K (Ultra HD/2160p) TV 4K (Ultra HD/2160p) - + 1080p 1080p - + 720p 720p - + 480p 480p - + 360p 360p - + 240p 240p - + 144p 144p - + NTSC (480i) NTSC (480i) - + PAL (576i) PAL (576i) - + Custom Benutzerdefiniert - + Video Same as in english Video - + Width: Breite: - + Height: Höhe: - + Frame Rate: Bildrate: - + Pixel Aspect Ratio: Pixel-Seitenverhältnis: - + Square Pixels (1.0) Quadratische Pixel (1.0) - + Interlacing: Same as in english Interlacing: - + None (Progressive) Keine (Progressive) - + Audio Same as in english Audio - + Sample Rate: Abtastrate: - + Name: Name: + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + Auto-Wiederherstellung + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + Olive wurde nicht richtig beendet und eine Wiederherstellungsdatei wurde gefunden. Möchten Sie diese öffnen? + + + + Open Project... + Projekt öffnen... + + + + Missing recent project + Zuletzt geöffnetes Projekt existiert nicht + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + Das Projekt '%1' existiert nicht mehr oder wurde verschoben. Möchten Sie es aus der Liste entfernen? + + + + Save Project As... + Projekt speichern als... + + + + Unsaved Project + Ungespeichertes Projekt + + + + This project has changed since it was last saved. Would you like to save it before closing? + Das Projekt enthält ungespeicherte Änderungen. Wollen Sie diese jetzt speichern? + + + + No active sequence + Keine aktive Sequenz + + + + Please open the sequence you wish to export. + Bitte öffnen Sie die Sequenz, die Sie exportieren möchten. + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan Schwenken @@ -1836,178 +2011,175 @@ Audio Layout: %6 Playback - Generating Proxy: %1% - Proxy wird generiert: %1% + Proxy wird generiert: %1% PreferencesDialog - + Preferences Einstellungen - + Invalid CSS File Ungültige CSS Datei - + CSS file '%1' does not exist. CSS Datei '%1' existiert nicht. - Warning - Achtung + Achtung - Some changed settings will require restarting Olive to take effect - Einige Änderungen erfordern einen Neustart von Olive, um angwendet zu werden + Einige Änderungen erfordern einen Neustart von Olive, um angwendet zu werden - + Confirm Reset All Shortcuts Bestätige das Zurücksetzen aller Shortcuts - + Are you sure you wish to reset all keyboard shortcuts to their defaults? Sind Sie sicher, dass Sie alle Tastatur-Shortcuts zurücksetzen wollen? - + Import Keyboard Shortcuts Tastatur-Shortcuts importieren - - + + Error saving shortcuts Fehler beim Speichern der Shortcuts - + Failed to open file for reading Fehler beim öffnen der Datei - + Export Keyboard Shortcuts Tastatur-Shortcuts exportieren - + Export Shortcuts Shortcuts exportieren - + Shortcuts exported successfully Shortcuts wurden erfolgreich exportiert - + Failed to open file for writing Fehler beim Schreiben der Datei - + Browse for CSS file Nach CSS Datei suchen - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: Sprache: - + Custom CSS: Benutzerdefiniertes CSS: - + Browse Durchsuchen - + Image sequence formats: Bilddateiformate: - + Audio Recording: Audioaufnahmen: - + Mono Same as in english Mono - + Stereo Same as in english Stereo - + Effect Textbox Lines: Effekt Textbox-Linien: - + Thumbnail Resolution: Thumbnail-Auflösung: - + Waveform Resolution: - + Delete Previews - + Use Software Fallbacks When Possible Absicherung durch Software-Defaults - + General Allgemein - + Behavior Verhalten @@ -2016,120 +2188,120 @@ Audio Layout: %6 Multithreading auf Bildern deaktiviern - + Seeking Suche - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) Genaue Suche Zeigt immer den richtigen Frame (kann optisch kurzzeitig anhalten, wenn Frame abgefragt wird) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) Schnelle Suche Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf Plaback aus) - + Memory Usage Speicherauslastung - + Upcoming Frame Queue: Anstehende Frame-Warteschlange: - - + + frames Could also use 'Bilder' Frames - - + + seconds Sekunden - + Previous Frame Queue: Vorherige Frame-Warteschlange: - + Playback Wiedergabe - + Output Device: Ausgabegerät: - - + + Default Standard - + Input Device: Eingabegerät: - + Sample Rate: - + Audio Audio - + Search for action or shortcut Nach Eintrag oder Shortcut suchen - + Action Eintrag - + Shortcut Shortcut - + Import Importieren - + Export Exportieren - + Reset Selected Ausgewählte zurücksetzen - + Reset All Alle zurücksetzen - + Keyboard Tastatur @@ -2137,12 +2309,12 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf PreviewGenerator - + Could not open file - %1 Konnte Datei nicht öffnen - %1 - + Could not find stream information - %1 Konnte Stream-Informationen nicht finden - %1 @@ -2150,94 +2322,94 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf Project - + Search media, markers, etc. - + Project Projekt - + Sequence Sequenz - + Replace '%1' Ersetze '%1' - - + + All Files Alle Dateien - - + + No active sequence Keine aktive Sequenz - + No sequence is active, please open the sequence you want to replace clips from. Keine Sequenz ist aktiv. Bitten öffnen Sie die Sequenz, bei der Sie Clips ersetzen möchten. - + Active sequence selected Aktive Sequenz ausgewählt - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. Sequenz kann nicht sich selbst zugewiesen werden, da es keine Medien enthalten würde. - + Rename '%1' '%1' umbenennen - + Enter new name: Neuen Namen eingeben: - + Delete media in use? Verwendete Datei löschen? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? Die Datei '%1' wird aktuell in '%2' benutzt. Wenn Sie sie löschen, werden alle Instanzen in der Sequenz entfernt. Sind Sie sicher? - + Skip Überspringen - + Image sequence detected Bildsequenz erkannt - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? Die Datei '%1' scheint eine Bildsequenz zu enthalten. Möchten Sie sie als solche importieren? - + Import media... Medien importieren... - + No sequence is active, please open the sequence you want to delete clips from. Keine Sequenz ist aktiv. Bitten öffnen Sie die Sequenz, bei der Sie Clips löschen möchten. @@ -2245,78 +2417,78 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf ProxyDialog - + Create Proxy Proxy erstellen - + Proxy Same as in english Proxy - + Dimensions: Dimensionen: - + Same Size as Source Selbe Größe wie Quelle - + Half Resolution (1/2) - + Quarter Resolution (1/4) - + Eighth Resolution (1/8) - + Sixteenth Resolution (1/16) - + Format: Format: - + ProRes HQ ProRes HQ - + Location: - + Same as Source (in "%1" folder) Genau wie Quelle (in Ordner "%1") - + Proxy file exists Proxy-Datei existiert bereits - + The file "%1" already exists. Do you wish to replace it? Die Datei "%1" existiert bereits. Möchten Sie sie ersetzen? - + Custom Location @@ -2324,7 +2496,7 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf ProxyGenerator - + Finished generating proxy for "%1" Proxy-Generierung für "%1" wurde abgeschlossen @@ -2332,67 +2504,67 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf ReplaceClipMediaDialog - + Replace clips using "%1" Ersetze Clips unter Verwendung von "%1" - + Select which media you want to replace this media's clips with: Wählen Sie, welche Medien mit den Clips dieser Medien ersetzt werden sollen - + Keep the same media in-points Anfangspunkte der Medien behalten - + Replace Ersetzen - + Cancel Abbrechen - + No media selected Keine Medien ausgewählt - + Please select a media to replace with or click 'Cancel'. Bitten wählen Sie Medien zum Ersetzen aus oder klicken Sie auf 'Abbrechen'. - + Same media selected Identische Medien ausgewählt - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. Sie haben die gleichen Medien ausgewählt, die Sie ersetzen möchten. Bitte wählen Sie andere Medien oder klicken Sie auf 'Abbrechen'. - + Folder selected Ordner ausgewählt - + You cannot replace footage with a folder. Sie können Footage nicht mit einem Ordner austauschen. - + Active sequence selected Aktive Sequenz ausgewählt - + You cannot insert a sequence into itself. Sie können keine Sequenz in die selbe einsetzen. @@ -2400,7 +2572,7 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf Sequence - + %1 (copy) %1 (kopieren) @@ -2408,18 +2580,18 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf ShakeEffect - + Intensity Intentsität - + Rotation Sames as in english, but differently spoken Rotation - + Frequency Frequenz @@ -2427,38 +2599,38 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf SolidEffect - + Type Typ - + Solid Color AE and Premiere handle this in the same way Solid - + SMPTE Bars SMPTE Farbstreifen - + Checkerboard Schachbrettmuster - + Opacity Deckkraft - + Color Farbe - + Checkerboard Size Größe Schachbrettmuster @@ -2466,139 +2638,144 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf SourcesCommon - + Import... Importieren... - + New Neu - + View Ansicht - + Tree View A translation would be not recommended due to misunderstanding Tree View - + Icon View A translation would be not recommended due to misunderstanding Icon View - + Show Toolbar Toolbar anzeigen - + Show Sequences Sequenzen anzeigen - + Replace/Relink Media Medien ersetzen/neu verbinden - + Reveal in Explorer Im Explorer anzeigen - + Reveal in Finder Im Finder anzeigen - + Reveal in File Manager Im File Manager anzeigen - + Replace Clips Using This Media Ersetze Clips die diese Medien benutzen - + Create Sequence With This Media Sequenz mit diesen Medien erstellen - + Duplicate Duplizieren - + Delete All Clips Using This Media Alle Clips, die diese Medien enthalten löschen - + Proxy Proxy - + Generating proxy: %1% complete Proxy wird generiert: %1% fertig - + Create/Modify Proxy Erstelle/Modifiziere Proxy - + Create Proxy Proxy erstellen - + Modify Proxy Proxy modifizieren - + Restore Original Original wiederherstellen - + Delete Löschen - + + Preview in Media Viewer + + + + Properties... Eigenschaften... - + Replace Media Medien ersetzen - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? Sie haben eine Datei auf '%1' gezogen. Möchten Sie diese ersetzen? - + Delete proxy Proxy löschen - + Would you like to delete the proxy file "%1" as well? Möchten Sie die Proxy-Datei "%1" ebenfalls löschen? @@ -2606,37 +2783,37 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf SpeedDialog - + Speed/Duration Geschwindigkeit/Dauer - + Speed: Geschwindigkeit: - + Frame Rate: Bildrate: - + Duration: Dauer: - + Reverse Rückwärts - + Maintain Audio Pitch Tonhöhe erhalten - + Ripple Changes Ripple-Änderungen @@ -2644,7 +2821,7 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf TextEditDialog - + Edit Text Text bearbeiten @@ -2652,114 +2829,119 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf TextEffect - + Text Same as in english Text - + Font Schriftart - + Size Größe - + Color Farbe - + Alignment Ausrichtung - + Left Links - - + + Center Mitte - + Right Rechts - + Justify Ausrichten - + Top Oben - + Bottom Unten - + Word Wrap Zeilenumbruch - + Outline Umriss - + Outline Color Umrissfarbe - + Outline Width Umrissbreite - + Shadow Schatten - + Shadow Color Schattenfarbe - + + Shadow Angle + + + + Shadow Distance Schattenentfernung - + Shadow Softness Schattensoftness - + Shadow Opacity Schattendeckkraft - + Sample Text Beispieltext - + &Edit Text &Text bearbeiten @@ -2767,47 +2949,47 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf TimecodeEffect - + Timecode Zeitstempel - + Sequence Sequenz - + Media Medien - + Scale Skalierung - + Color Farbe - + Background Color Hintergrundfarbe - + Background Opacity Hintergrunddeckkraft - + Offset Versatz - + Prepend Voreinstellung @@ -2815,43 +2997,42 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf Timeline - + Timeline: Makes no sense to translate Timeline: - <none> - <keine> + <keine> - + Effect already exists Effekt existiert bereits - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? Der Clip '%1' enthält bereits den Effekt '%2'. Möchten Sie diesen ersetzen oder ihn als separaten Effekt hinzufügen? - + Add Hinzufügen - + Replace Ersetzen - + Skip Überspringen - + Do this for all conflicts found Auf alle gefundenen Konflikte anwenden @@ -2864,116 +3045,126 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf Marker-Name setzen: - + Title... Titel... - + Solid Color... Solid... - + Bars... Balken... - + Tone... Ton... - + Noise... Rauschen... - + Unsaved Project Ungespeichertes Projekt - + You must save this project before you can record audio in it. Sie müssen das Projekt speichern, bevor Sie Audio aufnehmen können. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) Klicken Sie auf die Timeline, an welcher Stelle Sie mit der Aufnahme beginnen möchten (Ziehen, um das Limit der Aufnahme auf einen bestimmten Timeframe zu setzen) - + Pointer Tool Pointer-Werkzeug - + Edit Tool Bearbeitungs-Werkzeug - + Ripple Tool Ripple-Werkzeug - + Razor Tool Schneide-Werkzeug - + Slip Tool - + Slide Tool - + Hand Tool Hand-Werkzeug - + Transition Tool Übergangs-Werkzeug - + Snapping Same as in english Snapping - + Zoom In Hereinzommen - + Zoom Out Herauszoomen - + Record audio Audio aufnehmen - + Add title, solid, bars, etc. Titel, Solid, Balken, etc. Hinzufügen + + + Nested Sequence + Geschachtelte Sequenz + + + + (none) + (keine) + TimelineHeader - + Center Timecodes Timecodes zentrieren @@ -2981,78 +3172,71 @@ Sucht schneller (kann kurzzeitig ungenaue Frame anzeigen - wirkt sich nicht auf TimelineWidget - + &Undo &Rückgängig - + &Redo - + C&ut &Ausschneiden - + Cop&y &Kopieren - + &Paste &Einfügen - + R&ipple Delete Taken from Premiere R&ipple Delete - + Sequence Settings Sequenz-Einstellungen - + &Speed/Duration &Geschwindigkeit/Dauer - + Auto-s&cale Auto-&Skalierung - Enable/Disable - Einblenden/Ausblenden + Einblenden/Ausblenden - Link/Unlink - Verbinden/Trennen + Verbinden/Trennen - - &Nest - - - - + &Reveal in Project &Im Projekt anzeigen - + R&ename U&mbenennen - + %1 Start: %2 End: %3 @@ -3063,57 +3247,57 @@ Ende: %3 Dauer: %4 - + Rename '%1' '%1' umbenennen - + Rename multiple clips Mehrere Clips umbenennen - + Enter a new name for this clip: Geben Sie einen neuen Namen für den Clip ein: - + Error Fehler - + Couldn't locate media wrapper for sequence. Konnte den Medienwrapper für diese Sequenz nicht finden. - + Title Titel - + Solid Color Solid - + Bars Balken - + Tone Ton - + Noise Rauschen - + Duration: Dauer: @@ -3121,22 +3305,22 @@ Dauer: %4 ToneEffect - + Type Typ - + Frequency Frequenz - + Amount Menge - + Mix Same as in english Mix @@ -3145,163 +3329,163 @@ Dauer: %4 TransformEffect - + Position Same as in english, differently spoken Position - + Scale Skalierung - + Uniform Scale Einheitliche Skalierung - + Rotation Same as in english, differently spoken Rotation - + Anchor Point Ankerpunkt - + Opacity Deckkraft - + Blend Mode Mischmodus - + Normal Same as in english, differently spoken Normal - + Darken Verdunkeln - + Multiply Vervielfachen - + Color Burn Makes no sense to translate Color Burn - + Linear Burn Makes no sense to translate Linear Burn - + Lighten Aufhellen - + Screen Makes no sense to translate Screen - + Color Dodge Color-Dodge - + Linear Dodge (Add) Addieren - + Overlay Überlagern - + Soft Light Weiches Licht - + Hard Light Hartes Licht - + Vivid Light Lebhaftes Licht - + Linear Light Lineares Licht - + Pin Light Scharfes Licht - + Hard Mix Hartes Mischen - + Difference Differenz - + Exclusion Ausgrenzung - + Reflect Spiegeln - + Substract Abziehen - + Average Durschnitt - + Glow Leuchten - + Negation Negativ - + Phoenix Same as in english Phoenix @@ -3314,7 +3498,7 @@ Dauer: %4 Länge: - + Length Länge @@ -3322,65 +3506,65 @@ Dauer: %4 VSTHost - - - + + + Error loading VST plugin Fehler beim Laden des VST Plugins - + Failed to create VST reference Fehler beim Herstellen einer VST Referenz - + Failed to load VST plugin "%1": %2 Fehler beim Laden des VST Plugins "%1":%2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. HINWEIS: Sie können keine 32-bit VST Plugins in einer 64-bit Version von Olive laden. Sie benötigen entweder eine 64-bit Version des Plugins oder eine 32-bit Version von Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. HINWEIS: Sie können keine 64-bit VST Plugins in einer 32-bit Version von Olive laden. Sie benötigen entweder eine 32-bit Version des Plugins oder eine 64-bit Version von Olive. - + Failed to locate entry point for dynamic library. - + VST Error VST Fehler - + Plugin's magic number is invalid Die Magic Number des Plugins ist ungültig - + Plugin Same as in english Plugin - + Interface Benutzeroberfläche - + Show Anzeigen - + VST Plugin Same as in english VST Plugin @@ -3389,17 +3573,17 @@ Dauer: %4 Viewer - + Sequence Viewer Sequenz-Viewer - + Media Viewer Medien-Viewer - + (none) (keine) @@ -3407,59 +3591,59 @@ Dauer: %4 ViewerWidget - + Save Frame as Image... Frame als Bild speichern... - + Show Fullscreen Vollbildschirm - + Disable Ausblenden - + Screen %1: %2x%3 Screen %1:%2x%3 - + Zoom Same as in english Zoom - + Fit Einpassen - + Custom Benutzerdefiniert - + Close Media Medien schließen - + Save Frame Frame speichern - + Viewer Zoom Makes no sense to translate Viewer Zoom - + Set Custom Zoom Value: Benutzerdefinierten Zoomwert angeben @@ -3467,7 +3651,7 @@ Dauer: %4 ViewerWindow - + Exit Fullscreen Vollbild verlassen @@ -3475,12 +3659,12 @@ Dauer: %4 VoidEffect - + (unknown) (unbekannt) - + Missing Effect Effekt fehlt @@ -3488,7 +3672,7 @@ Dauer: %4 VolumeEffect - + Volume Lautstärke @@ -3496,12 +3680,12 @@ Dauer: %4 transition - + Invalid transition Ungültiger Übergang - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. Kein Kandidat für den Übergang '%1'. Der Übergang ist möglicherweise beschädigt. Eine Neuinstallation wird empfohlen. diff --git a/ts/olive_es.ts b/ts/olive_es.ts index e1a6776ea..61fa3477b 100644 --- a/ts/olive_es.ts +++ b/ts/olive_es.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings - + Pixel Format: @@ -38,25 +38,25 @@ Audio - - Audio + + %1 Audio - - Recording + + Recording %1 AudioNoiseEffect - + Amount - + Mix @@ -64,17 +64,17 @@ ChannelLayoutName - + Invalid - + Mono - + Stereo @@ -82,7 +82,7 @@ CollapsibleWidget - + <untitled> @@ -90,7 +90,7 @@ ColorButton - + Set Color @@ -98,27 +98,27 @@ CornerPinEffect - + Top Left - + Top Right - + Bottom Left - + Bottom Right - + Perspective @@ -126,7 +126,7 @@ DebugDialog - + Debug Log @@ -134,23 +134,23 @@ DemoNotice - - + + Welcome to Olive! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 - + Thank you for trying Olive and we hope you enjoy it! @@ -158,89 +158,89 @@ Effect - + Invalid effect - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. - + Cu&t - + &Copy - + Move &Up - + Move &Down - + D&elete - + Load Settings From File - + Save Settings to File - + Save Effect Settings - - + + Effect XML Settings %1 - + Save Settings Failed - + Failed to open "%1" for writing. - + Load Effect Settings - - + + Load Settings Failed - + Failed to open "%1" for reading. - + This settings file doesn't match this effect. @@ -248,47 +248,52 @@ EffectControls - + Effects: - + &Paste - + + (none) + + + + Add Video Effect - + VIDEO EFFECTS - + Add Video Transition - + Add Audio Effect - + AUDIO EFFECTS - + Add Audio Transition - + (Multiple clips selected) @@ -296,12 +301,12 @@ EffectRow - + Disable Keyframes - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? @@ -309,7 +314,7 @@ EmbeddedFileChooser - + File: @@ -317,98 +322,98 @@ ExportDialog - + Export "%1" - + Unknown codec name %1 - + Export Failed - + Export failed - %1 - + Invalid dimensions - + Export width and height must both be even numbers/divisible by 2. - + Invalid codec - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. - + Invalid format - + Couldn't determine output format. This is a bug, please contact the developers. - + Export Media - + Quality-based (Constant Rate Factor) - + Constant Bitrate - - + + Invalid Codec - + Failed to find a suitable encoder for this codec. Export will likely fail. - + Failed to find pixel format for this encoder. Export will likely fail. - + Bitrate (Mbps): - + Quality (CRF): - + Quality Factor: 0 = lossless @@ -418,73 +423,78 @@ - + Target File Size (MB): - + Format: - + Range: - + Entire Sequence - + In to Out - + Video - - + + Codec: - + Width: - + Height: - + Frame Rate: - + Compression Type: - + Advanced - + + Audio + + + + Sampling Rate: - + Bitrate (Kbps/CBR): @@ -492,87 +502,87 @@ ExportThread - + failed to send frame to encoder (%1) - + failed to receive packet from encoder (%1) - + could not video encoder for %1 - + could not allocate video stream - + could not allocate video encoding context - + could not open output video encoder (%1) - + could not copy video encoder parameters to output stream (%1) - + could not audio encoder for %1 - + could not allocate audio stream - + could not allocate audio encoding context - + could not open output audio encoder (%1) - + could not copy audio encoder parameters to output stream (%1) - + could not allocate audio buffer (%1) - + could not create output format context - + could not open output file (%1) - + could not write output file header (%1) - + could not write output file trailer (%1) @@ -580,17 +590,17 @@ FillLeftRightEffect - + Type - + Fill Left with Right - + Fill Right with Left @@ -598,22 +608,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Error loading Frei0r plugin @@ -621,22 +631,22 @@ GraphEditor - + Graph Editor - + Linear - + Bezier - + Hold @@ -644,17 +654,17 @@ GraphView - + Zoom to Selection - + Zoom to Show All - + Reset View @@ -662,22 +672,22 @@ InterlacingName - + None (Progressive) - + Top Field First - + Bottom Field First - + Invalid @@ -685,7 +695,7 @@ KeyframeNavigator - + Enable Keyframes @@ -693,17 +703,17 @@ KeyframeView - + Linear - + Bezier - + Hold @@ -711,14 +721,14 @@ LabelSlider - - + + Set Value - - + + New value: @@ -726,17 +736,17 @@ LoadDialog - + Loading... - + Loading '%1'... - + Cancel @@ -744,52 +754,52 @@ LoadThread - + Version Mismatch - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? - + Invalid Clip Link - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? - + %1 - Line: %2 Col: %3 - + User aborted loading - + XML Parsing Error - + Couldn't load '%1'. %2 - + Project Load Error - + Error loading project: %1 @@ -797,695 +807,525 @@ MainWindow - - Auto-recovery - - - - - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - - - - - &Project - - - - - &Sequence - - - - - &Folder - - - - - Set In Point - - - - - Set Out Point - - - - + Welcome to %1 - - Reset In Point - - - - - Reset Out Point - - - - - Clear In/Out Point - - - - - No active sequence - - - - - Please open the sequence you wish to export. - - - - - Save Project As... - - - - - Unsaved Project - - - - - This project has changed since it was last saved. Would you like to save it before closing? - - - - + &File - + &New - + &Open Project - + Clear Recent List - + Open Recent - + &Save Project - + Save Project &As - + &Import... - + &Export... - + E&xit - + &Edit - + &Undo - + Redo - - Cu&t - - - - - Cop&y - - - - - &Paste - - - - - Paste Insert - - - - - Duplicate - - - - - Delete - - - - - Ripple Delete - - - - - Split - - - - + Select &All - + Deselect All - - Add Default Transition - - - - - Link/Unlink - - - - - Enable/Disable - - - - - Nest - - - - + Ripple to In Point - + Ripple to Out Point - + Edit to In Point - + Edit to Out Point - + Delete In/Out Point - + Ripple Delete In/Out Point - + Set/Edit Marker - + &View - + Zoom In - + Zoom Out - + Increase Track Height - + Decrease Track Height - + Toggle Show All - + Track Lines - + Rectified Waveforms - + Frames - + Drop Frame - + Non-Drop Frame - + Milliseconds - + Title/Action Safe Area - + Off - + Default - + 4:3 - + 16:9 - + Custom - + Full Screen - + Full Screen Viewer - + &Playback - + Go to Start - + Previous Frame - + Play/Pause - + Play In to Out - + Next Frame - + Go to End - + Go to Previous Cut - + Go to Next Cut - + Go to In Point - + Go to Out Point - + Shuttle Left - + Shuttle Stop - + Shuttle Right - + Loop - + &Window - + Project - + Effect Controls - + Timeline - + Graph Editor - + Media Viewer - + Sequence Viewer - + Maximize Panel - + + Lock Panels + + + + Reset to Default Layout - + &Tools - + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Enable Snapping - + Selecting Also Seeks - + Edit Tool Also Seeks - + Edit Tool Selects Links - + Seek Also Selects - + Seek to the End of Pastes - + Scroll Wheel Zooms - + Enable Drag Files to Timeline - + Auto-Scale By Default - + Enable Seek to Import - + Audio Scrubbing - + Enable Drop on Media to Replace - + Enable Hover Focus - + Ask For Name When Setting Marker - + No Auto-Scroll - + Page Auto-Scroll - + Smooth Auto-Scroll - + Preferences - + Clear Undo - + &Help - + A&ction Search - + Debug Log - + &About... - + <untitled> - - - Open Project... - - - - - Missing recent project - - - - - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - - - - - Invalid aspect ratio - - - - - The aspect ratio '%1' is invalid. Please try again. - - - - - Enter custom aspect ratio - - - - - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - - - - - Nested Sequence - - Marker - + Set Marker - + Set clip marker name: - + Set sequence marker name: @@ -1493,52 +1333,52 @@ Media - + New Folder - + Name: - + Filename: - + Video Dimensions: - + Frame Rate: - + %1 field(s) (%2 frame(s)) - + Interlacing: - + Audio Frequency: - + Audio Channels: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1547,17 +1387,17 @@ Audio Layout: %6 - + Name - + Duration - + Rate @@ -1565,27 +1405,27 @@ Audio Layout: %6 MediaPropertiesDialog - + "%1" Properties - + Tracks: - + Video %1: %2x%3 %4FPS - + Audio %1: %2Hz %3 - + %n channel(s) @@ -1593,455 +1433,628 @@ Audio Layout: %6 - + Conform to Frame Rate: - + Alpha is Premultiplied - + Auto (%1) - + Interlacing: - + Name: + + MenuHelper + + + &Project + + + + + &Sequence + + + + + &Folder + + + + + Set In Point + + + + + Set Out Point + + + + + Reset In Point + + + + + Reset Out Point + + + + + Clear In/Out Point + + + + + Add Default Transition + + + + + Link/Unlink + + + + + Enable/Disable + + + + + Nest + + + + + Cu&t + + + + + Cop&y + + + + + &Paste + + + + + Paste Insert + + + + + Duplicate + + + + + Delete + + + + + Ripple Delete + + + + + Split + + + + + Invalid aspect ratio + + + + + The aspect ratio '%1' is invalid. Please try again. + + + + + Enter custom aspect ratio + + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + + + NewSequenceDialog - + Editing "%1" - + New Sequence - + Preset: - + Film 4K - + TV 4K (Ultra HD/2160p) - + 1080p - + 720p - + 480p - + 360p - + 240p - + 144p - + NTSC (480i) - + PAL (576i) - + Custom - + Video - + Width: - + Height: - + Frame Rate: - + Pixel Aspect Ratio: - + Square Pixels (1.0) - + Interlacing: - + None (Progressive) - + Audio - + Sample Rate: - + Name: + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + + + + + Open Project... + + + + + Missing recent project + + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + + + + + Save Project As... + + + + + Unsaved Project + + + + + This project has changed since it was last saved. Would you like to save it before closing? + + + + + No active sequence + + + + + Please open the sequence you wish to export. + + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan - - Playback - - - Generating Proxy: %1% - - - PreferencesDialog - + Preferences - + Invalid CSS File - + CSS file '%1' does not exist. - - Warning - - - - - Some changed settings will require restarting Olive to take effect - - - - + Confirm Reset All Shortcuts - + Are you sure you wish to reset all keyboard shortcuts to their defaults? - + Import Keyboard Shortcuts - - + + Error saving shortcuts - + Failed to open file for reading - + Export Keyboard Shortcuts - + Export Shortcuts - + Shortcuts exported successfully - + Failed to open file for writing - + Browse for CSS file - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: - + Custom CSS: - + Browse - + Image sequence formats: - + Audio Recording: - + Mono - + Stereo - + Effect Textbox Lines: - + Thumbnail Resolution: - + Waveform Resolution: - + Delete Previews - + Use Software Fallbacks When Possible - + General - + Behavior - + Seeking - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) - + Memory Usage - + Upcoming Frame Queue: - - + + frames - - + + seconds - + Previous Frame Queue: - + Playback - + Output Device: - - + + Default - + Input Device: - + Sample Rate: - + Audio - + Search for action or shortcut - + Action - + Shortcut - + Import - + Export - + Reset Selected - + Reset All - + Keyboard @@ -2049,12 +2062,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 - + Could not find stream information - %1 @@ -2062,94 +2075,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. - + Project - + Sequence - + Replace '%1' - - + + All Files - - + + No active sequence - + No sequence is active, please open the sequence you want to replace clips from. - + Active sequence selected - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. - + Rename '%1' - + Enter new name: - + Delete media in use? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? - + Skip - + Image sequence detected - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? - + Import media... - + No sequence is active, please open the sequence you want to delete clips from. @@ -2157,77 +2170,77 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyDialog - + Create Proxy - + Proxy - + Dimensions: - + Same Size as Source - + Half Resolution (1/2) - + Quarter Resolution (1/4) - + Eighth Resolution (1/8) - + Sixteenth Resolution (1/16) - + Format: - + ProRes HQ - + Location: - + Same as Source (in "%1" folder) - + Proxy file exists - + The file "%1" already exists. Do you wish to replace it? - + Custom Location @@ -2235,7 +2248,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" @@ -2243,67 +2256,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" - + Select which media you want to replace this media's clips with: - + Keep the same media in-points - + Replace - + Cancel - + No media selected - + Please select a media to replace with or click 'Cancel'. - + Same media selected - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. - + Folder selected - + You cannot replace footage with a folder. - + Active sequence selected - + You cannot insert a sequence into itself. @@ -2311,7 +2324,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) @@ -2319,17 +2332,17 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ShakeEffect - + Intensity - + Rotation - + Frequency @@ -2337,37 +2350,37 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SolidEffect - + Type - + Solid Color - + SMPTE Bars - + Checkerboard - + Opacity - + Color - + Checkerboard Size @@ -2375,137 +2388,142 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SourcesCommon - + Import... - + New - + View - + Tree View - + Icon View - + Show Toolbar - + Show Sequences - + Replace/Relink Media - + Reveal in Explorer - + Reveal in Finder - + Reveal in File Manager - + Replace Clips Using This Media - + Create Sequence With This Media - + Duplicate - + Delete All Clips Using This Media - + Proxy - + Generating proxy: %1% complete - + Create/Modify Proxy - + Create Proxy - + Modify Proxy - + Restore Original - + Delete - + + Preview in Media Viewer + + + + Properties... - + Replace Media - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? - + Delete proxy - + Would you like to delete the proxy file "%1" as well? @@ -2513,37 +2531,37 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SpeedDialog - + Speed/Duration - + Speed: - + Frame Rate: - + Duration: - + Reverse - + Maintain Audio Pitch - + Ripple Changes @@ -2551,7 +2569,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEditDialog - + Edit Text @@ -2559,113 +2577,118 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEffect - + Text - + Font - + Size - + Color - + Alignment - + Left - - + + Center - + Right - + Justify - + Top - + Bottom - + Word Wrap - + Outline - + Outline Color - + Outline Width - + Shadow - + Shadow Color - + + Shadow Angle + + + + Shadow Distance - + Shadow Softness - + Shadow Opacity - + Sample Text - + &Edit Text @@ -2673,47 +2696,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode - + Sequence - + Media - + Scale - + Color - + Background Color - + Background Opacity - + Offset - + Prepend @@ -2721,147 +2744,152 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Timeline: - - <none> + + Nested Sequence - + Effect already exists - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? - + Add - + Replace - + Skip - + Do this for all conflicts found - + Title... - + Solid Color... - + Bars... - + Tone... - + Noise... - + Unsaved Project - + You must save this project before you can record audio in it. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) - + + (none) + + + + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Snapping - + Zoom In - + Zoom Out - + Record audio - + Add title, solid, bars, etc. @@ -2869,7 +2897,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineHeader - + Center Timecodes @@ -2877,77 +2905,62 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineWidget - + &Undo - + &Redo - + C&ut - + Cop&y - + &Paste - + R&ipple Delete - + Sequence Settings - + &Speed/Duration - + Auto-s&cale - - Enable/Disable - - - - - Link/Unlink - - - - - &Nest - - - - + &Reveal in Project - + R&ename - + %1 Start: %2 End: %3 @@ -2955,57 +2968,57 @@ Duration: %4 - + Rename '%1' - + Rename multiple clips - + Enter a new name for this clip: - + Error - + Couldn't locate media wrapper for sequence. - + Title - + Solid Color - + Bars - + Tone - + Noise - + Duration: @@ -3013,22 +3026,22 @@ Duration: %4 ToneEffect - + Type - + Frequency - + Amount - + Mix @@ -3036,157 +3049,157 @@ Duration: %4 TransformEffect - + Position - + Scale - + Uniform Scale - + Rotation - + Anchor Point - + Opacity - + Blend Mode - + Normal - + Darken - + Multiply - + Color Burn - + Linear Burn - + Lighten - + Screen - + Color Dodge - + Linear Dodge (Add) - + Overlay - + Soft Light - + Hard Light - + Vivid Light - + Linear Light - + Pin Light - + Hard Mix - + Difference - + Exclusion - + Reflect - + Substract - + Average - + Glow - + Negation - + Phoenix @@ -3194,7 +3207,7 @@ Duration: %4 Transition - + Length @@ -3202,64 +3215,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin - + Failed to create VST reference - + Failed to load VST plugin "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Failed to locate entry point for dynamic library. - + VST Error - + Plugin's magic number is invalid - + Plugin - + Interface - + Show - + VST Plugin @@ -3267,17 +3280,17 @@ Duration: %4 Viewer - + Sequence Viewer - + Media Viewer - + (none) @@ -3285,57 +3298,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... - + Show Fullscreen - + Disable - + Screen %1: %2x%3 - + Zoom - + Fit - + Custom - + Close Media - + Save Frame - + Viewer Zoom - + Set Custom Zoom Value: @@ -3343,7 +3356,7 @@ Duration: %4 ViewerWindow - + Exit Fullscreen @@ -3351,12 +3364,12 @@ Duration: %4 VoidEffect - + (unknown) - + Missing Effect @@ -3364,7 +3377,7 @@ Duration: %4 VolumeEffect - + Volume @@ -3372,12 +3385,12 @@ Duration: %4 transition - + Invalid transition - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. diff --git a/ts/olive_fr.ts b/ts/olive_fr.ts index 0e61d9c5a..be9a1024e 100644 --- a/ts/olive_fr.ts +++ b/ts/olive_fr.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. Olive est un logiciel de montage non-linéaire. Ce logiciel est libre et protégé par la licence GNU GPL. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. L'équipe d'Olive vous informe que le code source d'Olive est disponible au téléchargement sur son site Web. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... Rechercher une action… @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings Paramètres vidéo avancés - + Pixel Format: Format de pixel : @@ -38,25 +38,33 @@ Audio - Audio - Audio + Audio - Recording - Enregistrement audio + Enregistrement audio + + + + %1 Audio + + + + + Recording %1 + AudioNoiseEffect - + Amount Quantité - + Mix Mélanger @@ -64,17 +72,17 @@ ChannelLayoutName - + Invalid Invalide - + Mono Mono - + Stereo Stéréo @@ -82,7 +90,7 @@ CollapsibleWidget - + <untitled> &lt;Sans titre&gt; @@ -90,7 +98,7 @@ ColorButton - + Set Color Définir la couleur @@ -98,27 +106,27 @@ CornerPinEffect - + Top Left En haut à gauche - + Top Right En haut à droite - + Bottom Left En bas à gauche - + Bottom Right En bas à droite - + Perspective Perspective @@ -126,7 +134,7 @@ DebugDialog - + Debug Log Journal de débogage @@ -134,23 +142,23 @@ DemoNotice - - + + Welcome to Olive! Bienvenue dans Olive ! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. Olive est un logiciel libre et open-source distribué sous la licence GNU GPL. Si vous avez payé pour ce logiciel, vous avez été victime d'un scam. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 Ce logiciel est actuellement en ALPHA, ce qui signifie qu'il a de grandes chances de planter, d'avoir des bugs ou de manquer de certaines fonctions. Nous n'offrons aucune garantie, utilisez-le à vos propres risques. Merci de nous rapporter tout bug ou demande d'ajout d'une fonctionnalité à %1 - + Thank you for trying Olive and we hope you enjoy it! Merci d'utiliser Olive, nous espérons que vous l'apprécierez ! @@ -158,89 +166,89 @@ Effect - + Invalid effect Effet invalide - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. Aucun candidat pour l'effet '%1'. C'est effet est peut-être corrompu. Essayez de le réinstaller, ou de réinstaller Olive. - + Cu&t &Couper - + &Copy Cop&ier - + Move &Up Déplacer vers le &haut - + Move &Down Déplacer vers le &bas - + D&elete &Supprimer - + Load Settings From File Charger les paramètres - + Save Settings to File Enregistrer les paramètres - + Save Effect Settings Enregistrer les paramètres d'effet - - + + Effect XML Settings %1 Paramètres d'effet XML %1 - + Save Settings Failed L'enregistrement des paramètres a échoué - + Failed to open "%1" for writing. Impossible d'écrire dans "%1". - + Load Effect Settings Charger les paramètres d'effet - - + + Load Settings Failed Le chargement des paramètres a échoué - + Failed to open "%1" for reading. Impossible de lire "%1". - + This settings file doesn't match this effect. Ce fichier de paramètre ne correspond pas à cet effet. @@ -248,47 +256,52 @@ EffectControls - + Effects: Effets : - + &Paste C&oller - + + (none) + (aucun) + + + Add Video Effect Ajouter un effet vidéo - + VIDEO EFFECTS EFFETS VIDÉO - + Add Video Transition Ajouter une transition vidéo - + Add Audio Effect Ajouter un effet audio - + AUDIO EFFECTS EFFETS AUDIO - + Add Audio Transition Ajouter une transition audio - + (Multiple clips selected) (Clips multiples sélectionnés) @@ -296,12 +309,12 @@ EffectRow - + Disable Keyframes Désactiver les images-clés - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? Désactiver les images-clés supprimera toutes les images-clés courantes. Êtes-vous sûr⋅e de vouloir cela ? @@ -309,7 +322,7 @@ EmbeddedFileChooser - + File: Fichier : @@ -317,98 +330,98 @@ ExportDialog - + Export "%1" Exporter "%1" - + Unknown codec name %1 Nom de codec inconnu %1 - + Export Failed L'export a échoué - + Export failed - %1 Export échoué - %1 - + Invalid dimensions Dimensions invalides - + Export width and height must both be even numbers/divisible by 2. La largeur et la hauteur d'export doivent être des nombres pairs/divisibles par 2. - + Invalid codec Codec invalide - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. Impossible de déterminer les paramètres de sortie pour le codec sélectionné. Ceci est un bug, merci de contacter les développeurs. - + Invalid format Format invalide - + Couldn't determine output format. This is a bug, please contact the developers. Impossible de déterminer le format de sortie. Ceci est un bug, merci de contacter les développeurs. - + Export Media Exporter le média - + Quality-based (Constant Rate Factor) Qualitatif (Constant Rate Factor) - + Constant Bitrate Débit binaire constant - - + + Invalid Codec Codec invalide - + Failed to find a suitable encoder for this codec. Export will likely fail. Impossible de trouver un encodeur approprié pour ce codec. L'export risque de planter. - + Failed to find pixel format for this encoder. Export will likely fail. Impossible de trouver un format de pixel pour cet encodeur. L'export risque de planter. - + Bitrate (Mbps): Débit binaire (Mbps) : - + Quality (CRF): Qualité (CRF) : - + Quality Factor: 0 = lossless @@ -423,73 +436,78 @@ 51 = qualité la plus basse - + Target File Size (MB): Taille du fichier cible (Mo) : - + Format: Format : - + Range: Plage : - + Entire Sequence Séquence entière - + In to Out Du point d'entrée au point de sortie - + Video Vidéo - - + + Codec: Codec : - + Width: Largeur : - + Height: Hauteur : - + Frame Rate: Images par seconde : - + Compression Type: Type de compression : - + Advanced Avancé - + + Audio + Audio + + + Sampling Rate: Taux d'échantillonnage : - + Bitrate (Kbps/CBR): Débit binaire (Kbps/CBR) : @@ -497,87 +515,87 @@ ExportThread - + failed to send frame to encoder (%1) Échec de l'envoi d'une image vers l'encodeur (%1) - + failed to receive packet from encoder (%1) Échec de la réception d'un paquet depuis l'encodeur (%1) - + could not video encoder for %1 Impossible d'encoder la vidéo pour %1 - + could not allocate video stream impossible d'allouer le flux vidéo - + could not allocate video encoding context impossible d'allouer le contexte d'encodage vidéo - + could not open output video encoder (%1) impossible d'ouvrir l'encodeur vidéo de sortie (%1) - + could not copy video encoder parameters to output stream (%1) impossible de copier les paramètres d'encodage vidéo vers le flux de sortie (%1) - + could not audio encoder for %1 impossible d'encoder l'audio pour %1 - + could not allocate audio stream impossible d'allouer le flux audio - + could not allocate audio encoding context impossible d'allouer le contexte d'encodage audio - + could not open output audio encoder (%1) impossible d'ouvrir l'encodeur audio de sortie (%1) - + could not copy audio encoder parameters to output stream (%1) impossible de copier les paramètres d'encodage audio vers le flux de sortie (%1) - + could not allocate audio buffer (%1) impossible d'allouer le buffer audio (%1) - + could not create output format context impossible de créer le contexte du format de sortie - + could not open output file (%1) impossible d'ouvrir le fichier de sortie (%1) - + could not write output file header (%1) impossible d'écrire l'en-tête du fichier de sortie (%1) - + could not write output file trailer (%1) impossible d'écrire le trailer du fichier (%1) @@ -585,17 +603,17 @@ FillLeftRightEffect - + Type Type - + Fill Left with Right Remplir la gauche avec la droite - + Fill Right with Left Remplir la droite avec la gauche @@ -603,22 +621,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 Impossible de charger le plugin Frei0r "%1": %2 - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. NOTE : Vous ne pouvez pas charger de plugin Frei0r 32-bit dans la version 64-bit d'Olive. Essayez de trouver une version 64-bit de ce plugin ou basculez vers Olive 32-bit. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. NOTE : Vous ne pouvez pas charger de plugin Frei0r 64-bit dans la version 32-bit d'Olive. Essayez de trouver une version 32-bit de ce plugin ou basculez vers Olive 64-bit. - + Error loading Frei0r plugin Erreur durant le chargement du plugin Frei0r @@ -626,22 +644,22 @@ GraphEditor - + Graph Editor Éditeur de graphes - + Linear Linéaire - + Bezier Bézier - + Hold Maintenir @@ -649,17 +667,17 @@ GraphView - + Zoom to Selection Zoomer sur la sélection - + Zoom to Show All Zoomer pour tout montrer - + Reset View Réinitialiser la vue @@ -667,22 +685,22 @@ InterlacingName - + None (Progressive) Aucun (Progressif) - + Top Field First Trame supérieure en premier - + Bottom Field First Trame inférieure en premier - + Invalid Invalide @@ -690,7 +708,7 @@ KeyframeNavigator - + Enable Keyframes Activer les images-clés @@ -698,17 +716,17 @@ KeyframeView - + Linear Linéaire - + Bezier Bézier - + Hold Maintenir @@ -716,14 +734,14 @@ LabelSlider - - + + Set Value Définir la valeur - - + + New value: Nouvelle valeur : @@ -731,17 +749,17 @@ LoadDialog - + Loading... Cargement… - + Loading '%1'... Chargement '%1'… - + Cancel Annuler @@ -749,52 +767,52 @@ LoadThread - + Version Mismatch Incompatibilité de version - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Ce projet a été enregistré avec une version différente d'Olive et peut ne pas être totalement compatible avec celle-ci. Voulez-vous essayer de l'ouvrir malgré tout ? - + Invalid Clip Link Lien du clip invalide - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? Ce projet contient un lien de clip invalide. Il peut être corrompu. Voulez-vous l'ouvrir malgré tout ? - + %1 - Line: %2 Col: %3 %1 - Ligne : %2 Col. : %3 - + User aborted loading L'utilisateur a abandonné le chargement - + XML Parsing Error Erreur de parsage XML - + Couldn't load '%1'. %2 Impossible de charger '%1'. %2 - + Project Load Error Erreur dans le chargement du projet - + Error loading project: %1 Erreur lors du chargement du projet : %1 @@ -802,697 +820,667 @@ MainWindow - Auto-recovery - Récupération automatique + Récupération automatique - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - Olive ne s'est pas fermé convenablement et un fichier de récupépration a été détecté. Souhaitez-vous l'ouvrir ? + Olive ne s'est pas fermé convenablement et un fichier de récupépration a été détecté. Souhaitez-vous l'ouvrir ? - &Project - &Projet + &Projet - &Sequence - &Séquence + &Séquence - &Folder - &Dossier + &Dossier - Set In Point - Définir le point d'entrée + Définir le point d'entrée - Set Out Point - Définir le point de sortie + Définir le point de sortie - + Welcome to %1 Bienvenue à %1 - Reset In Point - Réinitialiser le point d'entrée + Réinitialiser le point d'entrée - Reset Out Point - Réinitialiser le point de sortie + Réinitialiser le point de sortie - Clear In/Out Point - Effacer le point d'entrée/de sortie + Effacer le point d'entrée/de sortie - No active sequence - Pas de séquence active + Pas de séquence active - Please open the sequence you wish to export. - Veuillez ouvrir la séquence que vous souhaitez exporter. + Veuillez ouvrir la séquence que vous souhaitez exporter. - Save Project As... - Enregistrer sous… + Enregistrer sous… - Unsaved Project - Projet non-sauvegardé + Projet non-sauvegardé - This project has changed since it was last saved. Would you like to save it before closing? - Ce projet a été modifié depuis la dernière sauvegarde. Souhaitez-vous l'enregistrer avant de fermer ? + Ce projet a été modifié depuis la dernière sauvegarde. Souhaitez-vous l'enregistrer avant de fermer ? - + &File &Fichier - + &New &Nouveau - + &Open Project &Ouvrir un projet - + Clear Recent List Nettoyer la liste des projets récents - + Open Recent Ouvrir un projet récent - + &Save Project &Enregistrer le projet - + Save Project &As Enregistrer le projet &sous - + &Import... &Importer… - + &Export... &Exporter… - + E&xit &Quitter - + &Edit &Édition - + &Undo &Annuler - + Redo Rétablir - Cu&t - &Couper + &Couper - Cop&y - Cop&ier + Cop&ier - &Paste - C&oller + C&oller - Paste Insert - Coller et Insérer + Coller et Insérer - Duplicate - Dupliquer + Dupliquer - Delete - Supprimer + Supprimer - Ripple Delete - Supprimer et raccorder + Supprimer et raccorder - Split - Séparer + Séparer - + Select &All Sélectionner &tout - + Deselect All Tout désélectionner - Add Default Transition - Ajouter la transition par défaut + Ajouter la transition par défaut - Link/Unlink - Lier/Délier + Lier/Délier - Enable/Disable - Activer/Désactiver + Activer/Désactiver - Nest - Imbriquer + Imbriquer - + Ripple to In Point Not literal, but it says what it is Propager au point d'entrée - + Ripple to Out Point Not literal, but it says what it is Propager au point de sortie - + Edit to In Point Éditer comme point d'entrée - + Edit to Out Point Éditer comme point de sortie - + Delete In/Out Point Supprimer les points d'entrée/de sortie - + Ripple Delete In/Out Point Supprimer et raccorder au point d'entrée/de sortie - + Set/Edit Marker Définir/Éditer un marqueur - + &View &Affichage - + Zoom In Zommer - + Zoom Out Dézoomer - + Increase Track Height Augmenter la hauteur de piste - + Decrease Track Height Diminuer la hauteur de piste - + Toggle Show All Vue d'ensemble - + Track Lines Contours des pistes - + Rectified Waveforms Formes d'onde ajustées - + Frames Images - + Drop Frame Drop Frame - + Non-Drop Frame Non-Drop Frame - + Milliseconds Millisecondes - + Title/Action Safe Area Zone sûre de titre/d'action - + Off Désactivée - + Default Par défaut - + 4:3 4:3 - + 16:9 16:9 - + Custom Personnalisée - + Full Screen Plein-écran - + Full Screen Viewer Lecteur en plein écran - + &Playback &Lecture - + Go to Start Aller au début - + Previous Frame Image précédente - + Play/Pause Lire/Pause - + Play In to Out Lire entre les points d'entrée et de sortie - + Next Frame Image suivante - + Go to End Aller à la fin - + Go to Previous Cut Aller au point d'édition précédent - + Go to Next Cut Aller au point d'édition suivant - + Go to In Point Aller au point d'entrée - + Go to Out Point Aller au point de sortie - + Shuttle Left Jouer vers la gauche - + Shuttle Stop Arrêter - + Shuttle Right Jouer vers la droite - + Loop Boucle - + &Window &Fenêtre - + Project Projet - + Effect Controls Propriétés des effets - + Timeline Ligne du temps - + Graph Editor Éditeur de graphes - + Media Viewer Lecteur de média - + Sequence Viewer Lecteur de séquence - + Maximize Panel Agrandir le panneau - + + Lock Panels + + + + Reset to Default Layout Restaurer la disposition par défaut - + &Tools &Outils - + Pointer Tool Curseur - + Edit Tool Éditer - + Ripple Tool Propagation - + Razor Tool Cutter - + Slip Tool Déplacer dessous - + Slide Tool Déplacer dessus - + Hand Tool Main - + Transition Tool Transition - + Enable Snapping Autoriser le magnétisme - + Selecting Also Seeks Sélectionner déplace la tête de lecture - + Edit Tool Also Seeks Éditer déplace la tête de lecture - + Edit Tool Selects Links Éditer sélectionne les liens - + Seek Also Selects Sélectionner avec la tête de lecture - + Seek to the End of Pastes Placer la tête de lecture après le collage - + Scroll Wheel Zooms Zoomer avec la molette - + Enable Drag Files to Timeline Autoriser le dépôt de fichier sur la ligne de temps - + Auto-Scale By Default Échelle automatique par défaut - + Enable Seek to Import Déplacer la tête de lecture à l'import - + Audio Scrubbing Lire l'audio au déplacement de la tête de lecture - + Enable Drop on Media to Replace Déposer sur un média pour le remplacer - + Enable Hover Focus Activer le focus au survol - + Ask For Name When Setting Marker Demander un nom à la création d'un marqueur - + No Auto-Scroll Pas de défilement automatique - + Page Auto-Scroll Défilement paginé - + Smooth Auto-Scroll Défilement doux - + Preferences Préférences - + Clear Undo Nettoyer la pile d'annulation - + &Help &Aide - + A&ction Search Chercher une a&ction - + Debug Log Journal de débogage - + &About... &À propos… - + <untitled> &lt;Sans titre&gt; - Open Project... - Ouvrir un projet… + Ouvrir un projet… - Missing recent project - Projet récent manquant + Projet récent manquant - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - Le projet '%1' n'existe plus. Voulez-vous le retirer de la liste des projets récents ? + Le projet '%1' n'existe plus. Voulez-vous le retirer de la liste des projets récents ? - Invalid aspect ratio - Ratio d'image invalide + Ratio d'image invalide - The aspect ratio '%1' is invalid. Please try again. - Le ratio d'image '%1' est invalide. Merci de réessayer à nouveau. + Le ratio d'image '%1' est invalide. Merci de réessayer à nouveau. - Enter custom aspect ratio - Entrez un ratio d'image personnalisé + Entrez un ratio d'image personnalisé - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - Entrez le ratio de la zone sûre de titre/d'action (ex: 16:9) : + Entrez le ratio de la zone sûre de titre/d'action (ex: 16:9) : - Nested Sequence - Séquence imbriquée + Séquence imbriquée Marker - + Set Marker Définir un marqueur - + Set clip marker name: Définir le nom du marqueur de clip : - + Set sequence marker name: Définir le nom du marqueur de séquence : @@ -1500,52 +1488,52 @@ Media - + New Folder Nouveau dossier - + Name: Nom : - + Filename: Nom de fichier : - + Video Dimensions: Dimensions de la vidéo : - + Frame Rate: Images par seconde : - + %1 field(s) (%2 frame(s)) %1 trame(s) (%2 image(s)) - + Interlacing: Entrelacement : - + Audio Frequency: Fréquence audio : - + Audio Channels: Canaux audio : - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1558,17 +1546,17 @@ Fréquence audio: %5 Canaux audio : %6 - + Name Nom - + Duration Durée - + Rate Images par seconde @@ -1576,27 +1564,27 @@ Canaux audio : %6 MediaPropertiesDialog - + "%1" Properties "%1" Propriétés - + Tracks: Pistes : - + Video %1: %2x%3 %4FPS Vidéo %1 : %2×%3 %4 i/s - + Audio %1: %2Hz %3 Audio %1 : %2 Hz %3 - + %n channel(s) %n canal @@ -1604,163 +1592,354 @@ Canaux audio : %6 - + Conform to Frame Rate: Conformer aux images par seconde : - + Alpha is Premultiplied Le canal alpha est prémultiplié - + Auto (%1) Auto (%1) - + Interlacing: Entrelacement : - + Name: Nom : + + MenuHelper + + + &Project + &Projet + + + + &Sequence + &Séquence + + + + &Folder + &Dossier + + + + Set In Point + Définir le point d'entrée + + + + Set Out Point + Définir le point de sortie + + + + Reset In Point + Réinitialiser le point d'entrée + + + + Reset Out Point + Réinitialiser le point de sortie + + + + Clear In/Out Point + Effacer le point d'entrée/de sortie + + + + Add Default Transition + Ajouter la transition par défaut + + + + Link/Unlink + Lier/Délier + + + + Enable/Disable + Activer/Désactiver + + + + Nest + Imbriquer + + + + Cu&t + &Couper + + + + Cop&y + Cop&ier + + + + &Paste + C&oller + + + + Paste Insert + Coller et Insérer + + + + Duplicate + Dupliquer + + + + Delete + Supprimer + + + + Ripple Delete + Supprimer et raccorder + + + + Split + Séparer + + + + Invalid aspect ratio + Ratio d'image invalide + + + + The aspect ratio '%1' is invalid. Please try again. + Le ratio d'image '%1' est invalide. Merci de réessayer à nouveau. + + + + Enter custom aspect ratio + Entrez un ratio d'image personnalisé + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + Entrez le ratio de la zone sûre de titre/d'action (ex: 16:9) : + + NewSequenceDialog - + Editing "%1" Édition "%1" - + New Sequence Nouvelle séquence - + Preset: Préréglage : - + Film 4K Film 4K - + TV 4K (Ultra HD/2160p) TV 4K (Ultra HD/2160p) - + 1080p 1080p - + 720p 720p - + 480p 480p - + 360p 360p - + 240p 240p - + 144p 144p - + NTSC (480i) NTSC (480i) - + PAL (576i) PAL (576i) - + Custom Personnalisé - + Video Vidéo - + Width: Largeur : - + Height: Hauteur : - + Frame Rate: Images par seconde : - + Pixel Aspect Ratio: Ratio des pixels : - + Square Pixels (1.0) Pixels carré (1,0) - + Interlacing: Entrelacement : - + None (Progressive) Aucun (Progressif) - + Audio Audio - + Sample Rate: Taux d'échantillonnage : - + Name: Nom : + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + Récupération automatique + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + Olive ne s'est pas fermé convenablement et un fichier de récupépration a été détecté. Souhaitez-vous l'ouvrir ? + + + + Open Project... + Ouvrir un projet… + + + + Missing recent project + Projet récent manquant + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + Le projet '%1' n'existe plus. Voulez-vous le retirer de la liste des projets récents ? + + + + Save Project As... + Enregistrer sous… + + + + Unsaved Project + Projet non-sauvegardé + + + + This project has changed since it was last saved. Would you like to save it before closing? + Ce projet a été modifié depuis la dernière sauvegarde. Souhaitez-vous l'enregistrer avant de fermer ? + + + + No active sequence + Pas de séquence active + + + + Please open the sequence you wish to export. + Veuillez ouvrir la séquence que vous souhaitez exporter. + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan Panoramique @@ -1768,293 +1947,290 @@ Canaux audio : %6 Playback - Generating Proxy: %1% - Génération du proxy : %1% + Génération du proxy : %1% PreferencesDialog - + Preferences Préférences - + Invalid CSS File Fichier CSS invalide - + CSS file '%1' does not exist. Le fichier CSS '%1' n'existe pas. - Warning - Avertissement + Avertissement - Some changed settings will require restarting Olive to take effect - Certains paramètres modifiés nécessitent le redémarrage d'Olive pour prendre effet + Certains paramètres modifiés nécessitent le redémarrage d'Olive pour prendre effet - + Confirm Reset All Shortcuts Confirmez la réinitialisation de tous les raccourcis clavier - + Are you sure you wish to reset all keyboard shortcuts to their defaults? Êtes-vous sûr⋅e de vouloir réinitialiser tous les raccourcis clavier à leur valeur par défaut ? - + Import Keyboard Shortcuts Importer les raccourcis clavier - - + + Error saving shortcuts Erreur dans l'enregistrement des raccourcis - + Failed to open file for reading Échec de l'ouverture du fichier - + Export Keyboard Shortcuts Exporter les raccourcis clavier - + Export Shortcuts Exporter les raccourcis - + Shortcuts exported successfully Les raccourcis ont été exporté avec succès - + Failed to open file for writing Échec de l'ouverture du fichier - + Browse for CSS file Choisir un fichier CSS - + Delete All Previews Supprimer toutes les prévisualisations - + Are you sure you want to delete all previews? Êtes-vous sûr⋅e de vouloir supprimer toutes les prévisualisations ? - + Previews Deleted Prévisualisations supprimées - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. Toutes les prévisualisations ont été supprimées avec succès. Il est possible que vous deviez ré-ouvrir le projet actuel pour que les changements prennent effet. - + Language: Langue : - + Custom CSS: CSS personnalisé : - + Browse Parcourir - + Image sequence formats: Formats de séquence d'image : - + Audio Recording: Enregistrement audio : - + Mono Mono - + Stereo Stéréo - + Effect Textbox Lines: Lignes des boîtes de texte d'effet : - + Thumbnail Resolution: Résolution des miniatures : - + Waveform Resolution: Résolution des formes d'onde : - + Delete Previews Supprimer les prévisualisations - + Use Software Fallbacks When Possible Utiliser les solutions de repli logicielles quand cela est possible - + General Général - + Behavior Comportement - + Seeking Tête de lecture - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) Recherche fidèle Tojours montrer l'image exacte (la prévisualisation peut se mettre en pause brièvement quand la bonne image est en cours de récupération) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) Recherhe rapide Montrer rapidement (la prévisualition peut montrer brièvement des images imprécises lors du déplacement de la tête de lecture − cela n'affecte pas la lecture et l'export) - + Memory Usage Utilisation de la mémoire - + Upcoming Frame Queue: File d'image à venir : - - + + frames images - - + + seconds secondes - + Previous Frame Queue: File d'image précédentes : - + Playback Lecture - + Output Device: Système de sortie : - - + + Default Défaut - + Input Device: Système d'entrée : - + Sample Rate: Taux d'échantillonnage : - + Audio Audio - + Search for action or shortcut Rechercher une action ou un raccourci - + Action Action - + Shortcut Raccourci - + Import Importer - + Export Exporter - + Reset Selected Réinitialiser la sélection - + Reset All Tout réinitialiser - + Keyboard Clavier @@ -2062,12 +2238,12 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr PreviewGenerator - + Could not open file - %1 Impossible d'ouvrir le fichier - %1 - + Could not find stream information - %1 Impossible de trouver les informations de flux - %1 @@ -2075,94 +2251,94 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr Project - + Search media, markers, etc. Rechercher des médias, marqueurs, etc. - + Project Projet - + Sequence Séquence - + Replace '%1' Remplacer '%1' - - + + All Files Tous les fichiers - - + + No active sequence Pas de séquence active - + No sequence is active, please open the sequence you want to replace clips from. Pas de séquence active, veuillez ouvrir la séquence dont vous souhaitez modifier les clips. - + Active sequence selected Séquence active sélectionnée - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. Vous ne pouvez pas insérer une séquence à l'intérieur d'elle-même, donc aucun clip de ce média ne peut être dans cette séquence. - + Rename '%1' Renommer '%1' - + Enter new name: Entrez le nouveau nom : - + Delete media in use? Supprimer un média en cours d'utilisation ? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? Le média '%1' est actuellement utilisé dans '%2', le supprimer effacera toutes les instances dans la séquence. Êtes-vous sûr⋅e de vouloir cela ? - + Skip Passer - + Image sequence detected Séquence d'image détectée - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? Le fichier '%1' semble faire partie d'une séquence d'image. Voulez-vous l'importer comme tel ? - + Import media... Importer un média… - + No sequence is active, please open the sequence you want to delete clips from. Aucune séquence n'est active, veuillez sélectionner la séquence dont vous souhaitez supprimer les clips. @@ -2170,77 +2346,77 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr ProxyDialog - + Create Proxy Créer un proxy - + Proxy Proxy - + Dimensions: Dimensions : - + Same Size as Source Même taille que la source - + Half Resolution (1/2) Moitié de la résolution (1/2) - + Quarter Resolution (1/4) Quart de la résolution (1/4) - + Eighth Resolution (1/8) Huitième de la résolution (1/8) - + Sixteenth Resolution (1/16) Seizième de la résolution (1/16) - + Format: Format : - + ProRes HQ ProRes HQ - + Location: Chemin : - + Same as Source (in "%1" folder) Comme la source (dans le dossier "%1") - + Proxy file exists Un fichier de proxy existe - + The file "%1" already exists. Do you wish to replace it? Le fichier "%1" existe déjà. Voulez-vous le remplacer ? - + Custom Location Chemin personnalisé @@ -2248,7 +2424,7 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr ProxyGenerator - + Finished generating proxy for "%1" Génération du proxy pour "%1" terminée @@ -2256,67 +2432,67 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr ReplaceClipMediaDialog - + Replace clips using "%1" Remplacer les clips par "%1" - + Select which media you want to replace this media's clips with: Sélectionnez quel média vous souhaitez utiliser pour remplacer les clips de ce média : - + Keep the same media in-points Garder les mêmes points d'entrée du média - + Replace Remplacer - + Cancel Annuler - + No media selected Aucun média sélectionné - + Please select a media to replace with or click 'Cancel'. Veuillez sélectionner un média avec lequel remplacer ou choisir 'Annuler'. - + Same media selected Même média sélectionné - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. Vous avez sélectionné le même média que celui que vous souhaitez remplacer. Veuillez sélectionner un autre média ou cliquer sur 'Annuler'. - + Folder selected Dossier sélectionné - + You cannot replace footage with a folder. Vous ne pouvez pas remplacer un média par un dossier. - + Active sequence selected Séquence active sélectionnée - + You cannot insert a sequence into itself. Vous ne pouvez pas insérer une séquence dans elle-même. @@ -2324,7 +2500,7 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr Sequence - + %1 (copy) %1 (copy) @@ -2332,17 +2508,17 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr ShakeEffect - + Intensity Intensité - + Rotation Rotation - + Frequency Fréquence @@ -2350,37 +2526,37 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr SolidEffect - + Type Type - + Solid Color Couleur unie - + SMPTE Bars Barres SMPTE - + Checkerboard Damier - + Opacity Opacité - + Color Couleur - + Checkerboard Size Taille du damier @@ -2388,137 +2564,142 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr SourcesCommon - + Import... Importer… - + New Nouveau - + View Affichage - + Tree View Vue arborescente - + Icon View Vue par icônes - + Show Toolbar Afficher la barre d'outils - + Show Sequences Afficher les séquences - + Replace/Relink Media Remplacer/Relier le média - + Reveal in Explorer Montrer dans l'explorateur - + Reveal in Finder Montrer dans le Finder - + Reveal in File Manager Montrer dans le gestionnaire de fichiers - + Replace Clips Using This Media Remplacer les clips utilisant ce média - + Create Sequence With This Media Créer une séquence à partir de ce média - + Duplicate Dupliquer - + Delete All Clips Using This Media Supprimer tous les clips utilisant ce média - + Proxy Proxy - + Generating proxy: %1% complete Génération du proxy: %1% achevée - + Create/Modify Proxy Créer/Modifier le proxy - + Create Proxy Créer le proxy - + Modify Proxy Modifier le proxy - + Restore Original Restaurer l'original - + Delete Supprimer - + + Preview in Media Viewer + + + + Properties... Propriétés… - + Replace Media Remplacer le média - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? Vous avez déposé un fichier sur '%1'. Souhaitez-vous le remplacer par le fichier déposé ? - + Delete proxy Supprimer le proxy - + Would you like to delete the proxy file "%1" as well? Souhaitez-vous aussi supprimer le fichier de proxy "%1" ? @@ -2526,37 +2707,37 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr SpeedDialog - + Speed/Duration Vitesse/Durée - + Speed: Vitesse : - + Frame Rate: Images par seconde : - + Duration: Durée : - + Reverse Inverser - + Maintain Audio Pitch Maintenir la hauteur audio - + Ripple Changes Propager les changements @@ -2564,7 +2745,7 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr TextEditDialog - + Edit Text Éditer le texte @@ -2572,113 +2753,118 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr TextEffect - + Text Texte - + Font Police - + Size Taille - + Color Couleur - + Alignment Allignement - + Left À gauche - - + + Center Centrer - + Right À droite - + Justify Justifié - + Top En haut - + Bottom En bas - + Word Wrap Retour automatique - + Outline Contour - + Outline Color Couleur du contour - + Outline Width Épaisseur du contour - + Shadow Ombre - + Shadow Color Couleur de l'ombre - + + Shadow Angle + + + + Shadow Distance Distance de l'ombre - + Shadow Softness Douceur de l'ombre - + Shadow Opacity Opacité de l'ombre - + Sample Text Texte d'exemple - + &Edit Text &Modifier le texte @@ -2686,47 +2872,47 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr TimecodeEffect - + Timecode Code temporel - + Sequence Séquence - + Media Média - + Scale Échelle - + Color Couleur - + Background Color Couleur d'arrière-plan - + Background Opacity Opacité de l'arrière-plan - + Offset Écart - + Prepend Préfixe @@ -2734,147 +2920,156 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr Timeline - + Timeline: Ligne du temps : - <none> - <aucun> + <aucun> - + + Nested Sequence + Séquence imbriquée + + + Effect already exists L'effet existe déjà - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? Le clip '%1' contient déjà un effet '%2'. SOuhaitez-vous le remplacer par l'effet du presse-papier ou ajouter celui comme un effet distinct ? - + Add Ajouter - + Replace Remplacer - + Skip Passer - + Do this for all conflicts found Faire ceci pour tous les conflits - + Title... Titre… - + Solid Color... Couleur unie… - + Bars... Barres… - + Tone... Ton… - + Noise... Bruit… - + Unsaved Project Projet non-sauvegardé - + You must save this project before you can record audio in it. Vous devez sauvegarder ce projet avant d'effectuer un enregistrement audio à l'intérieur. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) Cliquez sur la ligne du temps là où vous souhaitez commencer l'enregistrement (tirez pour limiter l'enregistrement jusqu'à une certaine image) - + + (none) + (aucun) + + + Pointer Tool Curseur - + Edit Tool Éditer - + Ripple Tool Propagation - + Razor Tool Cutter - + Slip Tool Déplacer dessous - + Slide Tool Déplacer dessus - + Hand Tool Main - + Transition Tool Transition - + Snapping Magnétisme - + Zoom In Zoomer - + Zoom Out Dézoomer - + Record audio Enregistrement audio - + Add title, solid, bars, etc. Ajouter un titre, une couleur unie, des barres, etc. @@ -2882,7 +3077,7 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr TimelineHeader - + Center Timecodes Centrer les codes temporels @@ -2890,77 +3085,74 @@ Montrer rapidement (la prévisualition peut montrer brièvement des images impr TimelineWidget - + &Undo Ann&uler - + &Redo &Rétablir - + C&ut &Couper - + Cop&y Cop&ier - + &Paste C&oller - + R&ipple Delete Supprimer et r&accorder - + Sequence Settings Paramètres de la séquence - + &Speed/Duration &Vitesse/Durée - + Auto-s&cale Échelle automati&que - Enable/Disable - Activer/Désactiver + Activer/Désactiver - Link/Unlink - Lier/Délier + Lier/Délier - &Nest - Im&briquer + Im&briquer - + &Reveal in Project &Révéler dans le projet - + R&ename R&enommer - + %1 Start: %2 End: %3 @@ -2971,57 +3163,57 @@ Fin : %3 Durée : %4 - + Rename '%1' Renommer '%1' - + Rename multiple clips Renommer plusieurs clips - + Enter a new name for this clip: Entrez un nouveau nom pour ce clip : - + Error Erreur - + Couldn't locate media wrapper for sequence. Impossible de localiser le conteneurdu média de cette séquence. - + Title Titre - + Solid Color Couleur unie - + Bars Barres - + Tone Ton - + Noise Bruit - + Duration: Durée : @@ -3029,22 +3221,22 @@ Durée : %4 ToneEffect - + Type Type - + Frequency Fréquence - + Amount Quantité - + Mix Mélange @@ -3052,164 +3244,164 @@ Durée : %4 TransformEffect - + Position Position - + Scale Échelle - + Uniform Scale Échelle uniforme - + Rotation Rotation - + Anchor Point Point d'ancrage - + Opacity Opacité - + Blend Mode Mode de fusion - + Normal Normal - + Darken Assombrir - + Multiply Multiplier - + Color Burn Not literal but same translation as Adobe Densité couleur + - + Linear Burn Not literal but same translation as Adobe Densité linéaire + - + Lighten Éclaircir - + Screen Not literal but same translation as Adobe Superposition - + Color Dodge Not literal but same translation as Adobe Densité couleur - - + Linear Dodge (Add) Not literal but same translation as Adobe Densité linéaire - - + Overlay Incrustation - + Soft Light Not literal but same translation as Adobe Lumière tamisée - + Hard Light Lumière crue - + Vivid Light Lumière vive - + Linear Light Lumière linéaire - + Pin Light Not literal but same translation as Adobe Lumière ponctuelle - + Hard Mix Mélange maximal - + Difference Différence - + Exclusion Exclusion - + Reflect Réflexion - + Substract Soustraction - + Average Moyenne - + Glow Lueur - + Negation Négation - + Phoenix Phénix @@ -3217,7 +3409,7 @@ Durée : %4 Transition - + Length Longueur @@ -3225,64 +3417,64 @@ Durée : %4 VSTHost - - - + + + Error loading VST plugin Erreur lors du chargement du plugin VST - + Failed to create VST reference Impossible de créer la référence VST - + Failed to load VST plugin "%1": %2 Impossible de charger le plugin VST "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. NOTE : Vous ne pouvez pas charger de plugin VST 32-bit avec la version 64-bit d'Olive. Essayez de trouver une version 64-bit de ce plugin ou basculez sur la version 32-bit d'Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. NOTE : Vous ne pouvez pas charger de plugin VST 64-bit avec la version 32-bit d'Olive. Essayez de trouver une version 32-bit de ce plugin ou basculez sur la version 64-bit d'Olive. - + Failed to locate entry point for dynamic library. Impossible de localiser le point d'entrée de la bibliothèque dynamique. - + VST Error Erreur VST - + Plugin's magic number is invalid Le nombre magique du plugin est invalide - + Plugin Plugin - + Interface Interface - + Show Montrer - + VST Plugin Plugin VST @@ -3290,17 +3482,17 @@ Durée : %4 Viewer - + Sequence Viewer Lecteur de séquence - + Media Viewer Lecteur de média - + (none) (aucun) @@ -3308,57 +3500,57 @@ Durée : %4 ViewerWidget - + Save Frame as Image... Enregistrer l'image… - + Show Fullscreen Montrer en plein écran - + Disable Désactiver - + Screen %1: %2x%3 Écran %1: %2x%3 - + Zoom Zoom - + Fit Ajuster - + Custom Personnalisé - + Close Media Fermer le média - + Save Frame Enregistrer l'image - + Viewer Zoom Zoom du lecteur - + Set Custom Zoom Value: Définir une valeur de zoom personnalisée : @@ -3366,7 +3558,7 @@ Durée : %4 ViewerWindow - + Exit Fullscreen Quitter le mode plein-écran @@ -3374,12 +3566,12 @@ Durée : %4 VoidEffect - + (unknown) (inconnu) - + Missing Effect Effet manquant @@ -3387,7 +3579,7 @@ Durée : %4 VolumeEffect - + Volume Volume @@ -3395,12 +3587,12 @@ Durée : %4 transition - + Invalid transition Transition invalide - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. Aucun candidat pour la transition '%1'. Cette transition est peut-être corrompue. Essayez de la réinstaller, ou de réinstaller Olive. diff --git a/ts/olive_it.ts b/ts/olive_it.ts index bdfffef1a..7f58b6942 100644 --- a/ts/olive_it.ts +++ b/ts/olive_it.ts @@ -4,12 +4,12 @@ AboutDialog - + Olive is a non-linear video editor. This software is free and protected by the GNU GPL. - + Olive Team is obliged to inform users that Olive source code is available for download from its website. @@ -17,7 +17,7 @@ ActionSearch - + Search for action... @@ -25,12 +25,12 @@ AdvancedVideoDialog - + Advanced Video Settings - + Pixel Format: @@ -38,25 +38,25 @@ Audio - - Audio + + %1 Audio - - Recording + + Recording %1 AudioNoiseEffect - + Amount - + Mix @@ -64,17 +64,17 @@ ChannelLayoutName - + Invalid - + Mono - + Stereo @@ -82,7 +82,7 @@ CollapsibleWidget - + <untitled> @@ -90,7 +90,7 @@ ColorButton - + Set Color @@ -98,27 +98,27 @@ CornerPinEffect - + Top Left - + Top Right - + Bottom Left - + Bottom Right - + Perspective @@ -126,7 +126,7 @@ DebugDialog - + Debug Log @@ -134,23 +134,23 @@ DemoNotice - - + + Welcome to Olive! - + Olive is a free open-source video editor released under the GNU GPL. If you have paid for this software, you have been scammed. - + This software is currently in ALPHA which means it is unstable and very likely to crash, have bugs, and have missing features. We offer no warranty so use at your own risk. Please report any bugs or feature requests at %1 - + Thank you for trying Olive and we hope you enjoy it! @@ -158,89 +158,89 @@ Effect - + Invalid effect - + No candidate for effect '%1'. This effect may be corrupt. Try reinstalling it or Olive. - + Cu&t - + &Copy - + Move &Up - + Move &Down - + D&elete - + Load Settings From File - + Save Settings to File - + Save Effect Settings - - + + Effect XML Settings %1 - + Save Settings Failed - + Failed to open "%1" for writing. - + Load Effect Settings - - + + Load Settings Failed - + Failed to open "%1" for reading. - + This settings file doesn't match this effect. @@ -248,47 +248,52 @@ EffectControls - + Effects: - + &Paste - + + (none) + + + + Add Video Effect - + VIDEO EFFECTS - + Add Video Transition - + Add Audio Effect - + AUDIO EFFECTS - + Add Audio Transition - + (Multiple clips selected) @@ -296,12 +301,12 @@ EffectRow - + Disable Keyframes - + Disabling keyframes will delete all current keyframes. Are you sure you want to do this? @@ -309,7 +314,7 @@ EmbeddedFileChooser - + File: @@ -317,98 +322,98 @@ ExportDialog - + Export "%1" - + Unknown codec name %1 - + Export Failed - + Export failed - %1 - + Invalid dimensions - + Export width and height must both be even numbers/divisible by 2. - + Invalid codec - + Couldn't determine output parameters for the selected codec. This is a bug, please contact the developers. - + Invalid format - + Couldn't determine output format. This is a bug, please contact the developers. - + Export Media - + Quality-based (Constant Rate Factor) - + Constant Bitrate - - + + Invalid Codec - + Failed to find a suitable encoder for this codec. Export will likely fail. - + Failed to find pixel format for this encoder. Export will likely fail. - + Bitrate (Mbps): - + Quality (CRF): - + Quality Factor: 0 = lossless @@ -418,73 +423,78 @@ - + Target File Size (MB): - + Format: - + Range: - + Entire Sequence - + In to Out - + Video - - + + Codec: - + Width: - + Height: - + Frame Rate: - + Compression Type: - + Advanced - + + Audio + + + + Sampling Rate: - + Bitrate (Kbps/CBR): @@ -492,87 +502,87 @@ ExportThread - + failed to send frame to encoder (%1) - + failed to receive packet from encoder (%1) - + could not video encoder for %1 - + could not allocate video stream - + could not allocate video encoding context - + could not open output video encoder (%1) - + could not copy video encoder parameters to output stream (%1) - + could not audio encoder for %1 - + could not allocate audio stream - + could not allocate audio encoding context - + could not open output audio encoder (%1) - + could not copy audio encoder parameters to output stream (%1) - + could not allocate audio buffer (%1) - + could not create output format context - + could not open output file (%1) - + could not write output file header (%1) - + could not write output file trailer (%1) @@ -580,17 +590,17 @@ FillLeftRightEffect - + Type - + Fill Left with Right - + Fill Right with Left @@ -598,22 +608,22 @@ Frei0rEffect - + Failed to load Frei0r plugin "%1": %2 - + NOTE: You can't load 32-bit Frei0r plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit Frei0r plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Error loading Frei0r plugin @@ -621,22 +631,22 @@ GraphEditor - + Graph Editor - + Linear - + Bezier - + Hold @@ -644,17 +654,17 @@ GraphView - + Zoom to Selection - + Zoom to Show All - + Reset View @@ -662,22 +672,22 @@ InterlacingName - + None (Progressive) - + Top Field First - + Bottom Field First - + Invalid @@ -685,7 +695,7 @@ KeyframeNavigator - + Enable Keyframes @@ -693,17 +703,17 @@ KeyframeView - + Linear - + Bezier - + Hold @@ -711,14 +721,14 @@ LabelSlider - - + + Set Value - - + + New value: @@ -726,17 +736,17 @@ LoadDialog - + Loading... - + Loading '%1'... - + Cancel @@ -744,52 +754,52 @@ LoadThread - + Version Mismatch - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? - + Invalid Clip Link - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? - + %1 - Line: %2 Col: %3 - + User aborted loading - + XML Parsing Error - + Couldn't load '%1'. %2 - + Project Load Error - + Error loading project: %1 @@ -797,695 +807,525 @@ MainWindow - - Auto-recovery - - - - - Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - - - - - &Project - - - - - &Sequence - - - - - &Folder - - - - - Set In Point - - - - - Set Out Point - - - - + Welcome to %1 - - Reset In Point - - - - - Reset Out Point - - - - - Clear In/Out Point - - - - - No active sequence - - - - - Please open the sequence you wish to export. - - - - - Save Project As... - - - - - Unsaved Project - - - - - This project has changed since it was last saved. Would you like to save it before closing? - - - - + &File - + &New - + &Open Project - + Clear Recent List - + Open Recent - + &Save Project - + Save Project &As - + &Import... - + &Export... - + E&xit - + &Edit - + &Undo - + Redo - - Cu&t - - - - - Cop&y - - - - - &Paste - - - - - Paste Insert - - - - - Duplicate - - - - - Delete - - - - - Ripple Delete - - - - - Split - - - - + Select &All - + Deselect All - - Add Default Transition - - - - - Link/Unlink - - - - - Enable/Disable - - - - - Nest - - - - + Ripple to In Point - + Ripple to Out Point - + Edit to In Point - + Edit to Out Point - + Delete In/Out Point - + Ripple Delete In/Out Point - + Set/Edit Marker - + &View - + Zoom In - + Zoom Out - + Increase Track Height - + Decrease Track Height - + Toggle Show All - + Track Lines - + Rectified Waveforms - + Frames - + Drop Frame - + Non-Drop Frame - + Milliseconds - + Title/Action Safe Area - + Off - + Default - + 4:3 - + 16:9 - + Custom - + Full Screen - + Full Screen Viewer - + &Playback - + Go to Start - + Previous Frame - + Play/Pause - + Play In to Out - + Next Frame - + Go to End - + Go to Previous Cut - + Go to Next Cut - + Go to In Point - + Go to Out Point - + Shuttle Left - + Shuttle Stop - + Shuttle Right - + Loop - + &Window - + Project - + Effect Controls - + Timeline - + Graph Editor - + Media Viewer - + Sequence Viewer - + Maximize Panel - + + Lock Panels + + + + Reset to Default Layout - + &Tools - + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Enable Snapping - + Selecting Also Seeks - + Edit Tool Also Seeks - + Edit Tool Selects Links - + Seek Also Selects - + Seek to the End of Pastes - + Scroll Wheel Zooms - + Enable Drag Files to Timeline - + Auto-Scale By Default - + Enable Seek to Import - + Audio Scrubbing - + Enable Drop on Media to Replace - + Enable Hover Focus - + Ask For Name When Setting Marker - + No Auto-Scroll - + Page Auto-Scroll - + Smooth Auto-Scroll - + Preferences - + Clear Undo - + &Help - + A&ction Search - + Debug Log - + &About... - + <untitled> - - - Open Project... - - - - - Missing recent project - - - - - The project '%1' no longer exists. Would you like to remove it from the recent projects list? - - - - - Invalid aspect ratio - - - - - The aspect ratio '%1' is invalid. Please try again. - - - - - Enter custom aspect ratio - - - - - Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): - - - - - Nested Sequence - - Marker - + Set Marker - + Set clip marker name: - + Set sequence marker name: @@ -1493,52 +1333,52 @@ Media - + New Folder - + Name: - + Filename: - + Video Dimensions: - + Frame Rate: - + %1 field(s) (%2 frame(s)) - + Interlacing: - + Audio Frequency: - + Audio Channels: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1547,17 +1387,17 @@ Audio Layout: %6 - + Name - + Duration - + Rate @@ -1565,27 +1405,27 @@ Audio Layout: %6 MediaPropertiesDialog - + "%1" Properties - + Tracks: - + Video %1: %2x%3 %4FPS - + Audio %1: %2Hz %3 - + %n channel(s) @@ -1593,455 +1433,628 @@ Audio Layout: %6 - + Conform to Frame Rate: - + Alpha is Premultiplied - + Auto (%1) - + Interlacing: - + Name: + + MenuHelper + + + &Project + + + + + &Sequence + + + + + &Folder + + + + + Set In Point + + + + + Set Out Point + + + + + Reset In Point + + + + + Reset Out Point + + + + + Clear In/Out Point + + + + + Add Default Transition + + + + + Link/Unlink + + + + + Enable/Disable + + + + + Nest + + + + + Cu&t + + + + + Cop&y + + + + + &Paste + + + + + Paste Insert + + + + + Duplicate + + + + + Delete + + + + + Ripple Delete + + + + + Split + + + + + Invalid aspect ratio + + + + + The aspect ratio '%1' is invalid. Please try again. + + + + + Enter custom aspect ratio + + + + + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): + + + NewSequenceDialog - + Editing "%1" - + New Sequence - + Preset: - + Film 4K - + TV 4K (Ultra HD/2160p) - + 1080p - + 720p - + 480p - + 360p - + 240p - + 144p - + NTSC (480i) - + PAL (576i) - + Custom - + Video - + Width: - + Height: - + Frame Rate: - + Pixel Aspect Ratio: - + Square Pixels (1.0) - + Interlacing: - + None (Progressive) - + Audio - + Sample Rate: - + Name: + + OliveGlobal + + + Olive Project %1 + + + + + Auto-recovery + + + + + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? + + + + + Open Project... + + + + + Missing recent project + + + + + The project '%1' no longer exists. Would you like to remove it from the recent projects list? + + + + + Save Project As... + + + + + Unsaved Project + + + + + This project has changed since it was last saved. Would you like to save it before closing? + + + + + No active sequence + + + + + Please open the sequence you wish to export. + + + + + Missing Project File + + + + + Specified project '%1' does not exist. + + + PanEffect - + Pan - - Playback - - - Generating Proxy: %1% - - - PreferencesDialog - + Preferences - + Invalid CSS File - + CSS file '%1' does not exist. - - Warning - - - - - Some changed settings will require restarting Olive to take effect - - - - + Confirm Reset All Shortcuts - + Are you sure you wish to reset all keyboard shortcuts to their defaults? - + Import Keyboard Shortcuts - - + + Error saving shortcuts - + Failed to open file for reading - + Export Keyboard Shortcuts - + Export Shortcuts - + Shortcuts exported successfully - + Failed to open file for writing - + Browse for CSS file - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: - + Custom CSS: - + Browse - + Image sequence formats: - + Audio Recording: - + Mono - + Stereo - + Effect Textbox Lines: - + Thumbnail Resolution: - + Waveform Resolution: - + Delete Previews - + Use Software Fallbacks When Possible - + General - + Behavior - + Seeking - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) - + Memory Usage - + Upcoming Frame Queue: - - + + frames - - + + seconds - + Previous Frame Queue: - + Playback - + Output Device: - - + + Default - + Input Device: - + Sample Rate: - + Audio - + Search for action or shortcut - + Action - + Shortcut - + Import - + Export - + Reset Selected - + Reset All - + Keyboard @@ -2049,12 +2062,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 - + Could not find stream information - %1 @@ -2062,94 +2075,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. - + Project - + Sequence - + Replace '%1' - - + + All Files - - + + No active sequence - + No sequence is active, please open the sequence you want to replace clips from. - + Active sequence selected - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. - + Rename '%1' - + Enter new name: - + Delete media in use? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? - + Skip - + Image sequence detected - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? - + Import media... - + No sequence is active, please open the sequence you want to delete clips from. @@ -2157,77 +2170,77 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyDialog - + Create Proxy - + Proxy - + Dimensions: - + Same Size as Source - + Half Resolution (1/2) - + Quarter Resolution (1/4) - + Eighth Resolution (1/8) - + Sixteenth Resolution (1/16) - + Format: - + ProRes HQ - + Location: - + Same as Source (in "%1" folder) - + Proxy file exists - + The file "%1" already exists. Do you wish to replace it? - + Custom Location @@ -2235,7 +2248,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" @@ -2243,67 +2256,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" - + Select which media you want to replace this media's clips with: - + Keep the same media in-points - + Replace - + Cancel - + No media selected - + Please select a media to replace with or click 'Cancel'. - + Same media selected - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. - + Folder selected - + You cannot replace footage with a folder. - + Active sequence selected - + You cannot insert a sequence into itself. @@ -2311,7 +2324,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) @@ -2319,17 +2332,17 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ShakeEffect - + Intensity - + Rotation - + Frequency @@ -2337,37 +2350,37 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SolidEffect - + Type - + Solid Color - + SMPTE Bars - + Checkerboard - + Opacity - + Color - + Checkerboard Size @@ -2375,137 +2388,142 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SourcesCommon - + Import... - + New - + View - + Tree View - + Icon View - + Show Toolbar - + Show Sequences - + Replace/Relink Media - + Reveal in Explorer - + Reveal in Finder - + Reveal in File Manager - + Replace Clips Using This Media - + Create Sequence With This Media - + Duplicate - + Delete All Clips Using This Media - + Proxy - + Generating proxy: %1% complete - + Create/Modify Proxy - + Create Proxy - + Modify Proxy - + Restore Original - + Delete - + + Preview in Media Viewer + + + + Properties... - + Replace Media - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? - + Delete proxy - + Would you like to delete the proxy file "%1" as well? @@ -2513,37 +2531,37 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff SpeedDialog - + Speed/Duration - + Speed: - + Frame Rate: - + Duration: - + Reverse - + Maintain Audio Pitch - + Ripple Changes @@ -2551,7 +2569,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEditDialog - + Edit Text @@ -2559,113 +2577,118 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TextEffect - + Text - + Font - + Size - + Color - + Alignment - + Left - - + + Center - + Right - + Justify - + Top - + Bottom - + Word Wrap - + Outline - + Outline Color - + Outline Width - + Shadow - + Shadow Color - + + Shadow Angle + + + + Shadow Distance - + Shadow Softness - + Shadow Opacity - + Sample Text - + &Edit Text @@ -2673,47 +2696,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode - + Sequence - + Media - + Scale - + Color - + Background Color - + Background Opacity - + Offset - + Prepend @@ -2721,147 +2744,152 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Timeline: - - <none> + + Nested Sequence - + Effect already exists - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? - + Add - + Replace - + Skip - + Do this for all conflicts found - + Title... - + Solid Color... - + Bars... - + Tone... - + Noise... - + Unsaved Project - + You must save this project before you can record audio in it. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) - + + (none) + + + + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Snapping - + Zoom In - + Zoom Out - + Record audio - + Add title, solid, bars, etc. @@ -2869,7 +2897,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineHeader - + Center Timecodes @@ -2877,77 +2905,62 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimelineWidget - + &Undo - + &Redo - + C&ut - + Cop&y - + &Paste - + R&ipple Delete - + Sequence Settings - + &Speed/Duration - + Auto-s&cale - - Enable/Disable - - - - - Link/Unlink - - - - - &Nest - - - - + &Reveal in Project - + R&ename - + %1 Start: %2 End: %3 @@ -2955,57 +2968,57 @@ Duration: %4 - + Rename '%1' - + Rename multiple clips - + Enter a new name for this clip: - + Error - + Couldn't locate media wrapper for sequence. - + Title - + Solid Color - + Bars - + Tone - + Noise - + Duration: @@ -3013,22 +3026,22 @@ Duration: %4 ToneEffect - + Type - + Frequency - + Amount - + Mix @@ -3036,157 +3049,157 @@ Duration: %4 TransformEffect - + Position - + Scale - + Uniform Scale - + Rotation - + Anchor Point - + Opacity - + Blend Mode - + Normal - + Darken - + Multiply - + Color Burn - + Linear Burn - + Lighten - + Screen - + Color Dodge - + Linear Dodge (Add) - + Overlay - + Soft Light - + Hard Light - + Vivid Light - + Linear Light - + Pin Light - + Hard Mix - + Difference - + Exclusion - + Reflect - + Substract - + Average - + Glow - + Negation - + Phoenix @@ -3194,7 +3207,7 @@ Duration: %4 Transition - + Length @@ -3202,64 +3215,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin - + Failed to create VST reference - + Failed to load VST plugin "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Failed to locate entry point for dynamic library. - + VST Error - + Plugin's magic number is invalid - + Plugin - + Interface - + Show - + VST Plugin @@ -3267,17 +3280,17 @@ Duration: %4 Viewer - + Sequence Viewer - + Media Viewer - + (none) @@ -3285,57 +3298,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... - + Show Fullscreen - + Disable - + Screen %1: %2x%3 - + Zoom - + Fit - + Custom - + Close Media - + Save Frame - + Viewer Zoom - + Set Custom Zoom Value: @@ -3343,7 +3356,7 @@ Duration: %4 ViewerWindow - + Exit Fullscreen @@ -3351,12 +3364,12 @@ Duration: %4 VoidEffect - + (unknown) - + Missing Effect @@ -3364,7 +3377,7 @@ Duration: %4 VolumeEffect - + Volume @@ -3372,12 +3385,12 @@ Duration: %4 transition - + Invalid transition - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. diff --git a/ts/olive_ru.ts b/ts/olive_ru.ts index 24144e6a7..57ee70b45 100644 --- a/ts/olive_ru.ts +++ b/ts/olive_ru.ts @@ -38,12 +38,12 @@ Audio - + %1 Audio - + Recording %1 Запись %1 @@ -126,7 +126,7 @@ DebugDialog - + Debug Log Журнал отладки @@ -248,47 +248,52 @@ EffectControls - + Effects: Эффекты: - + &Paste &Вставить - + + (none) + (нет) + + + Add Video Effect Добавить видеоэффект - + VIDEO EFFECTS ВИДЕОЭФФЕКТЫ - + Add Video Transition Добавить видеопереход - + Add Audio Effect Добавить аудиоэффект - + AUDIO EFFECTS АУДИОЭФФЕКТЫ - + Add Audio Transition Добавить аудиопереход - + (Multiple clips selected) (Выделено больше одного клипа) @@ -502,87 +507,87 @@ ExportThread - + failed to send frame to encoder (%1) - + failed to receive packet from encoder (%1) - + could not video encoder for %1 - + could not allocate video stream - + could not allocate video encoding context - + could not open output video encoder (%1) - + could not copy video encoder parameters to output stream (%1) - + could not audio encoder for %1 - + could not allocate audio stream - + could not allocate audio encoding context - + could not open output audio encoder (%1) - + could not copy audio encoder parameters to output stream (%1) - + could not allocate audio buffer (%1) - + could not create output format context - + could not open output file (%1) - + could not write output file header (%1) - + could not write output file trailer (%1) @@ -631,22 +636,22 @@ GraphEditor - + Graph Editor Редактор графов - + Linear Линейный - + Bezier Безье - + Hold Константа @@ -654,17 +659,17 @@ GraphView - + Zoom to Selection Масштабировать в выделение - + Zoom to Show All Масштабировать и показать всё - + Reset View Сбросить масштаб @@ -736,17 +741,17 @@ LoadDialog - + Loading... Загрузка… - + Loading '%1'... Загружается '%1'... - + Cancel Отмена @@ -754,52 +759,52 @@ LoadThread - + Version Mismatch Несовпадение версий - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Этот проект был сохранён в другой версии Olive, которая неполностью совместима с установленной у вас. Всё-таки попробовать загрузить? - + Invalid Clip Link Некорректная связь клипов - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? В проекте обнаружена некорректная связь клипов. Всё-таки попробовать загрузить её? - + %1 - Line: %2 Col: %3 - + User aborted loading Пользователь прервал загрузку - + XML Parsing Error Ошибка разбора XML - + Couldn't load '%1'. %2 Не удалось загрузить '%1'. %2 - + Project Load Error Ошибка при загрузке проекта - + Error loading project: %1 Ошибка при загрузке проекта: %1 @@ -807,502 +812,507 @@ MainWindow - + Welcome to %1 Приветствуем в %1 - + &File &Файл - + &New &Создать - + &Open Project &Открыть проект - + Clear Recent List Очистить список - + Open Recent Открыть недавний - + &Save Project Со&хранить проект - + Save Project &As Сохранить проект &как - + &Import... &Импортировать… - + &Export... &Экспортировать…. - + E&xit В&ыход - + &Edit &Правка - + &Undo &Отменить - + Redo Вернуть - + Select &All Выд&елить всё - + Deselect All Снять выделение - + Ripple to In Point Сдвиг до точки входа - + Ripple to Out Point Сдвиг до точки выхода - + Edit to In Point Правка до точки входа - + Edit to Out Point Правка до точки выхода - + Delete In/Out Point Удалить точку входа/выхода - + Ripple Delete In/Out Point Удалить со сдвигом точку входа/выхода - + Set/Edit Marker Установить/Изменить маркер - + &View &Вид - + Zoom In Приблизить - + Zoom Out Отдалить - + Increase Track Height Увеличить высоту дорожки - + Decrease Track Height Уменьшить высоту дорожки - + Toggle Show All Показывать весь проект - + Track Lines Линии дорожек - + Rectified Waveforms Волновая форма от низа - + Frames Кадры - + Drop Frame С пропуском кадров - + Non-Drop Frame Без пропуска кадров - + Milliseconds Миллисекунды - + Title/Action Safe Area Безопасная область - + Off Выкл. - + Default По умолчанию - + 4:3 4:3 - + 16:9 16:9 - + Custom Другая - + Full Screen Полноэкранный режим - + Full Screen Viewer Просмотр в полноэкранном режиме - + &Playback Вос&произведение - + Go to Start К началу - + Previous Frame К предыдущему кадру - + Play/Pause Воспроизведение/Пауза - + Play In to Out Проиграть от входа до выхода - + Next Frame К следующему кадру - + Go to End В конец - + Go to Previous Cut - + Go to Next Cut - + Go to In Point К точке входа - + Go to Out Point К точке выхода - + Shuttle Left Уменьшить скорость - + Shuttle Stop Пауза - + Shuttle Right Увеличить скорость - + Loop Петля - + &Window &Окно - + Project Проект - + Effect Controls Управление эффектами - + Timeline Монтажный стол - + Graph Editor Редактор графов - + Media Viewer Просмотр проекта - + Sequence Viewer Просмотр последовательностей - + Maximize Panel Развернуть панель - + + Lock Panels + + + + Reset to Default Layout Вернуть исходный вид панелей - + &Tools &Инструменты - + Pointer Tool Указатель - + Edit Tool Выделение - + Ripple Tool Монтаж со сдвигом - + Razor Tool Подрезка - + Slip Tool Прокрутка с совмещением - + Slide Tool Прокрутка - + Hand Tool Навигация - + Transition Tool Переход - + Enable Snapping Включить прилипание - + Selecting Also Seeks Выделение с перемоткой - + Edit Tool Also Seeks Выделение с перемоткой - + Edit Tool Selects Links Выделение выбирает связи - + Seek Also Selects Перемотка с выделением - + Seek to the End of Pastes Перемотка до конца вставок - + Scroll Wheel Zooms Колесо мыши масштабирует монтажный стол - + Enable Drag Files to Timeline Разрешить перетаскивание на монтажный стол извне - + Auto-Scale By Default Автоматически масштабировать по умолчанию - + Enable Seek to Import - + Audio Scrubbing Воспроизводить звук при прокрутке - + Enable Drop on Media to Replace - + Enable Hover Focus Включить фокус наводкой - + Ask For Name When Setting Marker Спрашивать имя маркера при добавлении - + No Auto-Scroll Без автопрокрутки - + Page Auto-Scroll Прокручивать перелистыванием - + Smooth Auto-Scroll Прокручивать плавно - + Preferences Параметры - + Clear Undo Очистить историю изменений - + &Help &Справка - + A&ction Search &Найти команду - + Debug Log Журнал отладки - + &About... &О программе… - + <untitled> <без названия> @@ -1328,52 +1338,52 @@ Media - + New Folder Новая папка - + Name: Название: - + Filename: Имя файла: - + Video Dimensions: Размер кадров: - + Frame Rate: Частота кадров: - + %1 field(s) (%2 frame(s)) полей: %1 (кадров: %2) - + Interlacing: Чересстрочность: - + Audio Frequency: Частота звука: - + Audio Channels: Звуковых каналов: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1386,17 +1396,17 @@ Audio Layout: %6 Звуковые каналы: %6 - + Name Название - + Duration Длительность - + Rate Частота @@ -1461,122 +1471,122 @@ Audio Layout: %6 MenuHelper - + &Project &Проект - + &Sequence П&оследовательность - + &Folder П&апка - + Set In Point Установить точку входа - + Set Out Point Установить точку выхода - + Reset In Point Сбросить точку входа - + Reset Out Point Сбросить точку выхода - + Clear In/Out Point Очистить точку входа/выхода - + Add Default Transition Добавить переход по умолчанию - + Link/Unlink Связать/Убрать связь - + Enable/Disable Включить/Отключить - + Nest Вложить - + Cu&t В&ырезать - + Cop&y С&копировать - + &Paste &Вставить - + Paste Insert - + Duplicate Сделать копию - + Delete Удалить - + Ripple Delete Удалить со сдвигом - + Split Разделить - + Invalid aspect ratio Некорректное соотношение сторон - + The aspect ratio '%1' is invalid. Please try again. - + Enter custom aspect ratio Введите другое соотношение сторон - + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): @@ -1584,127 +1594,127 @@ Audio Layout: %6 NewSequenceDialog - + Editing "%1" Правка "%1" - + New Sequence Новая последовательность - + Preset: Предстановка: - + Film 4K Кино 4К - + TV 4K (Ultra HD/2160p) TV 4K (Ultra HD/2160p) - + 1080p 1080p - + 720p 720p - + 480p 480p - + 360p 360p - + 240p 240p - + 144p 144p - + NTSC (480i) NTSC (480i) - + PAL (576i) PAL (576i) - + Custom Другое - + Video Видео - + Width: Ширина: - + Height: Высота: - + Frame Rate: Частота кадров: - + Pixel Aspect Ratio: Соотношение сторон пикселя: - + Square Pixels (1.0) Квадратные пиксели (1.0) - + Interlacing: Чересстрочность: - + None (Progressive) Нет (прогрессивно) - + Audio Звук - + Sample Rate: Частота дискретизации: - + Name: Название: @@ -1712,67 +1722,67 @@ Audio Layout: %6 OliveGlobal - + Olive Project %1 Проект Olive %1 - + Auto-recovery Автовосстановление - + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? Olive аварийно завершил работу, обнаружен файл автовосстановления. Открыть его? - + Open Project... Открыть проект… - + Missing recent project Отсутствует недавний проект - + The project '%1' no longer exists. Would you like to remove it from the recent projects list? Проект '%1' больше не существует. Удалить его из списка недавних? - + Save Project As... Сохранить проект как… - + Unsaved Project Несохранённый проект - + This project has changed since it was last saved. Would you like to save it before closing? Проект был изменён с момента последнего сохранения. Хотите сохранить его перед закрытием? - + No active sequence Нет активных последовательностей - + Please open the sequence you wish to export. Откройте последовательность, которую хотите экспортировать - + Missing Project File Отсутствует проектный файл - + Specified project '%1' does not exist. Указанный проект '%1' не существует. @@ -1788,9 +1798,8 @@ Audio Layout: %6 Playback - Generating Proxy: %1% - Создаётся прокси: %1% + Создаётся прокси: %1% @@ -1801,270 +1810,270 @@ Audio Layout: %6 Параметры - + Invalid CSS File Некорректный файл CSS - + CSS file '%1' does not exist. Файл CSS '%1' не существует. - + Confirm Reset All Shortcuts Подтвердите действие - + Are you sure you wish to reset all keyboard shortcuts to their defaults? Вы действительно хотите сбросить все клавиатурные комбинации к исходным значениям? - + Import Keyboard Shortcuts Импортировать клавиатурные комбинации - - + + Error saving shortcuts Ошибка при сохранении клавиатурных комбинаций - + Failed to open file for reading Не удалось открыть файл для чтения - + Export Keyboard Shortcuts Экспортировать клавиатурные комбинации - + Export Shortcuts Экспортировать клавиатурные комбинации - + Shortcuts exported successfully Комбинации успешно экспортированы - + Failed to open file for writing Не удалось открыть файл для записи - + Browse for CSS file Указать файл CSS - + Delete All Previews Удалить все миниатюры - + Are you sure you want to delete all previews? Действительно удалить все миниатюры? - + Previews Deleted Миниатюры удалены - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. Все миниатюры успешно удалены. Возможно, понадобится заново открыть проект, чтобы изменения вступили в силу. - + Language: Язык: - + Custom CSS: Свой CSS: - + Browse Просмотр - + Image sequence formats: Форматы изображений: - + Audio Recording: Запись звука: - + Mono Моно - + Stereo Стерео - + Effect Textbox Lines: Строк в редакторе титров: - + Thumbnail Resolution: Разрешение миниатюр: - + Waveform Resolution: Разрешение волновой формы: - + Delete Previews Удалить миниатюры - + Use Software Fallbacks When Possible По возможности использовать программную реализацию вместо аппаратной - + General Общие - + Behavior Поведение - + Seeking Позиционирование - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) Точное позиционирование Всегда показывать правильный кадр; на его получение может уходить немного времени - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) Быстрое позиционирование Переходы без пауз, возможен кратковременный показ неправильного кадра в просмотре - + Memory Usage Использование памяти - + Upcoming Frame Queue: Очередь последующих кадров: - - + + frames кадров - - + + seconds секунд - + Previous Frame Queue: Очередь предыдущих кадров: - + Playback Воспроизведение - + Output Device: Устройство выхода: - - + + Default По умолчанию - + Input Device: Устройство входа: - + Sample Rate: Частота дискретизации: - + Audio Звук - + Search for action or shortcut Искать действие или комбинацию клавиш - + Action Действие - + Shortcut Комбинация - + Import Импортировать - + Export Экспортировать - + Reset Selected Сбросить выбранное - + Reset All Сбросить все - + Keyboard Клавиатурные комбинации @@ -2072,12 +2081,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 Не удалось открыть файл — %1 - + Could not find stream information - %1 Не удалось найти информацию потока — %1 @@ -2085,94 +2094,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. Искать файлы, маркеры и т.д. - + Project Проект - + Sequence Последовательность - + Replace '%1' Заменить '%1' - - + + All Files Все файлы - - + + No active sequence Нет активных последовательностей - + No sequence is active, please open the sequence you want to replace clips from. Нет активных последовательностей. Откройте последовательность, в которой хотите заменить клипы. - + Active sequence selected Выбрана активная последовательность - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. Вы не можете вставить последовательность в саму себя, так что клипы из этих файлов не могут попасть в эту последовательность. - + Rename '%1' Переименовать '%1' - + Enter new name: Введите новое название: - + Delete media in use? Удалить используемые в проекте файлы? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? Файл '%1' уже используется в '%2'. Его удаление приведет к удалению всех его копий в выбранной последовательности. Вы точно этого хотите? - + Skip Пропустить - + Image sequence detected Обнаружена последовательность изображений - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? Похоже, что файл '%1' яавляется частью последовательности изображений. Загрузить его как таковой? - + Import media... Импортировать медиафайлы… - + No sequence is active, please open the sequence you want to delete clips from. Нет активных последовательностей. Откройте последовательность, из которой хотите удалить клипы. @@ -2240,17 +2249,17 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Как в исходнике (в папке «%1») - + Proxy file exists Прокси-файл уже существует - + The file "%1" already exists. Do you wish to replace it? Файл «%1» уже существует. Заменить его? - + Custom Location Другое размещение @@ -2258,7 +2267,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" Завершено создание прокси для "%1" @@ -2266,67 +2275,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" Заменить клипы данными "%1" - + Select which media you want to replace this media's clips with: Выберите файлы, которые хотите заменить клипы с этими файлами: - + Keep the same media in-points Сохранить существующие точки входа - + Replace Заменить - + Cancel Отмена - + No media selected Файлы не выбраны - + Please select a media to replace with or click 'Cancel'. Выберите файлы для замены или нажмите кнопку «Отмена». - + Same media selected Выбраны те же самые файлы - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. Вы выбрали те же файлы, которые хотите заменить. Выберите что-то другое или нажмите кнопку «Отмена». - + Folder selected Папка выбрана - + You cannot replace footage with a folder. Вы не можете заменить видеосъёмку папкой. - + Active sequence selected Выбрана активная последовательность - + You cannot insert a sequence into itself. Вы не можете вставить последовательность в саму себя. @@ -2334,7 +2343,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) %1 (копия) @@ -2483,52 +2492,57 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Создание прокси: завершено на %1% - + Create/Modify Proxy Создать/Изменить прокси - + Create Proxy Создать прокси - + Modify Proxy Изменить прокси - + Restore Original Восстановить оригинал - + Delete Удалить - + + Preview in Media Viewer + + + + Properties... Свойства… - + Replace Media Заменить файлы - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? - + Delete proxy Удалить прокси - + Would you like to delete the proxy file "%1" as well? Заодно удалить прокси-файл "%1"? @@ -2669,26 +2683,31 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff + Shadow Angle + + + + Shadow Distance Длина тени - + Shadow Softness Мягкость тени - + Shadow Opacity Непрозрачность тени - + Sample Text Образец текста - + &Edit Text &Изменить текст @@ -2696,47 +2715,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode Тайм-код - + Sequence Последовательность - + Media Файл - + Scale Масштаб - + Color Цвет - + Background Color Цвет фона - + Background Opacity Непрозрачность фона - + Offset Смещение - + Prepend Префикс @@ -2744,155 +2763,159 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Timeline: Монтажный стол: - <none> - <нет> + <нет> - + Effect already exists Эффект уже добавлен - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? Клип '%1' уже содержит эффект '%2'. Хотите заменить его на вставляемый эффект или добавить вставляемый эффект как отдельный? - + Add Добавить - + Replace Заменить - + Skip Пропустить - + Do this for all conflicts found Применить для всех конфликтов - + Nested Sequence Вложенная последовательность - + Title... Титры… - + Solid Color... Цветная заливка… - + Bars... Испытательная таблица… - + Tone... Звуковой сигнал… - + Noise... Шум… - + Unsaved Project Несохранённый проект - + You must save this project before you can record audio in it. Перед записью звука необходимо сохранить проект. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) Щелкните на монтажном столе в точке, от которой хотите начать запись звука. Перетащите курсор после щелчка, чтобы сразу задать длительность записи. - + Pointer Tool Указатель - + Edit Tool Выделение - + Ripple Tool Монтаж со сдвигом - + Razor Tool Подрезка - + Slip Tool Прокрутка с совмещением - + Slide Tool Прокрутка - + Hand Tool Навигация - + Transition Tool Переход - + Snapping Прилипание - + Zoom In Приблизить - + Zoom Out Отдалить - + Record audio Записать звук - + Add title, solid, bars, etc. Добавить титры, заливку цветом, испытательную таблицу и т.д. + + + (none) + (нет) + TimelineHeader @@ -2960,7 +2983,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Пере&именовать - + %1 Start: %2 End: %3 @@ -2971,57 +2994,57 @@ Duration: %4 Длительность: %4 - + Rename '%1' Переименовать '%1' - + Rename multiple clips Переименовать клипы - + Enter a new name for this clip: Новое название этого клипа: - + Error Ошибка - + Couldn't locate media wrapper for sequence. - + Title Титры - + Solid Color Цветная заливка - + Bars Испытательная таблица - + Tone Звуковой сигнал - + Noise Шум - + Duration: Длительность: @@ -3218,64 +3241,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin Ошибка при загрузке плагина VST - + Failed to create VST reference - + Failed to load VST plugin "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Failed to locate entry point for dynamic library. - + VST Error Ошибка VST - + Plugin's magic number is invalid - + Plugin Плагин - + Interface Интерфейс - + Show Показать - + VST Plugin Плагин VST @@ -3283,17 +3306,17 @@ Duration: %4 Viewer - + Sequence Viewer Просмотр последовательностей - + Media Viewer Просмотр проекта - + (none) (нет) @@ -3301,57 +3324,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... Сохранить кадр как изображение… - + Show Fullscreen Полноэкранный режим - + Disable Отключить - + Screen %1: %2x%3 Экран %1: %2×%3 - + Zoom Масштаб - + Fit Уместить - + Custom Другой - + Close Media Закрыть файл - + Save Frame Сохранить кадр - + Viewer Zoom Масштаб просмотра - + Set Custom Zoom Value: Другое значение масштаба: @@ -3388,12 +3411,12 @@ Duration: %4 transition - + Invalid transition Некорректный переход - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. diff --git a/ts/olive_sr.ts b/ts/olive_sr.ts index 97897dfbe..a61d2d92b 100644 --- a/ts/olive_sr.ts +++ b/ts/olive_sr.ts @@ -46,12 +46,12 @@ Снимање - + %1 Audio %1 Аудио - + Recording %1 Снимање %1 @@ -134,7 +134,7 @@ DebugDialog - + Debug Log Запис за дебугирање @@ -256,47 +256,52 @@ EffectControls - + Effects: Ефекти: - + &Paste &Залепи - + + (none) + + + + Add Video Effect Додај видео ефекат - + VIDEO EFFECTS Видео ефекти - + Add Video Transition Додај видео прелаз - + Add Audio Effect Додај аудио ефекат - + AUDIO EFFECTS Аудио ефекти - + Add Audio Transition Додај аудио прелаз - + (Multiple clips selected) (Више снимки је одабрано) @@ -491,6 +496,11 @@ Advanced Напредно + + + Audio + Аудио + Sampling Rate: @@ -505,87 +515,87 @@ ExportThread - + failed to send frame to encoder (%1) Слање оквира кодеру није успело (%1) - + failed to receive packet from encoder (%1) Примање пакета од кодера није успело (%1) - + could not video encoder for %1 Није могао видео кодер за %1 - + could not allocate video stream Видео ток се није могао заузети - + could not allocate video encoding context Контекст видео кодирања се није могао заузети - + could not open output video encoder (%1) Излазни видео кодер се није могао отворити (%1) - + could not copy video encoder parameters to output stream (%1) Параметри видео кодера се нису могли копирати у излазни ток (%1) - + could not audio encoder for %1 Није могао аудио кодер за %1 - + could not allocate audio stream Аудио ток се није могао заузети - + could not allocate audio encoding context Контекст аудио кодирања се није могао заузети - + could not open output audio encoder (%1) Излаз аудио кодера се није могао отворити (%1) - + could not copy audio encoder parameters to output stream (%1) Параметри аудио кодера се нису могли копирати у излазни ток (%1) - + could not allocate audio buffer (%1) Аудио међуспремник се није могао заузети (%1) - + could not create output format context Контекст излазног формата се није могао створити - + could not open output file (%1) Излазна датотека се није могла отворити (%1) - + could not write output file header (%1) Заглавље излазне датотеке се није могло исписати (%1) - + could not write output file trailer (%1) Подножје излазне датотеке се није могло исписати (%1) @@ -634,22 +644,22 @@ GraphEditor - + Graph Editor Уређивач графикона - + Linear Линеарно - + Bezier Bezier - + Hold Држи @@ -657,17 +667,17 @@ GraphView - + Zoom to Selection Повећај ка одабиру - + Zoom to Show All Повећај ка свему - + Reset View Врати првобитни приказ @@ -739,17 +749,17 @@ LoadDialog - + Loading... Учитавање... - + Loading '%1'... Учитавање "%1"... - + Cancel Прекини @@ -757,52 +767,52 @@ LoadThread - + Version Mismatch Верзије се не поклапају - + This project was saved in a different version of Olive and may not be fully compatible with this version. Would you like to attempt loading it anyway? Овај проекат је био спашен у другачијој верзији Olive-а и могуће је да није у потпуности компатибилан са овом берзијом. Да ли још увек желите пробати учитати проекат? - + Invalid Clip Link Неважећа веза снимке - + This project contains an invalid clip link. It may be corrupt. Would you like to continue loading it? Овај проекат садржи неважећу везу снимке. Могуће је да је коруптиран. Да ли бисте хтели да га наставите учитавати? - + %1 - Line: %2 Col: %3 %1 - Ред: %2 Колона: %3 - + User aborted loading Корисник је прекинуо учитавање - + XML Parsing Error Грешка у парсирању XML-а - + Couldn't load '%1'. %2 "%1": %2 се није могло учитати - + Project Load Error Грешка при учитавању проекта - + Error loading project: %1 Грешка при учитавању проекта: %1 @@ -810,72 +820,72 @@ MainWindow - + Welcome to %1 - + &File - + &New - + &Open Project - + Clear Recent List - + Open Recent - + &Save Project - + Save Project &As - + &Import... - + &Export... - + E&xit - + &Edit - + &Undo - + Redo @@ -888,432 +898,437 @@ &Залепи - + Select &All - + Deselect All - + Ripple to In Point - + Ripple to Out Point - + Edit to In Point - + Edit to Out Point - + Delete In/Out Point - + Ripple Delete In/Out Point - + Set/Edit Marker - + &View - + Zoom In - + Zoom Out - + Increase Track Height - + Decrease Track Height - + Toggle Show All - + Track Lines - + Rectified Waveforms - + Frames - + Drop Frame - + Non-Drop Frame - + Milliseconds - + Title/Action Safe Area - + Off - + Default - + 4:3 - + 16:9 - + Custom - + Full Screen - + Full Screen Viewer - + &Playback - + Go to Start - + Previous Frame - + Play/Pause - + Play In to Out - + Next Frame - + Go to End - + Go to Previous Cut - + Go to Next Cut - + Go to In Point - + Go to Out Point - + Shuttle Left - + Shuttle Stop - + Shuttle Right - + Loop - + &Window - + Project - + Effect Controls - + Timeline - + Graph Editor Уређивач графикона - + Media Viewer - + Sequence Viewer - + Maximize Panel - + + Lock Panels + + + + Reset to Default Layout - + &Tools - + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Enable Snapping - + Selecting Also Seeks - + Edit Tool Also Seeks - + Edit Tool Selects Links - + Seek Also Selects - + Seek to the End of Pastes - + Scroll Wheel Zooms - + Enable Drag Files to Timeline - + Auto-Scale By Default - + Enable Seek to Import - + Audio Scrubbing - + Enable Drop on Media to Replace - + Enable Hover Focus - + Ask For Name When Setting Marker - + No Auto-Scroll - + Page Auto-Scroll - + Smooth Auto-Scroll - + Preferences - + Clear Undo - + &Help - + A&ction Search - + Debug Log Запис за дебугирање - + &About... - + <untitled> <неименовано> @@ -1339,52 +1354,52 @@ Media - + New Folder - + Name: - + Filename: - + Video Dimensions: - + Frame Rate: Оквирна стопа: - + %1 field(s) (%2 frame(s)) - + Interlacing: - + Audio Frequency: - + Audio Channels: - + Name: %1 Video Dimensions: %2x%3 Frame Rate: %4 @@ -1393,17 +1408,17 @@ Audio Layout: %6 - + Name - + Duration - + Rate @@ -1468,122 +1483,122 @@ Audio Layout: %6 MenuHelper - + &Project - + &Sequence - + &Folder - + Set In Point - + Set Out Point - + Reset In Point - + Reset Out Point - + Clear In/Out Point - + Add Default Transition - + Link/Unlink - + Enable/Disable - + Nest - + Cu&t &Режи - + Cop&y - + &Paste &Залепи - + Paste Insert - + Duplicate - + Delete - + Ripple Delete - + Split - + Invalid aspect ratio - + The aspect ratio '%1' is invalid. Please try again. - + Enter custom aspect ratio - + Enter the aspect ratio to use for the title/action safe area (e.g. 16:9): @@ -1591,127 +1606,127 @@ Audio Layout: %6 NewSequenceDialog - + Editing "%1" - + New Sequence - + Preset: - + Film 4K - + TV 4K (Ultra HD/2160p) - + 1080p - + 720p - + 480p - + 360p - + 240p - + 144p - + NTSC (480i) - + PAL (576i) - + Custom - + Video Видео - + Width: Ширина: - + Height: Висина: - + Frame Rate: Оквирна стопа: - + Pixel Aspect Ratio: - + Square Pixels (1.0) - + Interlacing: - + None (Progressive) Нема (прогресивно) - + Audio Аудио - + Sample Rate: - + Name: @@ -1719,67 +1734,67 @@ Audio Layout: %6 OliveGlobal - + Olive Project %1 - + Auto-recovery - + Olive didn't close properly and an autorecovery file was detected. Would you like to open it? - + Open Project... - + Missing recent project - + The project '%1' no longer exists. Would you like to remove it from the recent projects list? - + Save Project As... - + Unsaved Project - + This project has changed since it was last saved. Would you like to save it before closing? - + No active sequence - + Please open the sequence you wish to export. - + Missing Project File - + Specified project '%1' does not exist. @@ -1792,14 +1807,6 @@ Audio Layout: %6 - - Playback - - - Generating Proxy: %1% - - - PreferencesDialog @@ -1808,268 +1815,268 @@ Audio Layout: %6 - + Invalid CSS File - + CSS file '%1' does not exist. - + Confirm Reset All Shortcuts - + Are you sure you wish to reset all keyboard shortcuts to their defaults? - + Import Keyboard Shortcuts - - + + Error saving shortcuts - + Failed to open file for reading - + Export Keyboard Shortcuts - + Export Shortcuts - + Shortcuts exported successfully - + Failed to open file for writing - + Browse for CSS file - + Delete All Previews - + Are you sure you want to delete all previews? - + Previews Deleted - + All previews deleted succesfully. You may have to re-open your current project for changes to take effect. - + Language: - + Custom CSS: - + Browse - + Image sequence formats: - + Audio Recording: - + Mono Моно - + Stereo Стерео - + Effect Textbox Lines: - + Thumbnail Resolution: - + Waveform Resolution: - + Delete Previews - + Use Software Fallbacks When Possible - + General - + Behavior - + Seeking - + Accurate Seeking Always show the correct frame (visual may pause briefly as correct frame is retrieved) - + Fast Seeking Seek quickly (may briefly show inaccurate frames when seeking - doesn't affect playback/export) - + Memory Usage - + Upcoming Frame Queue: - - + + frames - - + + seconds - + Previous Frame Queue: - + Playback - + Output Device: - - + + Default - + Input Device: - + Sample Rate: - + Audio Аудио - + Search for action or shortcut - + Action - + Shortcut - + Import - + Export - + Reset Selected - + Reset All - + Keyboard @@ -2077,12 +2084,12 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff PreviewGenerator - + Could not open file - %1 - + Could not find stream information - %1 @@ -2090,94 +2097,94 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Project - + Search media, markers, etc. - + Project - + Sequence - + Replace '%1' - - + + All Files - - + + No active sequence - + No sequence is active, please open the sequence you want to replace clips from. - + Active sequence selected - + You cannot insert a sequence into itself, so no clips of this media would be in this sequence. - + Rename '%1' - + Enter new name: - + Delete media in use? - + The media '%1' is currently used in '%2'. Deleting it will remove all instances in the sequence. Are you sure you want to do this? - + Skip - + Image sequence detected - + The file '%1' appears to be part of an image sequence. Would you like to import it as such? - + Import media... - + No sequence is active, please open the sequence you want to delete clips from. @@ -2245,17 +2252,17 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + Proxy file exists - + The file "%1" already exists. Do you wish to replace it? - + Custom Location @@ -2263,7 +2270,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ProxyGenerator - + Finished generating proxy for "%1" @@ -2271,67 +2278,67 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff ReplaceClipMediaDialog - + Replace clips using "%1" - + Select which media you want to replace this media's clips with: - + Keep the same media in-points - + Replace - + Cancel Прекини - + No media selected - + Please select a media to replace with or click 'Cancel'. - + Same media selected - + You selected the same media that you're replacing. Please select a different one or click 'Cancel'. - + Folder selected - + You cannot replace footage with a folder. - + Active sequence selected - + You cannot insert a sequence into itself. @@ -2339,7 +2346,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Sequence - + %1 (copy) @@ -2488,52 +2495,57 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + Create/Modify Proxy - + Create Proxy - + Modify Proxy - + Restore Original - + Delete - + + Preview in Media Viewer + + + + Properties... - + Replace Media - + You dropped a file onto '%1'. Would you like to replace it with the dropped file? - + Delete proxy - + Would you like to delete the proxy file "%1" as well? @@ -2674,26 +2686,31 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff + Shadow Angle + + + + Shadow Distance - + Shadow Softness - + Shadow Opacity - + Sample Text - + &Edit Text @@ -2701,47 +2718,47 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff TimecodeEffect - + Timecode - + Sequence - + Media - + Scale - + Color - + Background Color - + Background Opacity - + Offset - + Prepend @@ -2749,152 +2766,152 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff Timeline - + Nested Sequence - + Timeline: - - <none> - - - - + Effect already exists - + Clip '%1' already contains a '%2' effect. Would you like to replace it with the pasted one or add it as a separate effect? - + Add - + Replace - + Skip - + Do this for all conflicts found - + Title... - + Solid Color... - + Bars... - + Tone... - + Noise... - + Unsaved Project - + You must save this project before you can record audio in it. - + Click on the timeline where you want to start recording (drag to limit the recording to a certain timeframe) - + + (none) + + + + Pointer Tool - + Edit Tool - + Ripple Tool - + Razor Tool - + Slip Tool - + Slide Tool - + Hand Tool - + Transition Tool - + Snapping - + Zoom In - + Zoom Out - + Record audio - + Add title, solid, bars, etc. @@ -2965,7 +2982,7 @@ Seek quickly (may briefly show inaccurate frames when seeking - doesn't aff - + %1 Start: %2 End: %3 @@ -2973,57 +2990,57 @@ Duration: %4 - + Rename '%1' - + Rename multiple clips - + Enter a new name for this clip: - + Error - + Couldn't locate media wrapper for sequence. - + Title - + Solid Color - + Bars - + Tone - + Noise - + Duration: @@ -3220,64 +3237,64 @@ Duration: %4 VSTHost - - - + + + Error loading VST plugin - + Failed to create VST reference - + Failed to load VST plugin "%1": %2 - + NOTE: You can't load 32-bit VST plugins into a 64-bit build of Olive. Please find a 64-bit version of this plugin or switch to a 32-bit build of Olive. - + NOTE: You can't load 64-bit VST plugins into a 32-bit build of Olive. Please find a 32-bit version of this plugin or switch to a 64-bit build of Olive. - + Failed to locate entry point for dynamic library. - + VST Error - + Plugin's magic number is invalid - + Plugin - + Interface - + Show - + VST Plugin @@ -3285,17 +3302,17 @@ Duration: %4 Viewer - + Sequence Viewer - + Media Viewer - + (none) @@ -3303,57 +3320,57 @@ Duration: %4 ViewerWidget - + Save Frame as Image... - + Show Fullscreen - + Disable - + Screen %1: %2x%3 - + Zoom - + Fit - + Custom - + Close Media - + Save Frame - + Viewer Zoom - + Set Custom Zoom Value: @@ -3390,12 +3407,12 @@ Duration: %4 transition - + Invalid transition - + No candidate for transition '%1'. This transition may be corrupt. Try reinstalling it or Olive. diff --git a/ui/menuhelper.cpp b/ui/menuhelper.cpp index f7f78ebe4..7c4ad687d 100644 --- a/ui/menuhelper.cpp +++ b/ui/menuhelper.cpp @@ -32,142 +32,271 @@ #include #include +#include +#include MenuHelper olive::MenuHelper; +void MenuHelper::InitializeSharedMenus() +{ + new_project_ = create_menu_action(nullptr, "newproj", olive::Global.get(), SLOT(new_project()), QKeySequence("Ctrl+N")); + new_project_->setParent(this); + + new_sequence_ = create_menu_action(nullptr, "newseq", panel_project, SLOT(new_sequence()), QKeySequence("Ctrl+Shift+N")); + new_sequence_->setParent(this); + + new_folder_ = create_menu_action(nullptr, "newfolder", panel_project, SLOT(new_folder())); + new_folder_->setParent(this); + + set_in_point_ = create_menu_action(nullptr, "setinpoint", &olive::FocusFilter, SLOT(set_in_point()), QKeySequence("I")); + set_in_point_->setParent(this); + + set_out_point_ = create_menu_action(nullptr, "setoutpoint", &olive::FocusFilter, SLOT(set_out_point()), QKeySequence("O")); + set_out_point_->setParent(this); + + reset_in_point_ = create_menu_action(nullptr, "resetin", &olive::FocusFilter, SLOT(clear_in())); + reset_in_point_->setParent(this); + + reset_out_point_ = create_menu_action(nullptr, "resetout", &olive::FocusFilter, SLOT(clear_out())); + reset_out_point_->setParent(this); + + clear_inout_point = create_menu_action(nullptr, "clearinout", &olive::FocusFilter, SLOT(clear_inout()), QKeySequence("G")); + clear_inout_point->setParent(this); + + add_default_transition_ = create_menu_action(nullptr, "deftransition", panel_timeline, SLOT(add_transition()), QKeySequence("Ctrl+Shift+D")); + add_default_transition_->setParent(this); + + link_unlink_ = create_menu_action(nullptr, "linkunlink", panel_timeline, SLOT(toggle_links()), QKeySequence("Ctrl+L")); + link_unlink_->setParent(this); + + enable_disable_ = create_menu_action(nullptr, "enabledisable", panel_timeline, SLOT(toggle_enable_on_selected_clips()), QKeySequence("Shift+E")); + enable_disable_->setParent(this); + + nest_ = create_menu_action(nullptr, "nest", panel_timeline, SLOT(nest())); + nest_->setParent(this); + + cut_ = create_menu_action(nullptr, "cut", &olive::FocusFilter, SLOT(cut()), QKeySequence("Ctrl+X")); + cut_->setParent(this); + + copy_ = create_menu_action(nullptr, "copy", &olive::FocusFilter, SLOT(copy()), QKeySequence("Ctrl+C")); + copy_->setParent(this); + + paste_ = create_menu_action(nullptr, "paste", olive::Global.get(), SLOT(paste()), QKeySequence("Ctrl+V")); + paste_->setParent(this); + + paste_insert_ = create_menu_action(nullptr, "pasteinsert", olive::Global.get(), SLOT(paste_insert()), QKeySequence("Ctrl+Shift+V")); + paste_insert_->setParent(this); + + duplicate_ = create_menu_action(nullptr, "duplicate", &olive::FocusFilter, SLOT(duplicate()), QKeySequence("Ctrl+D")); + duplicate_->setParent(this); + + delete_ = create_menu_action(nullptr, "delete", &olive::FocusFilter, SLOT(delete_function()), QKeySequence("Del")); + delete_->setParent(this); + + ripple_delete_ = create_menu_action(nullptr, "rippledelete", panel_timeline, SLOT(ripple_delete()), QKeySequence("Shift+Del")); + ripple_delete_->setParent(this); + + split_ = create_menu_action(nullptr, "split", panel_timeline, SLOT(split_at_playhead()), QKeySequence("Ctrl+K")); + split_->setParent(this); + + Retranslate(); +} + void MenuHelper::make_new_menu(QMenu *parent) { - parent->addAction(tr("&Project"), olive::Global.get(), SLOT(new_project()), QKeySequence("Ctrl+N"))->setProperty("id", "newproj"); - parent->addSeparator(); - parent->addAction(tr("&Sequence"), panel_project, SLOT(new_sequence()), QKeySequence("Ctrl+Shift+N"))->setProperty("id", "newseq"); - parent->addAction(tr("&Folder"), panel_project, SLOT(new_folder()))->setProperty("id", "newfolder"); + parent->addAction(new_project_); + parent->addSeparator(); + parent->addAction(new_sequence_); + parent->addAction(new_folder_); } void MenuHelper::make_inout_menu(QMenu *parent) { - parent->addAction(tr("Set In Point"), &olive::FocusFilter, SLOT(set_in_point()), QKeySequence("I"))->setProperty("id", "setinpoint"); - parent->addAction(tr("Set Out Point"), &olive::FocusFilter, SLOT(set_out_point()), QKeySequence("O"))->setProperty("id", "setoutpoint"); - parent->addSeparator(); - parent->addAction(tr("Reset In Point"), &olive::FocusFilter, SLOT(clear_in()))->setProperty("id", "resetin"); - parent->addAction(tr("Reset Out Point"), &olive::FocusFilter, SLOT(clear_out()))->setProperty("id", "resetout"); - parent->addAction(tr("Clear In/Out Point"), &olive::FocusFilter, SLOT(clear_inout()), QKeySequence("G"))->setProperty("id", "clearinout"); + parent->addAction(set_in_point_); + parent->addAction(set_out_point_); + parent->addSeparator(); + parent->addAction(reset_in_point_); + parent->addAction(reset_out_point_); + parent->addAction(clear_inout_point); } void MenuHelper::make_clip_functions_menu(QMenu *parent) { - parent->addAction(tr("Add Default Transition"), panel_timeline, SLOT(add_transition()), QKeySequence("Ctrl+Shift+D"))->setProperty("id", "deftransition"); - parent->addAction(tr("Link/Unlink"), panel_timeline, SLOT(toggle_links()), QKeySequence("Ctrl+L"))->setProperty("id", "linkunlink"); - parent->addAction(tr("Enable/Disable"), panel_timeline, SLOT(toggle_enable_on_selected_clips()), QKeySequence("Shift+E"))->setProperty("id", "enabledisable"); - parent->addAction(tr("Nest"), panel_timeline, SLOT(nest()))->setProperty("id", "nest"); + parent->addAction(add_default_transition_); + parent->addAction(link_unlink_); + parent->addAction(enable_disable_); + parent->addAction(nest_); } void MenuHelper::make_edit_functions_menu(QMenu *parent) { - parent->addAction(tr("Cu&t"), &olive::FocusFilter, SLOT(cut()), QKeySequence("Ctrl+X"))->setProperty("id", "cut"); - parent->addAction(tr("Cop&y"), &olive::FocusFilter, SLOT(copy()), QKeySequence("Ctrl+C"))->setProperty("id", "copy"); - parent->addAction(tr("&Paste"), olive::Global.get(), SLOT(paste()), QKeySequence("Ctrl+V"))->setProperty("id", "paste"); - parent->addAction(tr("Paste Insert"), olive::Global.get(), SLOT(paste_insert()), QKeySequence("Ctrl+Shift+V"))->setProperty("id", "pasteinsert"); - parent->addAction(tr("Duplicate"), &olive::FocusFilter, SLOT(duplicate()), QKeySequence("Ctrl+D"))->setProperty("id", "duplicate"); - parent->addAction(tr("Delete"), &olive::FocusFilter, SLOT(delete_function()), QKeySequence("Del"))->setProperty("id", "delete"); - parent->addAction(tr("Ripple Delete"), panel_timeline, SLOT(ripple_delete()), QKeySequence("Shift+Del"))->setProperty("id", "rippledelete"); - parent->addAction(tr("Split"), panel_timeline, SLOT(split_at_playhead()), QKeySequence("Ctrl+K"))->setProperty("id", "split"); + parent->addAction(cut_); + parent->addAction(copy_); + parent->addAction(paste_); + parent->addAction(paste_insert_); + parent->addAction(duplicate_); + parent->addAction(delete_); + parent->addAction(ripple_delete_); + parent->addAction(split_); } void MenuHelper::set_bool_action_checked(QAction *a) { - if (!a->data().isNull()) { - bool* variable = reinterpret_cast(a->data().value()); - a->setChecked(*variable); - } + if (!a->data().isNull()) { + bool* variable = reinterpret_cast(a->data().value()); + a->setChecked(*variable); + } } void MenuHelper::set_int_action_checked(QAction *a, const int& i) { - if (!a->data().isNull()) { - a->setChecked(a->data() == i); - } + if (!a->data().isNull()) { + a->setChecked(a->data() == i); + } } -#include void MenuHelper::set_button_action_checked(QAction *a) { - a->setChecked(reinterpret_cast(a->data().value())->isChecked()); + a->setChecked(reinterpret_cast(a->data().value())->isChecked()); +} + +void MenuHelper::Retranslate() +{ + new_project_->setText(tr("&Project")); + new_sequence_->setText(tr("&Sequence")); + new_folder_->setText(tr("&Folder")); + set_in_point_->setText(tr("Set In Point")); + set_out_point_->setText(tr("Set Out Point")); + reset_in_point_->setText(tr("Reset In Point")); + reset_out_point_->setText(tr("Reset Out Point")); + clear_inout_point->setText(tr("Clear In/Out Point")); + add_default_transition_->setText(tr("Add Default Transition")); + link_unlink_->setText(tr("Link/Unlink")); + enable_disable_->setText(tr("Enable/Disable")); + nest_->setText(tr("Nest")); + cut_->setText(tr("Cu&t")); + copy_->setText(tr("Cop&y")); + paste_->setText(tr("&Paste")); + paste_insert_->setText(tr("Paste Insert")); + duplicate_->setText(tr("Duplicate")); + delete_->setText(tr("Delete")); + ripple_delete_->setText(tr("Ripple Delete")); + split_->setText(tr("Split")); } void MenuHelper::toggle_bool_action() { - QAction* action = static_cast(sender()); - bool* variable = reinterpret_cast(action->data().value()); - *variable = !(*variable); - update_ui(false); + QAction* action = static_cast(sender()); + bool* variable = reinterpret_cast(action->data().value()); + *variable = !(*variable); + update_ui(false); } void MenuHelper::set_titlesafe_from_menu() { - double tsa = static_cast(sender())->data().toDouble(); + double tsa = static_cast(sender())->data().toDouble(); - if (qIsNaN(tsa)) { + if (qIsNaN(tsa)) { - // disable title safe area - olive::CurrentConfig.show_title_safe_area = false; + // disable title safe area + olive::CurrentConfig.show_title_safe_area = false; + + } else { + + // using title safe area + olive::CurrentConfig.show_title_safe_area = true; + + // are we using the default area aspect ratio, or a specific one + if (qIsNull(tsa)) { + + // default title safe area + olive::CurrentConfig.use_custom_title_safe_ratio = false; } else { - // using title safe area - olive::CurrentConfig.show_title_safe_area = true; + // using a specific aspect ratio + olive::CurrentConfig.use_custom_title_safe_ratio = true; - // are we using the default area aspect ratio, or a specific one - if (qIsNull(tsa)) { + if (tsa < 0.0) { - // default title safe area - olive::CurrentConfig.use_custom_title_safe_ratio = false; + // set a custom title safe area + QString input; + bool invalid = false; + QRegExp arTest("[0-9.]+:[0-9.]+"); - } else { + do { + if (invalid) { + QMessageBox::critical(olive::MainWindow, tr("Invalid aspect ratio"), tr("The aspect ratio '%1' is invalid. Please try again.").arg(input)); + } - // using a specific aspect ratio - olive::CurrentConfig.use_custom_title_safe_ratio = true; - - if (tsa < 0.0) { - - // set a custom title safe area - QString input; - bool invalid = false; - QRegExp arTest("[0-9.]+:[0-9.]+"); - - do { - if (invalid) { - QMessageBox::critical(olive::MainWindow, tr("Invalid aspect ratio"), tr("The aspect ratio '%1' is invalid. Please try again.").arg(input)); - } - - input = QInputDialog::getText(olive::MainWindow, tr("Enter custom aspect ratio"), tr("Enter the aspect ratio to use for the title/action safe area (e.g. 16:9):")); - invalid = !arTest.exactMatch(input) && !input.isEmpty(); - } while (invalid); - - if (!input.isEmpty()) { - QStringList inputList = input.split(':'); - olive::CurrentConfig.custom_title_safe_ratio = inputList.at(0).toDouble()/inputList.at(1).toDouble(); - } - - } else { - - // specified tsa is a specific custom aspect ratio - olive::CurrentConfig.custom_title_safe_ratio = tsa; - } + input = QInputDialog::getText(olive::MainWindow, tr("Enter custom aspect ratio"), tr("Enter the aspect ratio to use for the title/action safe area (e.g. 16:9):")); + invalid = !arTest.exactMatch(input) && !input.isEmpty(); + } while (invalid); + if (!input.isEmpty()) { + QStringList inputList = input.split(':'); + olive::CurrentConfig.custom_title_safe_ratio = inputList.at(0).toDouble()/inputList.at(1).toDouble(); } + } else { + + // specified tsa is a specific custom aspect ratio + olive::CurrentConfig.custom_title_safe_ratio = tsa; + } + } - panel_sequence_viewer->viewer_widget->update(); + } + + panel_sequence_viewer->viewer_widget->update(); } void MenuHelper::set_autoscroll() { - QAction* action = static_cast(sender()); - olive::CurrentConfig.autoscroll = action->data().toInt(); + QAction* action = static_cast(sender()); + olive::CurrentConfig.autoscroll = action->data().toInt(); } void MenuHelper::menu_click_button() { - reinterpret_cast(static_cast(sender())->data().value())->click(); + reinterpret_cast(static_cast(sender())->data().value())->click(); } void MenuHelper::set_timecode_view() { - QAction* action = static_cast(sender()); - olive::CurrentConfig.timecode_view = action->data().toInt(); - update_ui(false); + QAction* action = static_cast(sender()); + olive::CurrentConfig.timecode_view = action->data().toInt(); + update_ui(false); } void MenuHelper::open_recent_from_menu() { - int index = static_cast(sender())->data().toInt(); - olive::Global.get()->open_recent(index); + int index = static_cast(sender())->data().toInt(); + olive::Global.get()->open_recent(index); +} + +QMenu* MenuHelper::create_submenu(QMenuBar* parent, + const QObject *receiver, + const char *member) { + QMenu* menu = new QMenu(parent); + parent->addMenu(menu); + + if (receiver != nullptr) { + QObject::connect(menu, SIGNAL(aboutToShow()), receiver, member); + } + + return menu; +} + +QMenu* MenuHelper::create_submenu(QMenu* parent) { + QMenu* menu = new QMenu(parent); + parent->addMenu(menu); + return menu; +} + +QAction* MenuHelper::create_menu_action(QWidget *parent, + const char* id, + const QObject *receiver, + const char *member, + const QKeySequence &shortcut) { + QAction* action = new QAction(parent); + action->setProperty("id", id); + action->setShortcut(shortcut); + + if (receiver != nullptr) { + QObject::connect(action, SIGNAL(triggered(bool)), receiver, member); + } + + if (parent != nullptr) { + parent->addAction(action); + } + + return action; } diff --git a/ui/menuhelper.h b/ui/menuhelper.h index eda2a6fbb..2f6ddea49 100644 --- a/ui/menuhelper.h +++ b/ui/menuhelper.h @@ -25,151 +25,190 @@ #include class MenuHelper : public QObject { - Q_OBJECT + Q_OBJECT public: - /** - * @brief Creates a menu of new items that can be created - * - * Adds the full set of creatable items to a QMenu (e.g. new project, - * new sequence, new folder, etc.) - * - * @param parent - * - * The menu to add items to. - */ - void make_new_menu(QMenu* parent); + void InitializeSharedMenus(); - /** - * @brief Creates a menu of options for working with in/out points - * - * Adds a set of options for working with sequence/footage in/out points, - * e.g. setting in/out points, clearing in/out points, etc. - * - * @param parent - * - * The menu to add items to. - */ - void make_inout_menu(QMenu* parent); + /** + * @brief Creates a menu of new items that can be created + * + * Adds the full set of creatable items to a QMenu (e.g. new project, + * new sequence, new folder, etc.) + * + * @param parent + * + * The menu to add items to. + */ + void make_new_menu(QMenu* parent); - /** - * @brief Creates a menu of clip functions - * - * Adds a set of clip functions including: - * * Add Default Transition - * * Link/Unlink - * * Enable/Disable - * * Nest - * - * @param parent - * - * The menu to add items to. - */ - void make_clip_functions_menu(QMenu* parent); + /** + * @brief Creates a menu of options for working with in/out points + * + * Adds a set of options for working with sequence/footage in/out points, + * e.g. setting in/out points, clearing in/out points, etc. + * + * @param parent + * + * The menu to add items to. + */ + void make_inout_menu(QMenu* parent); - /** - * @brief Creates standard edit menu (cut, copy, paste, etc.) - * - * @param parent - * - * The menu to add items to. - */ - void make_edit_functions_menu(QMenu* parent); + /** + * @brief Creates a menu of clip functions + * + * Adds a set of clip functions including: + * * Add Default Transition + * * Link/Unlink + * * Enable/Disable + * * Nest + * + * @param parent + * + * The menu to add items to. + */ + void make_clip_functions_menu(QMenu* parent); - /** - * @brief Sets the checked state of a menu item based on a Boolean variable. - * - * Many menu items simply toggle a Boolean variable. This is a convenience function, assuming the QAction's data - * variable is a pointer to a Boolean variable, that sets the checked state of the QAction to the enabled state - * of the Boolean. Used heavily in functions like toolMenu_About_To_Be_Shown() - * - * @param a - * - * The QAction to set the checked state of. - */ - void set_bool_action_checked(QAction* a); + /** + * @brief Creates standard edit menu (cut, copy, paste, etc.) + * + * @param parent + * + * The menu to add items to. + */ + void make_edit_functions_menu(QMenu* parent); - /** - * @brief Sets the checked state of a menu item based on an integer variable. - * - * Many menu items simply set a variable to a particular integer. This is a convenience function, assuming the - * QAction's data variable is an integer to set a variable to, that sets the checked state of the QAction to - * whether the QAction's integer equals the integer variable. Used heavily in functions like - * viewMenu_About_To_Be_Shown() - * - * @param a - * - * The QAction to set the checked state of - * - * @param i - * - * The integer variable to compare the QAction's integer to - */ - void set_int_action_checked(QAction* a, const int& i); + /** + * @brief Sets the checked state of a menu item based on a Boolean variable. + * + * Many menu items simply toggle a Boolean variable. This is a convenience function, assuming the QAction's data + * variable is a pointer to a Boolean variable, that sets the checked state of the QAction to the enabled state + * of the Boolean. Used heavily in functions like toolMenu_About_To_Be_Shown() + * + * @param a + * + * The QAction to set the checked state of. + */ + void set_bool_action_checked(QAction* a); - /** - * @brief Sets the checked state of a menu item based on a QPushButton. - * - * Some menu items function largely as a proxy to a QPushButton. Assuming the QAction's data variable is a - * pointer to a QPushButton, this sets a QAction's checked state to the checked state of the QPushButton. - * - * @param a - */ - void set_button_action_checked(QAction* a); + /** + * @brief Sets the checked state of a menu item based on an integer variable. + * + * Many menu items simply set a variable to a particular integer. This is a convenience function, assuming the + * QAction's data variable is an integer to set a variable to, that sets the checked state of the QAction to + * whether the QAction's integer equals the integer variable. Used heavily in functions like + * viewMenu_About_To_Be_Shown() + * + * @param a + * + * The QAction to set the checked state of + * + * @param i + * + * The integer variable to compare the QAction's integer to + */ + void set_int_action_checked(QAction* a, const int& i); + + /** + * @brief Sets the checked state of a menu item based on a QPushButton. + * + * Some menu items function largely as a proxy to a QPushButton. Assuming the QAction's data variable is a + * pointer to a QPushButton, this sets a QAction's checked state to the checked state of the QPushButton. + * + * @param a + */ + void set_button_action_checked(QAction* a); + + void Retranslate(); + + static QMenu* create_submenu(QMenuBar* parent, + const QObject *receiver = nullptr, + const char *member = nullptr); + static QMenu* create_submenu(QMenu* parent); + static QAction* create_menu_action(QWidget *parent, + const char* id, + const QObject *receiver = nullptr, + const char *member = nullptr, + const QKeySequence &shortcut = 0); public slots: - /** - * @brief Sets a QAction's Boolean reference to the opposite of its current value - * - * Many menu items simply toggle a Boolean variable. This is a convenience function, assuming the QAction's data - * variable is a pointer to a Boolean variable, that sets the Boolean variable to the opposite of its current value. - */ - void toggle_bool_action(); + /** + * @brief Sets a QAction's Boolean reference to the opposite of its current value + * + * Many menu items simply toggle a Boolean variable. This is a convenience function, assuming the QAction's data + * variable is a pointer to a Boolean variable, that sets the Boolean variable to the opposite of its current value. + */ + void toggle_bool_action(); - /** - * @brief Set Title/Action Safe Area from QAction - * - * A receiver for several Title/Action Safe Area setting items. Assumes the sender() is a QAction with a data - * variable as a `double`. The `double` can be the following values: - * * NaN (qSNaN()) - Disable Title/Action Safe Area - * * 0 - Enable Title/Action Safe Area, default aspect ratio (match current active Sequence's aspect ratio). - * * Negative Value - Enable Title/Action Safe Area, any negative number assumes a custom aspect ratio. Will ask - * the user to enter an aspect ratio and will use the result. - * * Positive Value - Enable Title/Action Safe Area, use value as the aspect ratio. - */ - void set_titlesafe_from_menu(); + /** + * @brief Set Title/Action Safe Area from QAction + * + * A receiver for several Title/Action Safe Area setting items. Assumes the sender() is a QAction with a data + * variable as a `double`. The `double` can be the following values: + * * NaN (qSNaN()) - Disable Title/Action Safe Area + * * 0 - Enable Title/Action Safe Area, default aspect ratio (match current active Sequence's aspect ratio). + * * Negative Value - Enable Title/Action Safe Area, any negative number assumes a custom aspect ratio. Will ask + * the user to enter an aspect ratio and will use the result. + * * Positive Value - Enable Title/Action Safe Area, use value as the aspect ratio. + */ + void set_titlesafe_from_menu(); - /** - * @brief Set Autoscroll setting from QAction - * - * Assumes the sender() is a QAction with an integer as its data variable. The data variable should be - * `AUTOSCROLL_NO_SCROLL`, `AUTOSCROLL_PAGE_SCROLL` (default) or `AUTOSCROLL_SMOOTH_SCROLL`. - */ - void set_autoscroll(); + /** + * @brief Set Autoscroll setting from QAction + * + * Assumes the sender() is a QAction with an integer as its data variable. The data variable should be + * `AUTOSCROLL_NO_SCROLL`, `AUTOSCROLL_PAGE_SCROLL` (default) or `AUTOSCROLL_SMOOTH_SCROLL`. + */ + void set_autoscroll(); - /** - * @brief Clicks a QPushButton referenced by a QAction when triggered. - * - * Some menu items function largely as a proxy to a QPushButton. Assuming the QAction's data variable is a - * pointer to a QPushButton, this triggers a click() event on that QPushButton. - */ - void menu_click_button(); + /** + * @brief Clicks a QPushButton referenced by a QAction when triggered. + * + * Some menu items function largely as a proxy to a QPushButton. Assuming the QAction's data variable is a + * pointer to a QPushButton, this triggers a click() event on that QPushButton. + */ + void menu_click_button(); - /** - * @brief Sets the current timecode setting - * - * Assumes the sender() is a QAction with an integer as its data variable. The data variable should be - * `AUTOSCROLL_NO_AUTOSCROLL`, `AUTOSCROLL_PAGE_AUTOSCROLL` (default) or `AUTOSCROLL_SMOOTH_AUTOSCROLL`. - */ - void set_timecode_view(); + /** + * @brief Sets the current timecode setting + * + * Assumes the sender() is a QAction with an integer as its data variable. The data variable should be + * `AUTOSCROLL_NO_AUTOSCROLL`, `AUTOSCROLL_PAGE_AUTOSCROLL` (default) or `AUTOSCROLL_SMOOTH_AUTOSCROLL`. + */ + void set_timecode_view(); - /** - * @brief Calls open_recent() in Olive::Global using the index from a QAction - * - * Assumes the sender() is a QAction with an integer as its data variable. The data variable is an index of - * the internal auto-recovery project list. - */ - void open_recent_from_menu(); + /** + * @brief Calls open_recent() in Olive::Global using the index from a QAction + * + * Assumes the sender() is a QAction with an integer as its data variable. The data variable is an index of + * the internal auto-recovery project list. + */ + void open_recent_from_menu(); + +private: + QAction* new_project_; + QAction* new_sequence_; + QAction* new_folder_; + + QAction* set_in_point_; + QAction* set_out_point_; + QAction* reset_in_point_; + QAction* reset_out_point_; + QAction* clear_inout_point; + + QAction* add_default_transition_; + QAction* link_unlink_; + QAction* enable_disable_; + QAction* nest_; + + QAction* cut_; + QAction* copy_; + QAction* paste_; + QAction* paste_insert_; + QAction* duplicate_; + QAction* delete_; + QAction* ripple_delete_; + QAction* split_; private slots: @@ -177,10 +216,10 @@ private slots: }; namespace olive { - /** +/** * @brief A global MenuHelper object to assist menu creation throughout Olive. */ - extern MenuHelper MenuHelper; +extern MenuHelper MenuHelper; } #endif // MENUHELPER_H diff --git a/ui/otreeview.cpp b/ui/otreeview.cpp deleted file mode 100644 index 9ea03a828..000000000 --- a/ui/otreeview.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "otreeview.h" - -OTreeView::OTreeView(QWidget *parent) : QTreeView(parent) { - setSortingEnabled(true); - sortByColumn(0, Qt::AscendingOrder); - setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(show_context_menu())); - connect(this, SIGNAL(clicked(const QModelIndex&)), this, SLOT(item_click(const QModelIndex&))); -} diff --git a/ui/otreeview.h b/ui/otreeview.h deleted file mode 100644 index 810f8b5ec..000000000 --- a/ui/otreeview.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef OTREEVIEW_H -#define OTREEVIEW_H - -#include - -#include "ui/sourcetable.h" - -class OTreeView : public QTreeView { - Q_OBJECT -public: - OTreeView(QWidget* parent = 0); -private: - -}; - -#endif // OTREEVIEW_H diff --git a/ui/panel.cpp b/ui/panel.cpp index 899afd526..c7d60f882 100644 --- a/ui/panel.cpp +++ b/ui/panel.cpp @@ -21,6 +21,7 @@ #include "panel.h" #include +#include QVector olive::panels; @@ -35,10 +36,16 @@ Panel::~Panel() olive::panels.removeAll(this); } -bool Panel::event(QEvent *e) { +void Panel::changeEvent(QEvent *e) +{ if (e->type() == QEvent::LanguageChange) { - Retranslate(); - return true; +// Retranslate(); + } else { + QDockWidget::changeEvent(e); } - return QDockWidget::event(e); +} + +void Panel::Retranslate() +{ + qDebug() << "like what?"; } diff --git a/ui/panel.h b/ui/panel.h index 98869015b..cb43e7afe 100644 --- a/ui/panel.h +++ b/ui/panel.h @@ -28,9 +28,9 @@ class Panel : public QDockWidget { public: Panel(QWidget* parent = nullptr); virtual ~Panel() override; - virtual bool event(QEvent* e) override; + virtual void Retranslate(); protected: - virtual void Retranslate() = 0; + virtual void changeEvent(QEvent* e) override; }; namespace olive {